RELEASE NOTES NOTE: Clarion 6.3 or higher required. 2014-06-28: - Add Clarion 8 to list of supported versions in installer. 2011-08-09 - Update change list. 2011-07-28: - Add Clarion 8 to list of supported versions in installer. - Rollup changes to date for the following templates: VSA_RPTX, VSA_FILO, VSA_GRPG, VSA_MISO VSA_FORR, VSA_ELEV, VSA_VIER, VSA_OOP VSA_ECCX, VSA_FILX, VSA_HOTX, VSA_LFLX VSA_SHDX, VSA_EVNT, VSA_THRX, VSA_REGX VSA_CLIX, VSA_DBGO, VSA_BTNX, VSA_KEYX VSA_WTM, VSA_UPDR, VSA_TPLU, VSA_VIEX VSA_OWTG, VSA_TPLX, VSA_KEYG, VSA_BRWX VSA_MISX - Rollup changes to date for the following classes: VSA_DFIO.CLW, VSA_DISK.INC, VSA_DISK.CLW VSA_HDEC.INC, VSA_ENTW.INC, VSA_ENTW.CLW VSA_STRN.INC, VSA_STRN.CLW, VSA_SHFI.TRN VSA_SHFI.CLW, VSA_HOT.CLW, VSA_UTIL.INC VSA_UTIL.CLW, VSA_TAB.CLW, VSA_TAB.INC VSA_STR.INC, VSA_STR.CLW, VSA_HDEC.CLW VSA_STRW.INC 2009-12-19: - Created integrated installer that works for both Clarion 6.3 and Clarion 7.x. - Made template registration optional. 2009-12-18: - Installer was not using latest copy of LIBSRC files. 2009-06-24: - Installer was putting extra copy in non-third party template folder. - Virtual Embed points are once again generated by "%ThisInstance" instead of "'Default'". Review embed points for orphaned code after upgrading. - Various minor changes. 2008-11-05: - Added IsVista(), IsElevated(), and Elevate() methods to vsShellClass. Renamed "GetError" methods to "GetFileOpError". - Updated class templates. - Created vsVistaExtensionsClass with IsVista() and IsElevated() methods. - Application GUID creation was using 15 possible characters instead of 16. Fixed. 2008-11-04: - Separate installers for Clarion 6 and Clarion 7, with appropriate folder hierarchy used. - Note: Clarion 7 template registration still not working; manually register VSABCTPL.TPL and VSABCCLS.TPL after installation. 2008-11-03: - Switched to using SetupBuilder for installations. - 3rdParty folder used for all installed files except contents of LIBSRC. 2008-10-31: - Added three "GetError" methods to Shell class, which return a verbose description of the last error from a ShellFileOp Exec operation. - Added vsListBoxFormatMgr class. - Updated templates to work with Clarion 7. Note: The installer has not yet been updated to work with the Clarion 7 directory structure. 2008-09-22: - Updated ClassDeclare template with options for declaring, instantiating, init, and kill code. (Brad Kunkel) - Updated DEVMODE structure type (Brad Kunkel) 2008-09-11: - Added ShellExec() method to vsShellClass. 2008-08-28: - Added global extension template: "Browse: No error if reget fails on invisible browse in UpdateViewRecord (Global)". Used to resolve cases where unnecessary errorcode 35 messages are display (eg. when inserting a record, the user may not care that the currently highlighted record was deleted by someone else). - Enhanced the "FormGlobalFieldNameOnTip" template. - Modified ThreadLimit template and class. - Added option to "LookupEntryCompletionOnAllFields WithLookup" template to allow for a message to be displayed to the user if no records exist in the dictionary table. - Revised the key sending class so that NUM LOCK and CAP LOCK states are set/restored more efficiently. 2008-04-05: - Added code to auto-disable child templates when owner points to incorrect parent. This would occur when procedures are imported from another application that has the same global template added with a different instance. - Removing the PRIVATE attribute from ABRESIZE.INC class is no longer necessary for the use of the MiscWindowSetMinWidthAndMinHeighttoDefaultWindowSize template. - Various minor changes. 2008-03-17: - Fixed bug in vsStringClass.HtmlToAscii (had declared CSTRING(1) rather than STRING(1)!). 2008-03-10: - Restored "GetThreadCount" method to vsThreadClass. vsThreadClass.Records is also still available. 2008-03-07: - Created vsHDOExplorerClass, used to explore and extract data from HTML files. 2008-03-06: - Simplified Thread Management class. - Expanded String class. - Rollup various minor changes and fixes. 2008-02-19: - Added "Simple Process/Progress" class. 2008-02-18: - Added "Draw Header" extension templates (both normal and class-based). 2008-02-15: - Added Code template to generate templatized code for every field in a table. Example: Where "ThisFile" has two fields, both with initial values in the dictionary, entering [File].[FieldID]=[FieldInitial] would result in ThisFile.ColumnName1=XXX:Value1 ThisFile.ColumnName2=XXX:Value2 2008-02-13: - Added option to "derive procedure-level class from global object" for vsClipboardClass. 2008-02-07: - Fixed call to %SVExpresionEditor. 2008-01-30: - Created vsDiskFileIODriverClass. - Rewrote vsDiskFileIOClass to use vsDiskFileIODriverClass, added FileToString and StringToFile methods. 2008-01-28: - Changed name of vsSysShellOpClass to vsShellClass, added .Shell and .ShellEx methods to support calling ShellExecute. - Standardized naming convention to use vTYPE_, and vEQ_ prefixes. Applied to sections as other changes are made. 2008-01-27: - Fixed keyboard send class; SHIFT+HOME through SHIFT+END combinations were sending SHIFT+NUM7, etc. - Class objects now use a named instance rather than the "default" instance. It may be necessary to re-enter class object names when recompiling pre-existing applications. Changes 12/29/2007: - Renamed calls to shget* win api in VSA_SHFI.*. - Various minor changes. Changes 07/03/2006 - Fixed resource leakage in tray icon class. - Various minor changes. Changes 02/19/2005 **IMPORTANT** - Code entered into derived embeds were duplicated between global templates. A change to the storage system was required to fix this. If you used any templates that are based around classes I highly recommend that BEFORE COMPILING you make a complete backup, including generated source files. Use this to compare the new code after compilation to verify that no settings have been lost. Changes 10/31/2005 - Clarion 6.2 compatible and various minor fixes. - Added GetFilename method to vsStringClass. Changes 06/07/2005 - RunOneInstance template can now use a variable as the application name. Changes 05/27/2005 - Added "Worker Thread Manager" class and template. - Fixed "unknown variable %vsuParam" error. - Added "If" option to class method templates. Previously available options were "Assigns", "Returns" and "None". Changes 05/03/2005 - Added "GetWindowsFolder" method to disk class. - Incorporated changes to disk classes from Kevin Erskine. Changes 04/06/2005 - Added "GetControlPosition" to WindowsClass - Fixed issue where ",,THREAD" was generated for threaded class declarations. - Browse "Copy Button" template no longer requires name of ABC browse object. Changes 03/21/2005 - Expanded vsEventEnumeratorClass. - Improved vsDebugOutputClass. - Enhanced template wrapper for vsEventEnumeratorClass to allow custom events to be added through the template. - Enhanced "Export ABC Free Classes" template to include switches for new class categories. - Added vsMouseCaptureClass. - Object-wrapper templates now provide generation options to override normal export and external declaration behaviour. - STR.HexToLong now strips "H" off the end of the passed string before converting it to a number. Previously 0800H would be interpreted as 08000. - Fixed a typo that was preventing classes from being automatically exported as needed from a DLL. - Modified the following class-based templates to use standard object-wrappers: "vsSysShFileOpClass", **IMPORTANT NOTE** The name for the objects involved may not default to their previous value, so any hand-coded references will need to be changed. For example, if you called FileOp.GetValue() you would need to now call vsSysShFileOpClass:G28.GetValue() _or_ change the object name "vsSysShFileOpClass:G28" back to "FileOp". The compiler will find every case that needs to be changed. In Multi-DLL projects you may need to add the template to the base DLL now. Changes 03/09/2005 - Added vsDebugOutputClass and template wrapper apiDebugOutputClass. Used to direct debug output to the standard Windows api; see DbgView at www.sysinternals.com for a utility to capture this output. - Added vsEventEnumeratorClass and template wrapper MiscEventEnumeratorClass. Used to get the description of standard event, and to detect duplicate EVENT:xxxx equates. - Added DbgEvent.app example. Changes 02/25/2005 - Modified the following class-based templates to use standard object-wrappers: "System-wide Hot Keys", "Handle Shutdown Requests", "Key Sender", "ThreadLimit", "Lookup Auto-complete an entry field", and "Registry". **IMPORTANT NOTE** The name for the objects involved may not default to their previous value, so any hand-coded references will need to be changed. For example, if you called Registry.GetValue() you would need to now call vsRegistryClass:G28.GetValue() _or_ change the object name "vsRegistryClass:G28" back to "Registry". The compiler will find every case that needs to be changed. - Enhanced vsKeySenderClass. - Added "Form: One to one relationship linking" template. - Shutdown class now posts EVENT:SH:DeviceChange when WM_DEVICECHANGE received. - Added FormEntryFieldClipboardSupport template. This procedure-level template implements the class that provides a context menu for entry fields, emulating the standard Copy/Cut/Paste menu. Changes 02/05/2005 - Added option to "Prevent MDI errors" template to force compile error if window has MDI attribute. Useful when importing windows from an MDI application into a non-MDI application. - Improved vsWindowsClass and PressKeysClass. - Added vsKeySenderClass which uses both vsWindowsClass and PressKeysClass to simplify simulating key presses in external applications. - "Thread" attribute on global classes now added when "Threaded" checked on class declaration template. - Rebuilt object wrapper templates for all classes. - Changed vsButtonIconClass (VSA_BTN.INC) category to prevent inclusion with other classes in DLL. Changes 01/24/2005 - Enhanced: Generated modules (eg. VSA_ENUM.CLW) can now be named by the developer rather than being hard-coded. This helps eliminate compile errors where the IDE has decided that the module does not need regeneration because it was already generated by another application, even though the generated source code may not contain the correct results as determined by template selections. Changes 01/19/2005 - Enhanced: "PrintButton" template can now call procedures with parameters. Changes 01/18/2005 - Enhanced "WinResizeEnhancement" template; now resizing strategies for controls can be selected as control ranges or as marked lists attached to a specific strategy. Changes 01/14/2005 - MiscWindowSetMinWidthAndHeighttoDefaultWindowSize template changed to optionally set Resizer.PreviousWin sizes to "as designed" window sizes and issue Resizer.Resize() when window opened. Improves results when windows are opened maximized or otherwise resized at open. Changes 12/29/2004 - WinResizeEnhancement template now defaults ending control to starting control. Changes 12/13/2004 - Added "Form Split" class and template. Changes 12/01/2004 - Changed prototype of vsThreadClass.Kill to PROCEDURE(STRING pProc,SHORT pIsActive) Changes 10/08/2004 - Fixed: Both parameters and prototypes are required in map declaration for TrayHandler procedure(s). Changes 10/04/2004 - Fixed: Thread manager class would allow second browse to be opened on second try. Changes 09/13/2004 - NT Service template: Service will now always close after the "Kill Event" unless ServiceRunning=1 is entered in the embed point after WaitForSingleObject succeeds. Changes 09/09/2004 - Fixed issue in NT Service templates, added option to use OutputDebugString. Changes 09/02/2004 - Set default for 8/26/04 workaround to %False since Hotfix 9028 resolves the issue. Changes 08/26/2004 - Added workaround in One Application Instance template for GPF caused by returning before DctInit (C6.1 only). Changes 08/24/2004 - Removed comment from export in VSA_TPLX.TPW (thanks to Steve Lewis for finding this). - Enhanced logout process in VSA_PROX.TPW (thanks to Trevor Cocks for the suggestions). Changes 08/03/2004 - Remove restore and hide logic from tray class. In C6.1 this was causing the window to still show up in the Alt+tab program list even though it wasn't on the toolbar. Changes 07/27/2004 - Removed unnecessary STATIC attributes in VSA_SHFI.INC to eliminate compiler warning in C6.1 Changes 06/22/2004 - Changed 'Misc: Save Window Position When Moved' template so that 'DoResize' embed point is used in C6.1 and up. Changes 05/25/2004 - Added "vs" prefix to registry class equates. For example HKEY_LOCAL_MACHINE is now vsHKEY_LOCAL_MACHINE. Changes 05/23/2004 - Added template (winResizeEnhance) to allow specification of range of controls to be resized using the ABC resizing class. Changes 05/22/2004 - Changed "save browse format" template to use INIMgr.TryFetch() - Changed registry class to no longer use SVAPI.INC. Changes 05/03/2004 - Beta release of class wrapper template chain, VSABCCLS.TPL. Changes 04/14/2004 - Added sample application for date and time class. - "Functions: Values" template now uses class for all non-calendar functions. Changes 04/13/2004 - Section of BrowseCallvsSimpleStringFilterFunction was missing after re-organization. - Added fix provided by Alvin at Surework to TPTerminateEXE function. Changes 03/30/2004 - Added vsStatusClass, a class to support synchronized FIFO communication of status messages between threads (without use of EVENT:Notify). - Removed confusing C5.5 class modification examples from installation package. Changes 03/29/2004 - Added vsSystemUtilClass, supporting extension template ValuesSystemInformation, and sample application (examples/ABCFree/SysInfo/SysInfo.app) - Added code template to call functions in vsSystemUtilClass. - Added sample application showing DLL usage of SyncMDI and ThreadMgr classes. (examples/ABCFree/MultiDLL/ files.app and main.app). - Added .IsServer() method to registry class. Changes 03/28/2004 - Moved initialization and close down to Construct/ Destruct methods in SyncMDI and ThreadMgr classes. - SyncMDI and ThreadMgr now properly support DLLs. - Tidied up a few more IDE interfaces. Changes 03/24/2004 - Added PostEvent method to thread manager class. Example: vsThreadMgr.PostEvent(EVENT:Refresh,'BROWSE*') will post the EVENT:Refresh to all procedures that begin with the word "BROWSE". Changes 03/22/2004 - Templates are now sorted into separate source files based on original file name and template type, then sorted alphabetically within each source file. - Identifying header now shows source file name in IDE. Changes 03/21/2004 - Added option for conditional generation to all templates. Changes 03/18/2004 - Global thread limit template with synchronization support re-implemented as a class. Note: Replace any hand-coded use of ThreadQ with vsThreadMgr.Q. - Added ,THREAD attribute to class queue in apiMouseWheelHandler. - Added header to each template so that it is identified in the IDE. - Added comments throughout generated code so that the template creating it is identified. - Installation program will remember target location and inclusions between versions. Changes 03/02/2004 - Ensure that if HotKey class .Kill is called before .Init, 0{PROP:WndProc} is not set to 0. - Added SELF.ICS.Kill to Sync MDI class to prevent program from staying in memory due to handles not being cleaned up. - Added PRESSKEY(272) following PRESSKEY(ShiftEnter) in the EnterCompletesField class. Changes 01/13/2004 - Modified BrowseSaveFormats template to save formats after sort headers are cleared. Thanks to Viggo Kleven for finding this bug! Changes 01/30/2004 - Global Enter=Tab template: Added workaround for C6 Gold PRESSKEY(ShiftEnter) ("sticky shift key") bug. Changes 01/19/2004 - Changed Browse: Append SysID to sort orders (Global) template so that each element of the primary key is appended to the order separately. - Added Browse: Append SysID to sort orders (Local) template Changes 01/15/2004 - SysShutdownClass now tests to see if it was initialized before the Kill method executes. Fixes a problem where the window is not opened before calling SSC.Kill. Changes 01/12/2004 - Added Browse: Append SysID to sort orders (Global) template to ensure that all browse sort orders have unique column list. Solves a "random line appears or doesn't appear" problem where SQL backends are used. - 12/24/03 changes (VSA_MISC.TPW) were not included in the distribution package. Fixed. Changes 01/07/2004 - Added option to "AutoLookupClass" class and template to allow comparison to custom button text. In the old version, button must have had "..." to qualify for auto-press, but now the text can be set by the developer. Changes 12/29/2003 - Changed references to the legacy "%DeclarationSection" embed point to "%DataSection" - Fixed a bug in vsDOSFileSearch procedure where the last 256 bytes of a files were not searched. Changes 12/24/2003 - Added options to 'Misc: Synchronize MDI window openings' template to include sync code in Frame procedure and to exclude the Splash procedure. Changes 12/23/2003 - Added global template: "Report: Set report target parameters using procedure data". Changes 12/20/2003 - Fixed duplicate inclusion of BASIC driver due to error in prototype in VSA_BTN.INC. - Changed priority on RequireFieldClass.AddField statements to 8054 and on EntryAutoComplete.Init statements to 8052 to compenstate for a moved legacy embed point in ThisWindow.Init. - Renamed GWL_WndProc to vs_GWL_WndProc in VSA_TRAY.TPW. - Ensured that all INCLUDE() statements in VS*.CLW have the ,ONCE attribute. Changes 12/15/2003 - Incorporated Serhat Satir's AllowCut modification to the vsClipboardClass class and related template. Changes 12/11/2003 - Moved "Synchronize MDI opening" code to a class and separate template. Ensures that only one MDI window is in the process of opening at a particular point in time, and releases lock in ThisWindow.Kill if ThisWindow.Init is prematurely exited. Changes 12/07/2003 - Added global template to allow export of ABC compliant classes with category. Example: !ABCIncludeFile(MyCategory) Changes 12/05/2003 - Added check for DLL target in Global Thread Limit template. Changes 11/27/2003 - Added "Class: Export ABC Free Classes" global template. Required because "Class Category" change caused classes to no longer be exported. - vsButtonClass now automatically links in the required Basic driver. - Replaced two equates in VSA_SHDN.INC with INCLUDE('SVAPI.INC'),ONCE. Changes 11/20/2003 - Replaced several equates in VSA_REG.INC with INCLUDE('SVAPI.INC') AND INCLUDE('WINERR.INC'). Changes 11/18/2003 - Added R. Paresi's Application Notes template. Changes 11/17/2003 - Added "Class category" to all VSA*.INC - Updated "Exclude classes" template to allow exclusion/inclusion by class category. - Updated "Exclude classes in DLLs" to use current list of ABC classes when "Exclude all non-ABC/SoftVelocity classes" is checked. Changes 11/13/2003 - Added embed points to BrowseInvertCheckOnLeftClick template. - Reworked MiscEntryFieldClipboardSupport and related vsClipboardClass to allow customization of popup and translation. - Recompiled RPTConv and ClipSort utilities using C6 Gold. Changes 11/9/2003 - Added ICriticalSection logic to "ThreadLimitGlobal" template. - Added AttachThreadToClarion calls to "NT Service" template. This provides support for C5.5 and Clarion 5 application migration, but it is recommended that the new Capesoft commercial template be used instead. (www.capesoft.com) Changes 6/9/2003 - First release specifically for Clarion 6. - Workaround for module level data issue in tray class. Version 2.43 - c5.5 and earlier - Added M. Veenstra's LoadSubKeyQ method to the registry class - Added "substring" and "optional upper" options to the BrowseFilterFieldRange ('Browse: Filter based on field range') template. Version 2.42 - Added "Simple Filter" support; user presses CTRL+SHIFT+F and can enter text to search the current list for (string fields only). - vsSimpleStringFilter procedure - Template to add call to procedure to all browses - Fixed bug in "SendKeys" logic: The EXTENDEDKEY attribute was being applied to all characters, and on some systems this caused applications to randomly open (dependent on the keyboard driver that was installed). - Added support for "Popup" selection when multiple reports could be called using the PrintButton template. - Added "Copy/Cut/Paste/Undo" popup menu for normal entry fields (template and class). - Added "Prevent MDI Errors" template. Version 2.41 - FormWizardButtons.TakeNewSelection class: If called when FormWizardButtons.CurTabNum=0 will set CurTabNum to whichever tab is currently selected. This allows you to SELECT(a tab) then call .TakeNewSelection to handle normally tab-change processing. - Added Wildcard and Soundex support to fAddToFilter function. - Fixed "Find Next" button on 'Browse: Call vsFind Function' (BrowseCallvsFindFunction) extension template. This fix requires either a re-import of vsa_find.txa (with the fix), or simply add the new parameter to your existing vsFind() procedure. - Minor bug fixes; incorporates changes from S. Rothkin. (marked by SRFIX in VSA_FORM.TPW and VSA_GRP.TPW). Version 2.4 - Added template, class, and application source code for Application Button Icon Manager. (see CWBTNICN.APP in the examples folder). This set allows you to replace icons within an application either during development or at run-time. I use this to provide a different set of icons if the user's display is set to 256 colours or less. Version 2.37 - Changed SELF.Request to Request in Move Up/Down template. - Added "Set time format at run-time" template. - Enhanced "Build Number" template. Version 2.36 - Default installation location is now C5.5. Note: Some utilities still require C5 runtimes. - Enhanced "ProcessLogout" template to handle most common situations; custom select files to include. - Added DebugView support to NT Service template. - Improved XP support within PressKey template. Version 2.35c - Added template to set PROP:WheelScroll (C5505 and up). - ColourTab.Init now called after resizing initialized. - Fixed "system tray" class so that when the main frame is maximized and the use clicks on the "restore" button in the upper right-hand corner, a normal "restore" action is taken. (C5507) Version 2.35b - Fixed "Assign variables when record updated" template. Version 2.35a - Added C55 version of Report Converter - Fixed typo in Save/Restore Control Formats template. Version 2.35 - Added "Incremental Locator" timeout/clear template. Version 2.34b - CTRL+F template now works correctly when key allows duplicates - Added embed point to CTRL+F template before EVALUATE() to allow for variable setting Version 2.34a - Fixed conflict between Entry Locators and CTRL+F template Version 2.34 - Added template to add CTRL+F (Find) support to all browses in a procedure or application. - Added drag and drop re-ordering support to Move Up/Down template. - No longer supporting Catalyst Sockettools classes. Version 2.33 - Added workaround in OneAppInstance template to compensate for bug in FileManager class in C5.5e. - Move Up/Down Sequenced Records template can now be populated more than once on the same form. - Modified View Button form template so that it would not conflict with the built-in ABC View button support. - Fixed API prototype in MCI template. Version 2.32 - SaveTab template now ignores sheets with the wizard attribute set. - Mousewheel class now includes semaphore to prevent conflict between two threads on a dual processor system. Version 2.31 - Reworked API error function to return more values, and use a TRN file. - Mousewheel template now includes option to disable at run-time, for example using a command line switch such as COMMAND('/NOMOUSEWHEEL') - Added template to allow user to save and go to next (or previous) record. Version 2.3 - Fixed "one application instance" template problem under Windows 2000. - Added "Browse - save tab selection between settings" template. - Changed variable names used in "functions" template that did not have prefixes, and names of API calls used in NT Service template. - "Shutdown Handler" template now posts CW events for power suspend and query events. - Changed entry completion template to use PrimeFields rather than PrimeRecord when seeking within a file for a match. - Added small template to insert a test for value before allowing access to VariView.