Welcome to the Release Candiate 3 Build 2715 It is Very Important to read this entire file. Please read it. It contains lots of new info, on new features! This file can also be viewed with NotePad and will install in the VO Root Directory ie \CAVO27\ This build will more than likely be the release build. Please test it throughly. Compiler: ========= - Fixed several memory leaks - Fixed a 'double memory free' problem that would trigger a 'Compiler memory Allocation Anomalies' dialog - Fixed a problem with expressions such as xValue += 1 and xValue -= 1 - Fixed a problem with global arrays that were filled with a negative value, like in: GLOBAL aValues := {1,-1} AS ARRAY GLOBAL aValues := {1.0,-1.0} AS ARRAY Also added compiler warning for complex initializers such as: GLOBAL aValues := {-1.0 * 2.0} AS ARRAY [179] - Fixed various other problems with negative constants [12483] - Fixed a problem with operations such as: Self:FloatIVar += -LocalVar and Self:FloatIVar -= -LocalVar [12508] - Fixed a problem with the optimizer and expression such as: x * 1, x / 1, x + 0, x - 0, x ^ 1, x ^ 0 - Fixed various problems with operations such as a := -b and a := b + -c - Fixed overflow errors and missing overflow errors for BYTES and WORDS - Fixed a problem with compiling code where the return value of a PCALL was passed as a parameter to another method/ function, such as in the next line: oRet := GetObjectByHandle(PCALL(gpfnSpltPaneAssocGet, SELF:Handle(), nPane - 1)) IDE: ==== - Touch all Entities did not refresh the Application Icon - Fixed a problem where the debug status was not shown properly in some situations - Added "D " text in debug Column for entities where Debug is switched off at the module level. - Fixed an alignment problem with Toolbar buttons - Fixed transparency issues with some of the buttons in the various editors - Pasting a module would not update the treeview properly. This has been fixed. - Fixed some other refresh problems in the IDE. - Switching projects will reread IDE settings and window positions from the Project File - The 'Setup Project' menu option is disabled when 'Save settings in project file' is unchecked. Debugger: ========= - Fixed several memory leaks Adam: ===== - Fixed a problem that caused a GPF during reindexing - Fixed a problem that would occur when recompiling the SDK libraries SCC: ==== - Fixed several memory leaks - Remove from SCC did not work. This has been fixed - Fixed several other issues Source code Editor: =================== - Fixed a GPF when closing the window collapsed entities GUI Classes Fixtext.prg Fixed bug in fixedtext:textvalue assign Changes for 2715 ------------------------------ std_dlg.prg Allow access/assign of default extension of StandardFileDialog ------------------------------ treeview.prg corrected datatype of parameter of Treeview:__CreateDragImageList ------------------------------ edit.prg Corrected spelling of SingleLineEdit:CreateFormattedString() ------------------------------ appwnd.prg SELF:QueryOnClose() was inneffective for this class - now fixed ------------------------------ dialog.prg New method DialogWindow:ExecModal() Allows programmer greater control over Windows message handling in dialog windows. Normally ExecModal() will cause program execution to pause when the window is shown and then continue once the window is closed. However the programmer can create a new class which inherits from DialogWindow implement his own method ExecModal(). As an example the programmer could use the following version which performs no action: METHOD ExecModal() CLASS DialogWindow RETURN NIL Now the program control comes back immediately after calling the Show() method. This is very useful for cases where your code wants to control the windows dispatcher loop with the function ApplicationExec(EXECWHILEEVENT): Method xyz() class xyz Local oPDlg as ProgressDialog // inherit from DialogWindow oPDlg := ProgressDialog{SELF, "Processing is going on!"} oPDlg:Count := oServer:Reccount oPDlg:Show() //ProgressDialog is modal, the user can do nothing during the processing other than what // your code permits. //In this example you can abort the loop. oServer:GoTop() do while oServer:Eof IF ! oPDlg:Step() //FALSE if abort button is pressed - there ApplicationExec is called also. exit endif //do something oServer:Skip() enddo oPDlg:EndDialog() 2714 Start here Adam ==== - When a new app is created, this app now gets a copy of the current default compiler options from the project. This is done to avoid problems where an app would not compile without errors after importing in another project with other default compiler options. - Adam would die without graceful error messages when the maximum appsize was reached. It will now show an error dialog telling what has happened (and still die...) -------------------------------------------------------------------------------- IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT -------------------------------------------------------------------------------- - We changed the way RIDS in the Repository are created: In the past a RID consisted of 12 bytes AID followed by 20 bytes Unique RID ID. We have changed this, because some of you were approaching the maximum app file size (128 Mb). The new layout of the RIDS is now: 8 bytes AID followed by 24 bytes Unique RID ID. This allows for larger App file sizes (2048 Mb) As a consequence of this the maximum # of apps in a project has been reduced from 4096 to 256. We hope nobody has projects that large (the IDE would be crawling anyway) This also solved enhancement request [156] - Exception errors are now also written to the file IDE-ERR.LOG. If you experience a GPF, please attach this file when reporting the error. Compiler: ========= - Fixed problem where logical expressions (xx .AND. yy , aa .OR. bb ) were NOT shortcutted in some situations [166] and [12507] Import AEF and New App Wizard ============================= - The show Readme dialog is not longer modal [12603] - The import process does NOT show a dialog anymore when trying to extract external files (such as PRGs, Resources etc), that are exactly ONE hour older or younger than existing files on disk, to avoid unnessary warnings because of time differences caused by Daylight Saving. The new behavior is that the existing file is NOT overwritten in these situations. IDE === - Fixed a GPF when dragging a module from one app to another - Listviews would be redrawn after changing Debug status of a Module/Entity. This is now suppressed. - Optimized some code to get even better performance when building the Listviews & Treeviews Debugger ======== - Fixed the problem that modifying the value from a variable did not work in the "View Locals" window [12451] - When setting a breakpoint on a non-code line or a line that is part of a Multiple- line statement, the debugger now breaks on the last line before that line that has actual debugging info. Editor ====== - Size of function/method prototypes in the popup menu is now limited to avoid the menu from overflowing the screen [12605] - Removed blank entries from the "Go back" menu option [12598] Automation Server code generator ================================ - Classnames that start with a number are now prefixed with 'VO' [12607] Window Editor ============= - Will now show confirmation when Ole Controls have been added/deleted to/from the palette [12554] Runtime ======= - Fixed several issues with regard to the macro compiler: x Constructs like the following could fail when the GC was triggered: Evaluate ("oMyObject:X := oMyObject:Y") [91] & [131] x cMac := &("{|a|-1}") would fail [12570] - Added symbol handling to the macro compiler. You can do this now: Evaluate("FieldGetSym(#LastName)") _DBFCDX RDD =========== - Fixed a problem with DbClearIndex [12595] - Fixed a problem where Tags would be sorted alphabetically [12594] - Speeded up OrderKeyCount in shared environments [85] System Library: =============== - The default error handler now adds a message to the error dialog when the Old runtime DLL (CAVORT20.DLL) is found in memory Win 32 API ========== - Fixed a prototype error for TabCtrl_AdjustRect [12614] GUI Classes =========== Added new module XP Theme Support Window Class ============ - Moved theme related entities to Theme module - Changes to support brush drawing - fixes for W Moore issues of 07/12/03 - keyup & space to trigger button press Control Class ============= - fixes for W Moore issues of 07/12/03 - keyup & space to trigger button press Window:Dispatch() - Fixed the call to DrawThemeParentBackground Brush Class - Correct support for hatched and pattern brushes - Allow change of brush type TextControl:Brush - Hatch/pattern brush support textControl:BackGround - treeview background fix DataWindow:BackGround: - improved background access/assign __FormFrame:Brush Fix problem with brush assignment to subdatawindow Bitmap:init() - DOC: second parameter is the load option see API LoadImage() - added third and fourth parameters - width and height Icon:init() - Second parameter added - is the load option see API LoadImage(). Defaults to LR_DEFAULTCOLOR - added third and fourth parameters - width and height New Class: HyperLink (Thanks Sven Ebert) - Inherits from FixedText. (No additional properties or methods) - Mouse cursor changes to a hand when it passes over the control - When the control is clicked on it will attempt to "open" the text of the control - See the WIn API ShellOpen for details on what "open" means. Essentially if the text is a URL then clicking the control will cause the default web browser to open and navigate to the URL. - If the text of the control contains the @ character then it will be automatically prefixed by "mailto:" (if it does not already exist) when the open is attempted - Example: oFont1 := Font{,8,"Microsoft Sans Serif"} oFont1:Underline := TRUE oHL1 := HyperLink{SELF,-1,point{190,25},dimension{0,0},"http://www.grafxsoft.com"} oHL1:font := oFont1 oHL1:size := dimension{150,20} oHL1:textcolor := color{COLORBLUE} oHL1:font:underline := TRUE oHL1:show() VO 2713 ======= IDE === - Stops registering the .AEF and .MEF extension to avoid frustration for users using the VOPP export explorer - Fixed various refresh problems [12593] - 'Save settings to project' on New Project dialog is now saved properly [12592] - Fixed a GPF when opening the editor on a class entity in class view [12588] - Pressing ^E will now open an EMPTY editor, even when an entity is selected in the listview Compiler ======== - Fixed a GPF that could occur after switching projects in the IDE - Fixed a memory leak that could occur after switching projects in the IDE - Fixed GPFs reported by Wolfgang Riedman and Rod da Silva. - Now Recompiled with C7 ! - Fixed problem with initialization to 0.0 of Float IVars in classes - Fixed various other errors Source code Editor ================== - Fixed a very difficult to locate memory leak ! - Some of the Edit menu options were disabled in this build. That has been fixed. - Context menu will not replace context menu of the scrollbar anymore [12597] Debugger ======== - Fixed a GPF in the debugger Runtime DLL =========== - Fixed a problem with Acopy [12582] - _GetPrevInst() always returns a NULL_PTR. This function is not supported by Win32, but the Runtime function is kept for backward compatibility [12573] - Researched problem that Beta tester has with the result from Integer(). Beta tester was convinced that Integer() uses SINGle precision internall. The result: Integer uses DOUBLE precision internally. The algoritm used is: If x > 0 return Floor(x) elseif x < 0 return Ceil(x) else // x = 0 return x I tested Floor with C++ and it has the same results [12571] - Fixed a problem with StringAlloc: It used to stop copying when a NULL byte was encountered. it now copies everything, including the NULL bytes.[12586] System Library ============== - Fixed overflow errors in _UnformatC, _UnformatN and _UnformatL - The Class WinDLLVersion has been moved from Windows 32 API Library [12581] Windows 32 API Library ====================== - The Class WinDLLVersion has been moved to System Library[12581] RDD CLasses =========== - Fixed a problem with DbServer:Eval() with regard to scoping. GUI Classes =========== Note: some if the changes relate to "flicker" issues: The developer must be aware that now a resize of a window not automatically refreshes the complete window, only the new seen window parts are added to the invalid window region and becomes repainted. If you need complete refreshing of the window after resizing, simply add a SELF:Repaint() in the Window:Resize() method. Also there is a new Owner Alignment sample - shows automatic control resizing and positioning when a window is resized. ------------------------------------------------ imagelst.prg Changed ImageList:init(). Doc Update: Third parameter to imagelist:init() is a bitmap or icon object to add to the imagelist. Fourth parameter is Set of bit flags that specify the type of image list to create. This parameter can be a combination of the following values, but it can include only one of the ILC_COLOR values. ILC_COLOR Use the default behavior if none of the other ILC_COLOR* flags is specified. Typically, the default is ILC_COLOR4, but for older display drivers, the default is ILC_COLORDDB. ILC_COLOR4 Use a 4-bit (16-color) device-independent bitmap (DIB) section as the bitmap for the image list. ILC_COLOR8 Use an 8-bit DIB section. The colors used for the color table are the same colors as the halftone palette. ILC_COLOR16 Use a 16-bit (32/64k-color) DIB section. ILC_COLOR24 Use a 24-bit DIB section. ILC_COLOR32 Use a 32-bit DIB section. ILC_COLORDDB Use a device-dependent bitmap. ILC_MASK Use a mask. The image list contains two bitmaps, one of which is a monochrome bitmap used as a mask. If this value is not included, the image list contains only one bitmap. ILC_MIRROR Version 6.00. Microsoft Windows can be mirrored to display languages such as Hebrew or Arabic that read right-to-left. If the image list is created on a mirrored version of Windows, then the images in the lists are mirrored, that is, they are flipped so they display from right to left. Use this flag on a mirrored version of Windows to instruct the image list not to automatically mirror images. ILC_PERITEMMIRROR Version 6.00. Specify this flag if ILC_MIRROR is used on an image list that contains a strip of images. ILC_MIRROR must be specified for this flag to have any effect. If you pass the fourth parameter you should include the ICL_MASK in the value. ------------------------------------------------ Window.prg Window:__AlignControls(), Window:__AddAlign CAVOWED.INF Additional owner alignment options: OA_HEIGHT OA_WIDTH OA_WIDTH_HEIGHT OA_X OA_X_HEIGHT OA_X_Y OA_Y OA_Y_WIDTH See OwnerAlignDemo AEF. Window:SetExStyle(dwSetStyle, lEnable). New method to set window extended styles Window:DrawBackground(hdc, oWindow). New method. Called on WM_ERASEBKGND. If you draw background for yourself return TRUE otherwise FALSE The oWindow object is normally identical with SELF except SELF is a DataWindow. In this case oWindow can be the oSurface (__FormDialogWindow) object. In a DataWindow you should draw background ony if oWindow == oSurface, otherwise it is superfluous. ------------------------------------------------ __formdw.prg __FormDialogWindow:DrawBackground() see Window:DrawBackground() ------------------------------------------------ menu.prg Menu:PreInit(), Menu:PostInit() stubs. ------------------------------------------------ Robert has moved VObject to the System Library, added cargo ------------------------------------------------ Button.prg ButtonImageList:Init() change to pass correct flags due to imagelist changes Button:Image assign ------------------------------------------------ tabctrl.prg TabControl:__FocusPage() Correct Z order after page change, keyboard handling, positioning ------------------------------------------------ dispatch.prg Window:dispatch() Handles WM_CTLCOLORSTATIC for controls with transparent style WM_ERASEBKGND now calls SELF:DrawBackground() ------------------------------------------------ fixtext.prg FixedText:__SetColors() Because the Fixedtext handles painting of background and textcolor for itself, avoid the call of TextControl:__SetColors() in the new method FixedText:__SetColors() only if SELF:lUseDrawText is true ------------------------------------------------ txtcntrl.prg TextControl:__SetColors() automatically handles transparency if transparency of the control is set and the control has no background brush and no textcolor ------------------------------------------------ wcfunc.prg SetClassStyle(hWnd AS PTR, dwSetStyle AS DWORD, lEnable := TRUE AS LOGIC) calls SetWindowLong using GCL_STYLE ------------------------------------------------ splitwnd.prg __SplitView:Create - flicker removal ------------------------------------------------ shellwnd.prg __WCRegisterShellWindow. Set background to avoid current white background - XP toolbar has transparency and background can be seen ------------------------------------------------ __formfr.prg Fix to __FormFrame:ChangeFormSize(), Init() ------------------------------------------------ __docapp.prg __WCRegisterDocAppWindow. Set background to avoid current white background - XP toolbar has transparency and background can be seen ------------------------------------------------ databrow.prg DataBrowser:__AutoResize() - correction of bug 109 Internet Classes ================ cEmail.prg, cftp.prg, chhtp.prg, cimap.prg, cmailabs.prg cmessage.prg, cnews.prg, cnntp.prg, cpop.prg, csession.prg, csmtp.prg, csocket.prg, defines.prg, funcs.prg, rc.prg The basis of these classes is the original VO SDK, substantially modified by Uwe Holz. This library is a cut-down version to support FTP and Email Classes only - most of the HTTP classes and IMAP classes work fine. Whilst the original code worked perfectly out of the box, it nevertheless was quite limited in its functionality. This is not a criticism as the sample code and apps were provided merely as a start point to developing your own classes. The main improvements sought for our classes was to provide support for multi-part and mixed emails. The original example classes cannot accommodate this as sub-boundary conditions are required in addition to he main one. Secondly, the original classes received, decoded and saved out the various components of the email during the receiving phase. This is a problem if there is a communications failure part way through. To compensate, our class receives the entire email and stores it unencoded. The email can then be decoded at will or retransmitted without modification. This also provides for better virus and spam control. The new classes also provide a mechanism to scan just the headers of the emails without downloading the bodies. This can give rise to further spam and virus prevention measures and also reduce download costs. Next, the SMTP server was given an authentication mode to enable it to offer separate login user name and password. SMTP servers will require EHLO authentication instead of HELO. Lastly, some of the decoding functions have been modified to work with strings instead of files. These functions have been extended with the usual xxxEx() nomenclature. SDK === The SDK AEF files are now created during the Repo Build process, to make sure they have absolutely the same options that were used during the Repo build process changes & fixes in 2712 ----------------------- Compiler ======== - The ProcName/ProcLine switch now only sets ProcLine. ProcName is on by default but can be switched on/off with the ~"PROCNAME+" or ~"PROCNAME-" pragmas - Fixed a memory problem that could cause a GPF in the compiler - _sizeof() was returning a LONGINT. It now returns a DWORD (because size can never be negative) - The compiler now checks to see if a structure is a NULL_PTR before it accesses structure members. - The compiler now checks to see if an object is a NULL_OBJECT before directly accessing ivars or calling methods on strong typed objects For example in a situation like this: CLASS MyObject EXPORT lValue as LONG FUNCTION Start local oObj as MyObject . . ? oObj:lValue The compiler will now check to see if oObj <> NULL_OBJECT and will generate a runtime error when it is indeed a NULL_OBJECT. The error generated is EG_NULLVAR and can not be defaulted. Runtime ======= - The ClassChecking code generated by the compiler routine could generate a GPF in the runtime if the object involved was not a valid VO Object === IDE === Settings ======== - The project Settings dialog has now a better place (in the File Menu). [12572] Debugger ======== - Fixed a problem at program shutdown that could cause a GPF in the debugger [12548] Editor: ======= - If a method declaration line was split over more than one line the method-lookup combobox would not be displayed. This has been fixed. New App Wizard ============== - Fixed a problem with appwiz files pointing to the old \CAVO20 folder [12461] - Fixed a problem with the appwiz dialog on Windows 98 systems [183] Ole Automation Code generator & Ole Control code generator ========================================================== - Code generation for the IUnknown and IDispatch methods is now suppressed (QUeryInterface, Release, Invoke etc) - Fixed a bug where Interfaces without Progid would get the progid from another Interface in the same typelibrary [EdR] - Fixed a bug in the Code generation for OLE Controls that could occur when containing objects of type OleAutoObject were generated [12554] & [Oskar] - Changed tab and new line generation in generated source code to satisfy beta testers desires [12554] Window Editor ============= - Suppressed extra page feed when printing the window editors contents [12556] - Fixed a problem with the resource generation for the ES_NUMBER style for edit controls [12557] - Updated the credits screen Menu Editor =========== - Fixed problem where toolbar local was generated after all buttons on a menu had been removed - Removed the (unused) properties Gapsize and Seperator size in the Menu Property Container - Added Call to Self:PreInit() and Self:PostInit() - Fixed a probem with the code generated for USe Bands [80] - Fixed a problem when the ribbon name was changed from empty to or back [81] - Changed tab and new line generation in generated source code to satisfy beta testers desires [Geoff & Patrick] DbServer Editor =============== - Fixed a problem when importing field names > 10 characters from a table that was opened using the ADSADT Driver [12471] - fixed a problem in the [macros] section with the macro for the FieldSpec generation. Jasmine support =============== - Jasmine classes removed from system repository to the samples - Jasmine editor not in CAVO27.CFG by default anymore GUI Classes =========== - Fix bug 185: Display of TabControl Tooltips Window.PRG - Bug: in a number of places a single number (not one of the predefined) passed to Color{}, intention being it is the colorref. Changed those places: ListView:BackgroundColor, AppWindow:dispatch, RichEdit:textColor - CheckBox access/assign image (related to earlier change for buttom images) - Icon:Size access - Fixed: FixedText wrapping - Fix Bug 98. ListviewItemDrag fixed. (wcstruct.prg, ddserver.prg) - Fix "Bug" 12525. Owner draw support for controls/status bar: Control.prg, dispatch.prg, statsbar.prg, appwindow.prg - Moved VOObject to System Library - Window:ControlNotify performance improvements - tool Custom draw support change to AddBand method so that it uses 3rd parameter iPos to determine where to insert the band - Added Clipboard:FileCount - how many files dropped - Added Clipboard:RetrieveFiles(lMustExist) retrieve array of filenames - if lMustExist is true the file must actually exist to appear in the array. - Icon:init change to use LoadImage, avoiding the LoadIcon size restriction that icons conform to SM_CXICON/SM_CYICON system metric values. - Windows:Dispatch Fix for animation control start/stop - ImageList:imageCount - return number of images in list - change to ImageList:AddMask - AddMask(oBitmap, oMaskColor) - allows mask color to be specified - change to ImageList:init - allow imagelist without a mask if appropriate wColor specified - New method Edit:CreateFormattedString() - this is called instead of direct assignment of __FormattedString, allowing overriding and use of something other than __FormattedString. - FixedText control: The changes that have been made to FixedText give the flexibility of using the DrawText options. Included in this is the ability to set the FixedText style to Transparent in the Window Editor - in VO 2.6 and before this was not effective, in 2712 it is - without the need for the modified window procedure. If you really need the old style fixed text 2712 will have a instance variable called lUseDrawText which defaults to TRUE but can be set to FALSE for the old behaviour. If XP themes are enabled and you want to stop the drawing of the theme background behind the fixed text then set the instance variable lDrawThemeBackground to FALSE RDD Classes =========== - Fixed a problem with SetOrder method [167] - Fixed a problem with OrderInfo method [12444] Internet Classes ================ - Fix Bug 119: Change to cSession:Open to use proxy if already assigned. cSession.prg System Library ============== - Fixed a problem with SetOrder function [167] - Moved VOObject from GUI Classes to System Library - Added oCargo as Object to the VOObject Class - Fixed a problem in the __UnformatD function [12543] & [12555] Win32 ===== - Added support structure and defines for OsVersionInfoEx - EnableMenuItem() changed to return a LONG This changes the return value of Menu:DisableItem(), Menu:EnableItem() - they now return a LONG indicating the previous state of the item. If the menu item does not exist, the return value is -1. changes & fixes in 2711 ----------------------- IDE General ============== x Fixed a refresh problem in the Error browser x When saving an entity in the editor the listview part of the RepoBrowser was redrawn a couple of time and the entity that was selected in the listview got deselected. The Listview now restores the selection to the entity with the same relative position in the list. If you are adding/deleting entities this may be a different entity, but otherwise the selection should stay on the same entity in the listview.[12524] x The linker dialog is now also visible when linking from the editors Compiler ======== x The compiler would corrupt literal strings like "Test\%Hello" during the process of replacing macros such as %cavodir%. It would strip the first part of the string including the % character. This has been fixed.[138] x Starting the compiler in the source code editor could lock the editor when a tokentip, parametertip of method listbox was visible. Linker ====== x Fixed a bug that could GPF the linker when corrupted resource were being added to the EXE Debugger ======== x Double clicking a binary Menu entity would open the menu definition in the editor[39]. This has been fixed. The new behaviour now is: - Double clicking a debuggable source entity opens it in the debugger - Double clicking other entities (binary but also resources and external function declarations) will open the editor associated with the entity. Sourcecode Editor ================= x Create EXE button was enabled when editing a Library. has been fixed [12522] Window Editor ============= x Removing the FillUsing() for listboxes and Comboboxes would fail if the listbox was filled with a literal array. This has been fixed [70] Menu Editor: =========== x Editing a menu entity could cause a GPF in the IDE. This has been fixed. [12537] GUI Classes =========== x Changed the __WCToolBarUpdate structure to get rid of 'member needs a kid' warning and asjusted the Toolbar code to work with the new structure [12475] x Fix bug 185: Display of TabControl Tooltips Window.PRG x Bug: in a number of places a single number (not one of the predefined) passed to Color{}, intention being it is the colorref. Changed those places: ListView:BackgroundColor, AppWindow:dispatch, RichEdit:textColor x CheckBox access/assign image (related to earlier change for buttom images) x Icon:Size access x Fixed: FixedText wrapping x Fix Bug 98. ListviewItemDrag fixed. (wcstruct.prg, ddserver.prg) x Fix "Bug" 12525. Owner draw support for controls/status bar: Control.prg, dispatch.prg, statsbar.prg, appwindow.prg x Fix Bug 119: Change to cSession:Open to use proxy if already assigned. cSession.prg RDD Classes =========== x Fixed a problem with DbServer:Count() [12479] and [12535] x DbServer:OrderBottomScope assign would return FALSE in stead of the scope value [84] x DbServer:OrderTopScope assign would return FALSE in stead of the scope value [84] x Assigning a NULL_STRING to a MemoField could cause a lock failer for two updates on the same record in Optimistic mode [130] DBFNTX RDD ========== x Order names were Case sensitive in 2.6. This has been restored to case insentitive just like in VO 2.5 and before[12477] x Fixed a problem with seeking and scopes [84]: - Set TopScope to 'CA' and seek 'CA' now succeeds - Set TopScope to 'CA' and seek 'CAM' now succeeds. x Would return an OrderKeyCount == RecCount when no index was open [12518] Now returns 0. DBFCDX.RDD ========== x Fixed a ansi-oem conversion problem that could occur with SetAnsi(TRUE) [2] x Fixed a problem with SetRelation. Caused by same SetAnsi settings as before [180] x Fixed a problem that immediately after creating an index the OrderInfo(DBOI_NAME) or OrderInfo(DBOI_FULLPATH) would return incorrect results.[59] x Would return an OrderKeyCount == RecCount when no index was open [12518] Now returns 0. Runtime ======= x Fixed a Round Error [15] x Fixed a bug in Ntrim() for Scientific notation [12511], in combination with insufficient Digits for float values. [12511] With SetDigits(10 (The default) the values will now display as: 9999999.1 9.999999e+06 99999999.1 1.000000e+08 999999999.1 1.000000e+09 9999999999.1 1.000000e+10 x Fixed problem that would occur after you had set the memory size using the DynSize() function[63]: The Dynshrink function would then release memory until the number of pages that were speficied in DynSize() was reached, even when these pages were in USE An example: For example you set DynSize(5). Now your app uses 10 pages. If the DynShrink gets called (and it is called internally in the runtime) it would shrink the memory to 5 pages, even though you were already were using 10 pages! x The Classname function now returns 'InvalidVoObject' for non-VO Objects (COM Interface wrappers) x The AsString() function used to display the name of the last object when called on a Null_object. This has been fixed. Now it does NOT display a name x The asstring() method could GPF when called on a Non-Vo Object. It now displays 'InvalidVoObject' x Added stricter object checking: The following code would GPF in previous builds and previous versions but will generate a decent error message now: local o as Object o := Object(_CAST, 1) ? o:Test() o:SomeIVar := 1234 ? o:SomeIvar Also corrupted objects are detected. The following code corrupt an object and the runtime would generate a GPF. Now it detects that the object is corrupt and will not display its classname and will generate a DATATYPE error when calling the Throw() message, because it detects that the object has been corrupted. local e as Error e := Error{} ? ClassName(e) MemSet(Ptr(_CAST, e), 0,8) ? CLassName(e) e:Throw() x Added the IsVoObject() function to the runtime that checks if the given object is a valid VO Object It will check the object for the following: - Is it not a NULL_OBJECT - Can the header be read/written - Can the data be read/written - Can the Classpointer be read - Can the ClassInfo be read - Is the size of the object >= size defined in the ClassInfo It does NOT check : - if the object is located in the current dynamic memory pool - if all the dynamic properties of the object are valid x Added the IsVoString() function that checks if a given string is a valid VO string. It will check the string for the following: - Is it not a NULL_STRING - Can the header be read/written - Can the data be read/written Changes in build 2710: ====================== IDE === - Adam will no longer disable the warning 51422 when initializing the repository - Some of the Setup/Editor-Settings (for example Tabstops) were not saved properly - Changed the caption of the Shellwindow to - CA-Visual Objects - Speeded up Repobrowser Listview redraw - Fixed various problems when renaming the current project. - The project properties dialog now has an option to specify if you want to "store settings in project file". When checked the IDE will read the system settings from the VOPRJ file. When unchecked it will only read settings from the CAVO27.CFG file. - Some subsystems were bypassing the project file to read their settings. This has been changed. - Added TemplateDirectory to System Options dialog. This is written to the entry Templatepath in the [Directories] section of Cavo27.CFG and the VOPRJ files. The DbServer Editor, FieldSpec Editor and Window Editor now use this directory to locate the template files. There is no Project Settings dialogs right now (will probably come in next build) but this feature will allow you to have project specific templates DbServer Editor: ================ - Reads template from Template Directory - The code generation for Server:FieldDesc and Server:IndexList was partially hardcoded. That is now also template driven. We have added a [MACROS] section to CAVODED.TPL that has currently 3 entries: - FieldDesc - Index - Order Each entry has a template for that particular piece of code. Something that you may not be aware of in relation to the DbServer Editor: You can add as many sections to CAVODED.TPL as you like. Each section will generate its own entity. You can use all the macro strings that are used everywhere else in the CAVODED.TPL. FieldSpec Editor: ================ - Reads template from Template Directory Window Editor: ================ - Reads templates from Template Directory - FieldSpec properties were removed for Dialog Windows. That has been changed. It is now also possible to assign fieldspecs for Controls on dialog windows Compiler: ========= - Fixed a bug with Peephole Optimization involving byte sized or word sized members - Fixed a bug with determining the size of structure members - Fixed "GetExpDescriptor failed" message for Register variables (_BP, _CS, _DS, _ES, _SS) in debug version of the compiler - The behavior for strings with embedded ampersands has changed. See example below Function Start MEMVAR WORLD WORLD := "Robert" ? "Hello &World" // 2.6 will display Hello Robert // 2.7 will display Hello &World // To get the 'old' behavior you need to call the StrEvaluate() function. ? StrEvaluate("Hello &World") // All versions of VO display "Hello Robert" wait - A bug with compiling textblocks has been fixed. - When initializing the repository Adam would disable the check for warning W51422 (converting numericals x <-> y). This has been disabled. CAVOLBOX.DLL ============ - Fixed a problem that could cause a GPF in the debugger Runtime ======= - Fixed a problem with the Crypt() function - Fixed problem with conditional indexes where the Index conditions had an embedded ampersand. - MemCopyString would not pad the memory block with spaces, but NULLS when the source string was shorter than the memory region. This has been fixed - Asort() would not accept objects with an eval method. This has been fixed - ASort() would only work correctly with strings of unequal length if SetExact() was TRUE. Now it turns SetExact(TRUE) on internally when needed. - Str(123.45,4) would return "****" in VO 2.6. Restored old (2.5) behavior which returns "123." - Fixed an out-of memory error that could occur during repeated floating point calculations in a loop with no other operations that triggered dynamic memory allocation. - "Dynamic Memory Low" erorr messages would try to allocate dynamic memory for the errorbox This could cause recursion in the Error Handler, resulting in a GPF in kernel32.DLL. - Fixed a stack corruption error in OleFrame::OleFrame() Ole Runtime: ============ - Fixed a Dynamic Memory corruption problem in the Ole Runtime where the GC was called in the event handling code. - Fixed a stack corruption error in OleFrame::OleFrame() _DBFCDX ======= - Fixed a problem that was introduced in the first release of 2709 All VO Code =================== - Changes to remove 51422 warnings System Library ============== - Fixed a problem with the missing Default Error Handler that was introduced in 2709. - Fixed a problem with the OrdCondSet() function - Fixed a problem in SetInternational that could cause the default value for SetDecimal() to be incorrect - Fixed various 51422 warnings System Classes ============== - strong typed some internal methods in DataServer and FieldSpec RDD Classes =========== - Fixed a problem with DbServer:GetLookupTable() - DbServer:Commit() could fail for Float values because of differences in non-significant decimals. The relevant code in DbServer:__RLockVerify() has been changed to only check for the significant decimal positions - DbServer:OrderInfo() did not use the 4th parameter. This has been fixed. - DbServer:Rlock() would fail when no recordnumber was passed to it. This has been fixed. - DbServer:Total() would produce an empty result file when a For or While condition was set without a Scope. SQL Classes =========== - Fixed a problem with SqlSelect:Delete() where the last column is a Long Column - Fixed a problem with SqlSelect:AppendRow() where the last column is a Long Column - Fixed a problem with SqlConnection:Connect() where the DataSourcename or the UserId or the Password is exactly ONE character ! - Fixed a problem with SqlSelect:FieldPut() for Decimal & Numeric Columns GUI Classes =========== Button ------ Under XP Visual Styles the image on a button needs to be provided in an imagelist. The button class will now automatically convert an image into an imagelist under XP visual styles. Button ACCESS/ASSIGN image - changed to internally use an imagelist under XP visual styles Button ACCESS/ASSIGN imagelist - used when run under XP visual styles New class: ButtonImageList, inherits from ImageList. ButtonImageList:Init (oImage) oImage == Icon/Bitmap object only one image in ButtonImageList ButtonImageList:image return the image from the imagelist ---------------------------------------- FixedText New method: SetDrawStyle(dwStyle,lEnable) see API DrawText() for dwStyle values ---------------------------------------- Bug 103: Doc Change If you don't want to define your own resource you need to pass "IDD_DEFDLG" for a child dialog or "IDD_DEFDLG2" for a popup dialog. e.g. o := DialogWindow{oS,"IDD_DEFDLG",TRUE} or o := DialogWindow{oS,"IDD_DEFDLG2",TRUE} It is likely that you will also want to set the size and the origin. ---------------------------------------- Fix to __SplitView:SetPaneClient() only call set style if parameter is a window ---------------------------------------- Listbox/Combobox Text typed into a combobox edit did not update textvalue or value properties. Fixed. Bug 12457: Also corrected problem from 2708 where querying textvalue after window was destroyed returned a NULL_STRING. Corrected behaviour when text typed into combox box to match the docs: "When text is directly entered, ComboBox:CurrentItemNo is set to 0 and the new text is stored in ComboBox:TextValue and ComboBox:Value." Allow assignment of NIL to listbox value - reset Textvalue to NULL_STRING, CurrentItemNo to 0 and CurrentItem to NULL_STRING. Related bug 112 and response: There appears to be a bug in the ComboBox Value property. It will never return to NIL once it has had a value. For example if you have a dropdownlist combobox on a form and select an item from it Value changes to reflect that choice. However, if you then set the CurrentItemNo to 0 using code the Value property still reads the same as before, rather than reverting to NIL. It appears that the Clear, FillUsing and maybe other methods do not refresh the Value property either. When CurrentItemNo is zero it is still possible to have a combobox textvalue and value. c.f. Combobox Class in the help: "When text is directly entered, ComboBox:CurrentItemNo is set to 0 and the new text is stored in ComboBox:TextValue and ComboBox:Value." However it is now possible to assign a value of NIL to listbox. This resets Textvalue to NULL_STRING, CurrentItemNo to 0 and CurrentItem to NULL_STRING. Clear and FillUsing now reset value to NIL. Note: ACCESS TextVaue CLASS CheckBox removed, now handled by super. ---------------------------------------- 30 Sep 2003 ---------------------------------------- Fix Bug 12478: CAVOWED.INF. Inclusion of Day State in Month Calendar styles. ---------------------------------------- Fix Bug 12476: Diagnosis of problem (mousemove behaviour) not 100% but bug found in BoundingBox:PointInside() ---------------------------------------- Fix: HelpDisplay:Show() Parameter of HelpContents did not show the contents page correctly. Fixed for HLP and CHM. There is a new value for Show() first parameters: HelpSearch (applicable to HTMLHelp only) executes HH_DISPLAY_SEARCH, i.e. selects the Search tab in the help navigation pane. There is a new second parameter to Show() (applicable to HTMLHelp only). symLookupType controls the lookup type: HH_KEYWORD_LOOKUP or HH_ALINK_LOOKUP. Keyword lookup is the default. ALink is used to call up Associative links in the helpfile. Associative Links are not displayed in the index, keywords are. New instance var: DefaultPageOnContents. (applicable to HTMLHelp only) LOGIC. Determines whether the default page should be shown when HelpContents is requested. Defaults to TRUE. If FALSE, HelpContents will display the Contents tab but leave the current topic displayed. ---------------------------------------- DOC Change: HelpDisplay:Show() HelpIndex ----------- The VO help says this: HelpIndex: Displays the Contents topic as defined in the application help file which is incorrect. It should say it brings up the Index page. HelpOnHelp ----------- This only exists for old HLP - it calls up WinHelp.HLP. There is no equivalent for CHM. ---------------------------------------- New: Clipboard:InsertRTF(cRTF) insert RTF string into the clipboard ClipBoard:RetrieveRTF(dwLen) get RTF string from the clipboard Help Files ------------- New help file (Work in Progress) constructed with Help & Manual Known Issues already fixed in 2711 (GUI Classes) -Fixed Text does not wrap -Use of an icon on a button will give an error -an image on a checkbox does not show Changes in 2709 =============== SDK --- x Renamed some files to avoid file name conflicts when all the PRGs are copied to the same folder x Removed some unused defines and string table resources from System Classes x Added define WM_VOAPP (WM_APP + 0x1000) to Windows API This define can be used by VO users to avoid conflicts with windows messages used in the VO runtime classes x There are LOTS of changes in the runtime code. They are listed below. New DLL names ============= x VO27RUN.DLL replaces CAVORT20.DLL x VO27NAT.DLL replaces CAVONT20.DLL x VO27ORUN.DLL replaces CAVOOLE.DLL Note: ------ This may also influence C Dlls/RDDs that you have created before. We will upload a new VO27RUN.LIB and VO27NAT.LIB to the Beta FTP site, so you can relink your C DLLs. Please make sure you use these. Please don't use the old CAVORT20.LIB and CAVONT20.LIB anymore ! Do NOT cheat and copy CAVORT20.DLL in the directory and keep using this one. You will have two copies of the Workarea system and two copies of the memory manager running at the same time, and we are pretty sure you will get all kind of unexpected results ! Changes in the runtime ====================== x the RDD_VERSION has been incremented to 2700 for this build.This will/should break olrder RDDs x While expression for VoDbLocate() was not registerkid properly x Default Memory settings are no longer read from registry. You will have to use the Set..() functions that we have listed below. We are still open for suggestions if you think that one of the defaults is too large or too small. x Default RDD, HPLocking, NewIndexOffSet are not read from registry anymore. You need to use the existing built-in functions (RddSetDefault(), IndexHPLock() and NewIndexLock()) to enable them in your application x STOD() function now accepts string and not a PSZ x FERASE() function now accepts string and not a PSZ RDDs ==== - DBFCDX, _DBFCDX, DBFMEMO, DBFBLOB are now all recompiled in C71. - All RDDs now use the new Vo27RUN.DLL and VO27NAT.DLL SDK === - The SDK code now links to the new VO27RUN.DLL, VO27ORUN.DLL and VO27NAT.DLL GUI Classes =========== - During the migration of OLE code from OLE to GUI some of the code got lost. This has been corrected in 2709. Adam ==== x Added support for %templatedir% and %projectdir% system variables x Fixed a problem with trhe Class Dependancy file for the System Library during System Building x Caches system variables (such as %cavodir% and %aefdir%) during the build process to increase compilation speed IDE === x The compiler runs now in the foreground in stead of a background process. This should increase the speed of the compiler. The progress info from the compiler is now also shown on a progress dialog. Please let us know what you think of this. x Fixed the error message on the Project Selection dialog after reindexing a project with no project open. x fixed an icon problem with the Window Editor Known problems ============== x There may be incorrect compiler warnings when using structures or typed pointers when you have type inferencing enabled New runtime functions to set MAX values ======================================= FUNCTION SetMaxDynSize( dwBytes as DWORD) as DWORD Description: Allows you to set the MaxDynSpace for the main thread Parameters : dwBytes New MaxDynSpace setting in Bytes Returns : Existing size of MaxDynSpace in Bytes Note : For safety you can only increase the amount of memory You should set this in the beginning of your app The default value is is 0x1000000. FUNCTION SetMaxThreadDynSize( dwBytes as DWORD) as DWORD Description: Allows you to set the MaxDynSpace for the new threads Parameters : dwBytes New MaxDynSpace setting in Bytes Returns : Existing size of MaxDynSpace in Bytes Note : For safety you can only set the value for NEW threads. Existing threads will not be influenced by this value. You should set this in the beginning of your app The default value is 0x1000000 FUNCTION SetKidStackSize(dwBytes as DWORD) as DWORD Description: Allows you to set the KidStackSize Parameters : dwBytes New KidStackSize setting in Bytes Returns : Existing size of KidStackSize in Bytes Note : For safety you can only increase the size of the stack You should set this in the beginning of your app The default value is 0x2000 FUNCTION SetMaxRegisteredKids( dwCount as DWORD) as DWORD Description: Allows you to set the Maximum # of registered kids Parameters : dwCount New Maximum Returns : Existing maximum Note : For safety you can only increase the maximum You should set this in the beginning of your app The default value is 10000 FUNCTION SetMaxRegisteredAxitMethods( dwBytes as DWORD) as DWORD Description: Allows you to set MaxRegisteredAxitMethods Parameters : dwCount New MaxRegisteredAxitMethods setting . If this is not a multiple of 32 it is rounded up to the nearest multiple of 32. Returns : Existing size of MaxRegisteredAxitMethods Note : For safety you can only increase the maximum You should set this in the beginning of your app The default value is 16000 FUNCTION SetWipeDynSpace( lWipe as LOGIC) as LOGIC Description: Allows you to set value for WipeDynSpace Parameters : lWipe: True sets wiping on, False sets it off. Returns : Existing value of WipeDynSpace Note : This will work from the next time GC gets activated. Changes for 2709: PP 12 Sep 2003 Notes: ======= x GUI Classes - strong typing of internal methods, new features/changes as below x OLE - Because of the strong typing above ASSIGN __Value in OLEOBJ.PRG has also been changed. x System Library - Errorsys.prg changed, removed SetInternational call from ErrorSys to own _INIT1 x Win API - misc changes for new features Advanced Edit Control Features (XP) Service Manager ListView Sample TrayIcon Sample AppCommand (Enhanced device) Sample World Time ############# Version Info ############# --------- x New class WinDLLVersion. Get version info from DLLs containing DllGetVersion function. The DLL must contain a function called DllGetVersion which fills in a _WINDLLVERSIONINFO structure. This convention for determining DLL version is followed by Windows DLLs such as Shell32.DLL. Init(cDLLName) Properties DLL String MajorVersion AS DWORD MinorVersion AS DWORD Build AS DWORD PlatformId AS DWORD values DLLVER_PLATFORM_NT for Windows NT family, DLLVER_PLATFORM_WINDOWS for Win9x --------- x FUNCTION GetDLLMajorVersion(cDLL AS STRING) AS DWORD. Return the major version number of a DLL. The DLL must contain a function called DllGetVersion which fills in a _WINDLLVERSIONINFO structure. This convention for determining DLL version is followed by Windows DLLs such as Shell32.DLL. --------- x FUNCTION GetShellMajorVersion() AS DWORD. Returns the major version number of the Windows Shell, SHELL32.DLL. --------- x New structure _winDLLVERSIONINFO. A number of Windows DLLs follow a convention where version information is returned by calling a function called DllGetVersion (e.g. Shell32.DLL). This structure holds the version information provided by DllGetVersion. ############# XP Visual Themes ############# --------------- Fixed tab page background to follow XP theme --------------- Changed textcontrol background for better support of XP and transparent brush ---------------- Fixed display of toolbar tooltips under XP --------------- FUNCTION EnableAppVisualTheme(lEnable := TRUE AS LOGIC) AS LOGIC PASCAL Enable/Disable application support for visual themes (XP). This is automatically enabled if version 6 of the common controls is loaded (by use of application manifest). --------------- FUNCTION IsThemeEnabled() AS LOGIC PASCAL Are Visual Themes (XP) enabled? --------------- Control:DisableTheme() turn off visual themes for this control --------------- METHOD EnableThemeDialogTexture(dwStyle) CLASS Window Enables or disables the visual style of a dialog window's background. ETDT_ENABLE Enables dialog window background texturing. The texturing is defined by a visual style. ETDT_ENABLETAB Enables dialog window background texturing. The texture is the Tab control texture defined by the visual style. This flag is equivalent to (ETDT_ENABLE | ETDT_USETABTEXTURE). ETDT_DISABLE Disables background texturing. ETDT_USETABTEXTURE Uses the Tab control texture for the background texture of a dialog window. ############# Tray Icon ############# --------- x _WINNOTIFYICONDATA structure modified to include members introduced with the newer version of the Windows Shell in Win2000/XP. New union _WINNOTIFYICONTIMEOUTVERSION. --------- x New function SizeOfNotifyIconData. Returns the size of the NotifyIconData to be used based on the version of the Windows Shell in use. --------------- x New Window:ModifyTrayIcon() same parameters, return value as Window:AddTrayIcon(). ---------------- x Note: Window:AddTrayIcon(), Window:ModifyTrayIcon() tooltips support line breaks by using CRLF on Shell 5 and above. On older versions of the Shell these methods automatically replaced the CRLF with a space. ---------------- x New METHOD ShowBalloonTrayTip(oTrayIcon,dwID,sHeading,sToolTip,dwTimeOut,dwInfo) CLASS Window. See NOTIFYICONDATA Structure in MSDN for details. oTrayIcon = icon object used in the tray dwId = identifier for this tray icon sHeading String containing a title for a balloon ToolTip. This title appears in boldface above the text. It can have a maximum of 63 characters sToolTip Text of tooltip Shell 5 and above, 128 char. Below Shell 5, 64 char. dwTimeOut The timeout value, in milliseconds, for a balloon ToolTip. The system enforces minimum and maximum timeout values. dwTimeout values that are too large are set to the maximum value and values that are too small default to the minimum value. dwInfo Version 5.0 of Shell and above. Flags that can be set to add an icon to a balloon ToolTip. It is placed to the left of the title. NIIF_ERROR An error icon. NIIF_INFO An information icon. NIIF_NONE No icon. NIIF_WARNING A warning icon. NIIF_ICON_MASK Version 6.0. Reserved. NIIF_NOSOUND Shell Version 6.0. Do not play the associated sound. ---------------- Callback methods triggered when a balloon event occurs: METHOD TrayIconBalloonShown(dwID) CLASS Window METHOD TrayIconBalloonTimeOut(dwID) CLASS Window METHOD TrayIconBalloonClicked(dwID) CLASS Window dwId is the identifier of the tray icon (see AddTrayIcon) ############# Controls ############# ---------------- x ACCESS EditHandle CLASS ComboBox Return the handle (ptr) of the edit portion of a combobox ---------------- x SingeLineEdit, MultiLineEdit, CombBox methods: METHOD ShowEditBalloonTip(cTitle,cText,dwIcon), METHOD RemoveEditBalloonTip() A balloon tip can be displayed pointing to an edit control. Edit balloon tips are only available under Windows XP or later. The tip always points to the current cursor position within the control, and is dismissed by either clicking on it, by moving focus to a control other than the control the tip is assigned to, or by typing into the text box. Showing the tip automatically sets focus to the control at the last cursor position. A form can not show more than one tip at a time, and if the tip is repeatedly shown, the previous tip is destroyed first. Tips never get focus, and there is no message sent when the tip is dismissed. If the tip is displayed up to the system timeout value for tool tips, it automatically disappears leaving focus on the control. cTitle Title displayed in the tip cText Text displayed in the tip dwIcon TTI_ERROR Use the error icon. TTI_INFO Use the information icon. TTI_NONE Use no icon. TTI_WARNING Use the warning icon. ---------------- x A Cue banner is text displayed in an edit control usually indicating the purpose of the control or prompting for the type of input. Available on XP. When control gets focus or has text in it the cue no longer displays. SingleLineEdit, ComboBox METHOD SetCueBanner(cText) cText: The cue text to display in the control ---------------- x FUNCTION ShellAutoComplete(hWnd AS PTR, dwFlags AS DWORD) AS LOGIC hWnd handle to the edit control dwFlags [in] Flags to control the operation of SHAutoComplete. The first four flags are used to override the Microsoft Internet Explorer registry settings. The user can change these settings manually by launching the Internet Options property sheet from the Tools menu and clicking the Advanced tab. SHACF_AUTOAPPEND_FORCE_OFF Ignore the registry default and force the autoappend feature off. This flag must be used in combination with one or more of the SHACF_FILESYS* or SHACF_URL* flags. SHACF_AUTOAPPEND_FORCE_ON Ignore the registry value and force the autoappend feature on. The completed string will be displayed in the edit box with the added characters highlighted. This flag must be used in combination with one or more of the SHACF_FILESYS* or SHACF_URL* flags. SHACF_AUTOSUGGEST_FORCE_OFF Ignore the registry default and force the autosuggest feature off. This flag must be used in combination with one or more of the SHACF_FILESYS* or SHACF_URL* flags. SHACF_AUTOSUGGEST_FORCE_ON Ignore the registry value and force the autosuggest feature on. A selection of possible completed strings will be displayed as a drop-down list, below the edit box. This flag must be used in combination with one or more of the SHACF_FILESYS* or SHACF_URL* flags. SHACF_DEFAULT The default setting, equivalent to SHACF_FILESYSTEM | SHACF_URLALL. SHACF_DEFAULT cannot be combined with any other flags. SHACF_FILESYSTEM Include the file system. SHACF_URLALL Include the URLs in the users History and Recently Used lists. Equivalent to SHACF_URLHISTORY | SHACF_URLMRU. SHACF_URLHISTORY Include the URLs in the user's History list. SHACF_URLMRU Include the URLs in the user's Recently Used list. SHACF_USETAB Allow the user to select from the autosuggest list by pressing the TAB key. If this flag is not set, pressing the TAB key will shift focus to the next control and close the autosuggest list. If SHACF_USETAB is set, pressing the TAB key will select the first item in the list. Pressing TAB again will select the next item in the list, and so on. When the user reaches the end of the list, the next TAB key press will cycle the focus back to the edit control. This flag must be used in combination with one or more of the SHACF_FILESYS* or SHACF_URL* flags. Minimum DLL Version shlwapi.dll version 5.0 or later Minimum operating systems Windows 2000, Windows NT 4.0 with Internet Explorer 5, Windows 98, Windows 95 with Internet Explorer 5 Need to include OLE library or call CoInitialize(NULL) for AutoComplete. CoInitialize needs a call to CoUninit later. ---------------- x SingleLineEdit, ComboxBox METHOD EnableAutoComplete(dwFlags) See function ShellAutoComplete() ############# Enhanced device support ############# ---------------- x Window:AppCommand(oAppCmdEvt) Callback. Called when application command received from enhanced keyboard/mouse or other device. Receives an AppCommandEvent. Return TRUE if command is processed to stop further windows processing. Receives an AppCommandEvent. ---------------- CLASS AppCommandEvent INHERIT Event ACCESS Command CLASS AppCommandEvent Possible Values: APPCOMMAND_BROWSER_BACKWARD APPCOMMAND_BROWSER_FORWARD APPCOMMAND_BROWSER_REFRESH APPCOMMAND_BROWSER_STOP APPCOMMAND_BROWSER_SEARCH APPCOMMAND_BROWSER_FAVORITES APPCOMMAND_BROWSER_HOME APPCOMMAND_VOLUME_MUTE APPCOMMAND_VOLUME_DOWN APPCOMMAND_VOLUME_UP APPCOMMAND_MEDIA_NEXTTRACK APPCOMMAND_MEDIA_PREVIOUSTRACK APPCOMMAND_MEDIA_STOP APPCOMMAND_MEDIA_PLAY_PAUSE APPCOMMAND_LAUNCH_MAIL APPCOMMAND_LAUNCH_MEDIA_SELECT APPCOMMAND_LAUNCH_APP1 APPCOMMAND_LAUNCH_APP2 APPCOMMAND_BASS_DOWN APPCOMMAND_BASS_BOOST APPCOMMAND_BASS_UP APPCOMMAND_TREBLE_DOWN APPCOMMAND_TREBLE_UP APPCOMMAND_MICROPHONE_VOLUME_MUTE APPCOMMAND_MICROPHONE_VOLUME_DOWN APPCOMMAND_MICROPHONE_VOLUME_UP APPCOMMAND_HELP APPCOMMAND_FIND APPCOMMAND_NEW APPCOMMAND_OPEN APPCOMMAND_CLOSE APPCOMMAND_SAVE APPCOMMAND_PRINT APPCOMMAND_UNDO APPCOMMAND_REDO APPCOMMAND_COPY APPCOMMAND_CUT APPCOMMAND_PASTE APPCOMMAND_REPLY_TO_MAIL APPCOMMAND_FORWARD_MAIL APPCOMMAND_SEND_MAIL APPCOMMAND_SPELL_CHECK APPCOMMAND_DICTATE_OR_COMMAND_CONTROL_TOGGLE APPCOMMAND_MIC_ON_OFF_TOGGLE APPCOMMAND_CORRECTION_LIST APPCOMMAND_MEDIA_CHANNEL_DOWN APPCOMMAND_MEDIA_CHANNEL_UP APPCOMMAND_MEDIA_FASTFORWARD APPCOMMAND_MEDIA_PAUSE APPCOMMAND_MEDIA_PLAY APPCOMMAND_MEDIA_RECORD APPCOMMAND_MEDIA_REWIND ACCESS IsControl CLASS AppCommandEvent Is control key down? ACCESS IsDeviceKey CLASS AppCommandEvent Is this device that issued this command a keybaord? ACCESS IsDeviceMouse CLASS AppCommandEvent Is this device that issued this command a mouse? ACCESS IsDeviceOEM CLASS AppCommandEvent Is this device that issued this command an OEM device? ACCESS IsLeftButton CLASS AppCommandEvent ACCESS IsMiddleButton CLASS AppCommandEvent ACCESS IsRightButton CLASS AppCommandEvent ACCESS IsShift CLASS AppCommandEvent Is shift key down? ACCESS oTarget CLASS AppCommandEvent The target of the command. For a command key it is the focussed control/window. For a mouse command it is the control/window under the mouse cursor. ---------------- x Five button mice have Left, Middle, Right, XButton1, XButton2. New properties for MouseEvent MouseEvent:IsXButton1 MouseEvent:IsXButton2 Callbacks triggered by the X buttons: MouseButtonDoubleClick MouseButtonDown MouseButtonUp New ButtonID values: ButtonX1, ButtonX2 ############# ListView ############# ---------------- Note: MS issue - GridLines do not always display correctly when using XP visual styles. ---------------- ListView:ViewAs(symView) New #TileView for XP tile view ---------------- ListView:SetColumnFormat(nCol,dwFlag,nImage) nCol = column index dwFlag = HDF_CENTER/HDF_LEFT/HDF_RIGHT, HDF_BITMAP/HDF_BITMAP_ON_RIGHT, HDF_SORTDOWN/HDF_SORTUP combine with _or() HDF_SORTDOWN/HDF_SORTUP up/down arrow in header - XP visual styles only nImage = the number of the image in the image list to display in the column header ---------------- ListView:SetSelectedColumn(nIndex) Show column as selected - XP visual styles required. nIndex - number of column to select ---------------- ListView:GetSelectedColumn() Get column that is selected - XP visual styles required. ---------------- ListView:SetBackgroundImage(uImage,dwFlags,xOffSet,yOffSet) Requires a call to CoInitialize() or the OLE library linked in. If CoInitialize() call CoUnitialize() later. uImage = object/ptr/string/nil. A BitMap object, an image handle or an URL/filename. NIL if want to remove background dwFlags = combination of the following: LVBKIF_SOURCE_HBITMAP, LVBKIF_SOURCE_URL, LVBKIF_SOURCE_NONE LVBKIF_STYLE_TILE, LVBKIF_STYLE_NORMAL If not specified dwFlags defaults - if uImage is object/ptr _or(LVBKIF_SOURCE_HBITMAP,LVBKIF_STYLE_TILE) if uImage is string _or(LVBKIF_SOURCE_URL,LVBKIF_STYLE_TILE)) xOffSet, yOffset control placement of image ############# ListView Grouping ############# Notes: Listview grouping requires XP visual styles. If visual styles not enabled/available these features have no effect. If group view is enabled only items belonging to groups are displayed. ---------------- ListView:AddGroup(iGroupId,cGroupName,dwAlign) Listview groups require XP visual styles iGroupId = number of group cGroupName = group name dwAlign = LVGA_HEADER_LEFT/LVGA_HEADER_RIGHT/LVGA_HEADER_CENTER ---------------- ListView:SetGroupName(iGroupId,cGroupName,dwAlign) Listview groups require XP visual styles iGroupId = number of group cGroupName = group name dwAlign = LVGA_HEADER_LEFT/LVGA_HEADER_RIGHT/LVGA_HEADER_CENTER ---------------- ListView:IsGroupViewEnabled Access, is group view enabled ---------------- ListView:RemoveAllGroups() remove all groups ---------------- ListView:RemoveGroup(iGroupId) remove the group with the identifier iGroupId ---------------- ListView:HasGroup(iGroupId) return LOGIC denoting existence of group iGroupId ---------------- ListView:SetItemGroupId(uLVI,nId) Put an listview item into a group uLVI = item index or ListViewItem nId = group id ---------------- ListView:EnableGroupView(lSetting) Enable/disable group view according to LOGIC lSetting ---------------- ListView:SetGroupTextColor(oColor) set the colour of the group headings oColor = color object. ---------------- ListView:GetGroupTextColor() returns a color object representing the colour of the group headings ############# System ############# ---------------- x GetSystemMessage(dwId as dword) AS STRING. Convert a system error code (i.e. GetLastError()) to a text message. ---------------- x FUNCTION GetFolderPath(nFolder AS INT,lCreate := FALSE AS LOGIC,hToken := NULL_PTR AS PTR,; dwFlags := SHGFP_TYPE_CURRENT AS DWORD) AS STRING Retrieves special system paths. Requires >= IE4 (Shell 4.71) nFolder = CSIDL_PERSONAL := 0x0005 // My Documents CSIDL_MYMUSIC := 0x000d // "My Music" folder CSIDL_APPDATA := 0x001A // Application Data, new for NT4 CSIDL_LOCAL_APPDATA := 0x001C // non roaming, user\Local Settings\Application Data CSIDL_INTERNET_CACHE := 0x0020 CSIDL_COOKIES := 0x0021 CSIDL_HISTORY := 0x0022 CSIDL_COMMON_APPDATA := 0x0023 // All Users\Application Data CSIDL_WINDOWS := 0x0024 // GetWindowsDirectory() CSIDL_SYSTEM := 0x0025 // GetSystemDirectory() CSIDL_PROGRAM_FILES := 0x0026 // C:\Program Files CSIDL_MYPICTURES := 0x0027 // My Pictures, new for Win2K CSIDL_PROGRAM_FILES_COMMON := 0x002b // C:\Program Files\Common CSIDL_COMMON_DOCUMENTS := 0x002e // All Users\Documents CSIDL_RESOURCES := 0x0038 // %windir%\Resources\, For theme and other windows resources. CSIDL_RESOURCES_LOCALIZED := 0x0039 // %windir%\Resources\, for theme and other windows specific resources. CSIDL_COMMON_ADMINTOOLS := 0x002f // All Users\Start Menu\Programs\Administrative Tools CSIDL_ADMINTOOLS := 0x0030 lCreate = LOGIC, TRUE to create nominated folder, FALSE to retrieve hToken, dwFlags only needed in special cases. See SHGetFolderPath API func. ############# Misc ############# Color:colorref assign set color using numeric color reference --------------- ACCESS SelectionRange CLASS RichEditProtectEvent A selection object representing the selection range in the rich edit --------------- ACCESS Selection CLASS RichEditSelectionEvent A selection object representing the selection range in the rich edit --------------- METHOD EnableAdvancedTypography(lEnable) CLASS RichEdit Advanced line breaking and line formatting --------------- METHOD SetTabStops(aTabStops) CLASS RichEdit The Tab array contains the tab-values. Each tab-value is a subarray with two values. The first one is the tab-position in cm, and the second is the tab-alignment defined by the constants RICHTAB_CENTER RICHTAB_DECIMAL RICHTAB_NORMAL RICHTAB_RIGHT --------------- METHOD GetTabStops() CLASS RichEdit returns array of tabstops see RichEdit:SetTabStops() --------------- ACCESS FilterIndex CLASS StandardFileDialog index of effective filter --------------- METHOD DialogCallBack(hWnd, uMsg, lParam, lpData) CLASS StandardFolderDialog New method, receives standard dialog callback parameters, see platform SDK for details --------------- Toolbar:Divider property logic, determines if a divider line is shown between the toolbar and the menu --------------- Window:SetBackgroundBrush(dwNew) dwNew defaults to COLOR_3DSHADOW Set the background brush used to paint the window. --------------- IPAddress:TextValue access changed to return string version of what is visible in the control rather than a string version of the internal number used to hold the IP address. --------------- IPAddress:TextValue assign added. Accepts an IP address string, e.g. oDCIPAddress1:textvalue := "192.168.0.1" ############# Other things Fixed ############# --------------- SplitWindow:SetPaneClient now removes WS_POPUP style from client and adds WS_CHILD. --------------- Menu:DeleteItem bug when menuid does not exist fixed --------------- Fixed datawindow resizing bug 109, 137 --------------- Fixed Boundingbox coordinates in: ACCESS ViewBoundingBox CLASS ListView METHOD GetItemBoundingBox(nItem) CLASS ListView METHOD GetItemBoundingBox(symItem, lTextOnly) CLASS TreeView --------------- Fix ListView:ColumnOrderArray assign. Had multiple memory problems. If one of the columns array passed does not match any of the current columns the assignment is not performed an empty array is returned. --------------- BugFix. Email from BF 021206. DataWindow:__Unlink() attempts to __unlink each control and passes oDS. Howver oDS will always be NIL. Removed reference to oDS. Changed Control:__Unlink to default to use the server it is linked to (SELF:oServer). --------------- BugFix. Email from BF 030130. Toolbar:DeleteItem. Symbol misspelled. --------------- Bug 29. Extra Enter left in keyboard after menu selection --------------- Bug 158 Assign menu changes window size Changed/Fixed in 2708: ====================== General: - VOPRJ files are now associated with VO in the windows explorer. Opening a VOPRJ file will open the project in VO IDE, unless it is already opened in another IDE. - The Project Listview has a new menu option 'Create Shortcut on Desktop'. This will create a shortcut to the selected VO project on the Windows Desktop (The User Desktop). Because VO now creates new registry entries for the file associations, exiting associations for the AEF and MEF files are overwritten. If you have associated AEF/MEF files with Pauls VO Export Explorer, You will have to manually re associate your AEF, and MEF. Compiler: ========= - Sometimes the message "Out of memory in ProcessGlobalEntity" was shown. This has been fixed. Preprocessor: ============ - A bug is fixed that could cause a GPF in the preprocessor Repository: =========== - When an AEF has an external file that needs to be extracted to a non-existing directory a question will be asked if the directory should be created. When no is answered, or the creation of the directory fails, the file is extracted to the current directory IDE: ===== - The New project dialog is now larger and centered on the screen - The Select directory buttons in the IDE now use the new style BrowseForFolder dialogs and also allow you to create a directory - File/Import dialogs are now resizable - File/Export dialogs are now resizable - The File/Export All progress dialog show project name of project being processed. - Ctrl-E would not open new entity in the editor anymore. Fixed - VOPRJ files are now associated with VO in the windows explorer. Opening a VOPRJ file will open the project in VO IDE, unless it is already opened in another IDE. - The Project Listview has a new menu option 'Create Shortcut on Desktop'. This will create a shortcut to the selected VO project on the Windows Desktop (The User Desktop). Window Editor: ============== - Double click on a tab page would not open the form. This has been fixed - An GPF in cavoatom could occur when saving a new form. This has been fixed - A couple situations with uninitialized strings were found and fixed Linker: ======= - Linux support has been disabled - The binary file headers that are attached to every EXE and DLL are now without version number and the names of the former developers have been removed Runtime: ======== - A bug in _DebOut32 (that would show double lines when run as an exe) has now been solved. - VODBOrdSetFocus could fail if the GC was activated from the RDD. This is now fixed. - VODBOrderInfo could fail if the GC was activated from the RDD. This is now fixed. - VODBSetOrderBlock could fail if the GC was activated from the RDD. This is now fixed. GUI Classes =========== - A Vo ChildAppWindow running in a foreign environment that received a window handle as parent (such as VO subsystems in the IDE or a VO DataWindow activeX running in another app) would generate a runtime error in the init method. This has been solved. GUI Classes & OLE ================= - There were several Ole related window methods (for AppWindow, DataWindow & ShellWindow) that were stored in the OLE Library. These methods have now all been moved to the GUI classes In those situations where they actually refer to classes in OLE (such as OleObject) or to functions in CavoOle.DLL checks have been built in to test for the existance of the classes or the existance of CavoOle.DLL. OLE === - OleAutoObject:Init() now also accepts another OleAutoObject as the first parameter. This means that in situations where you only know the type of an object at runtime you can still use the generated code. For example the Outlook Items collection may return different types of items, depending of the level in the folder hierarchy you are. The generated code looks like this: // To use a pre-defined class here, // change OLEAutoObject to desired class name uResult := if(uRetValue:pInterface!=NULL_PTR, OLEAutoObject{uRetValue}, NULL_OBJECT) Unfortunately you can't change this since you don't know the type at compile time. The new feature allows you to do the following: local oContact as OL_ContactItem local oItem as OleAutoobject . . oItem := oItems:Item(1) oContact := OL_ContactItem{oItem} . Of course the reference count on the item object is incremented because there are now two VO objects pointing to the same ContactItem object ! - There was an error in the OleAutoObject class that caused all dates to be returned as NIL. This has been fixed. - OleObject:CreateFromInsertDialog would fail with the VO 2.7 code. This has been fixed. Ole Server ========== - Type library generation was broken in 2707 - Dispinterfaces now have a leading underscore in stead of a trailing underscore to follow the Ms Standards - Exported Floats were mapped to singles (Real4). They now export as double (Real8) - Reindex from Project Dialog will yeild the message "Can not get the applications" This will be addressed in the next build 2709 Changes in 2707 Compiler: ---------- - Fixed bug that would show message 'Too many words in UDC' after changing projects Adam: ----- - When a UDC or CH file is written to a different location during import, the application properties are adjusted to reflect this. - Changed .APP extension to .VOA to avoid problems with System Restore on Windows XP and Windows ME. - Deleting a project will now also try to delete the project folder if it is empty. Menu Editor: ------------ - Accelerator for the Numeric Delete key (VK_DELETE) is not correctly generated - Fixed problem that the new Link button was not working. IDE: ---- - Adding or Opening projects now also selects the project - Some cosmetic changes with regards to the Listviews in the browsers. - The code that shows Readme textblocks after importing could hang the IDE when running in release mode. - Treeview Root in explorer window shows build number (during Beta) Ole Automation code generation ------------------------------ - Ole Code generation for OleAutoObjects and OleControls fixed - Code generator now uses the new 'Prefix' and 'remove underscore' features. This also helps to avoid name conflicts with built-in classes. - Ole Code generator now also includes the necessary libraries in the app (OLE for OleAutoObjects, Ole, GUI, System Classes for OleControls). Debugger: --------- - Tooltips in the debugger are now working again !!!! - Fixed a bug with Debug/Workareas Editor ------ - F12 key (Save) now works as before - Fixed problem when deleting rows with bookmarks on them - Fixed problem that the new Link button was not working. - Fixed problem that "Goto Linenumber" on the Goto dialog (^G) was not working properly. Runtime: -------- - OS Function now has an extra parameter. Without the parameter the functions returns "Windows 2000 ....." for W2K, WXP and Windows Server 2003. With the parameter (the type is unimportant) it returns the correct OS name, such as "Windows XP" or ""Windows 2003 Server" - The Instring() function and $ operator would sometimes return incorrect results. This has been fixed. - The MakeLong function (Windows 32 API, Module Windef) now returns a Long (as the name suggests) in stead of a DWORD Image Editor: ------------- - starts properly - fixed 2 memory leaks Known Issues: ------------- - There is a small memory leak when switching between projects because the compiler does NOT free some of its memory properly - Reindex from Project Dialog will yeild the message "Can not get the applications" This will be addressed in the next build 2708 Changes in 2706: Explorer windows ================ x Some menu commands would not work from the Explorer. This has been fixed. x When no window positions were saved the IDE would open with a treeview only x Changed the Clipboard Formats, to enable Copy/Paste between different concurrent IDEs x Added Autosize for All columns of the listview. PS: We will need to see if this works on all Win32 platforms and it this does not slow down things too much. Menu Editor ===================== x Added Linker button To the toolbar x Added 'Inherit From' property for the toolbar in the menu properties list and changed the Sourcecode generation to use this x Enabled Promoting/Demoting for menu separators x Fixed memory leak in CavoLBox.DLL Source code editor ================== x Added Linker button To the toolbar x Changed right mouse menu behavior in the Editor: Actually there were a couple of different right mouse menu options, depending on the context 1. Goto Menu a when on class name, it would show Class declaration and Init method b when on an access/assign/method it would jump directly to the access/method 2. Expand Prototype 3. None All of them now show Cut/Copy/Paste first, followed by a seperator and the optional list of Goto items. Also changed the editor to NOT drop the highligh for a selection when the right mouse menu is selected. In case nothing is selected VO will default to cut/copy the current line Also Change Windows popup menu key to show right mouse menu in the editor And Finally the F11 key has the same behavior as the Windows Popup Menu key. x Something that needs to be documented: When you issue a Goto.. from the right mouse menu, VO remembers the current entity. By clicking Shift-F11 you can skip back to that entity. You can also remember the current entity by pressing the Ctrl-F11 key x Ctrl-G will now show the Goto-Routines dialog. Added a Goto Line number button on this dialog x Added a "Edit All" button on the Find-Advanced dialog Note There is still a small memory leak in the editor. Debugger ======== x Fixed/Checked issues detected during Beta. Especially the GPF when running in the IDE. This was caused by the IDE not checking the Thread Id of the process to run. x NULL_OBJECTS and NULL_ARRAYS now displayed in the Debugger in stead of the {|00000|0x00000000} notation. Also NULL_PTR now displayed in stead of the 0x00000000 notation x fixed a problem in the View/Locals window where a usual that changed type was not properly displayed (It would display another local twice !) Project Selection Dialog ======================== x The Reindex button will now reindex the right project ! It also closes the current project before the reindex and reopens it afterwards x The Reindex and Delete buttons will check to see if a project is in use before continuing x Display the Username and Workstation name that have a project locked in the Listview Repository ========== x Recompiled without overflow checking Runtime ========== x Fixed a bug in the Runtime where Symbol2String() would GPF for a NULL_SYMBOL x Fixed a bug in the Nation module that prevented CAVONT20 to load Repobuilder =========== x Checks if it is not running twice Fixes in 2705: ============== - Bug in the runtime caused the Pizza sample to fail - Save/Restore desktop works again - Added Icons for Project Selection Dialog ===================== New features: 2704 ============= - New project Selection Dialog. ALso gives access to: x Delete/Remove Project from Catalog x Create/Add Project to catalog x Reindex Project - IDE opens with project selection Dialog - Changed Adam to start without open Project. In this new situation you MUST select a project using PrjSelect() before you can actually use Adam - Initializing the Compiler will only work when a project is loaded. (It caches commonly used entity IDs and Atoms). Therefore the call to CompInit has now been moved to the _PrjOpen() function - For the same readon CompExit() has been moved to _PrjClose() - Added function PrjOpen(LPSTR ProjectFileName) to Adam - Added function PrjClose() to Adam - Selecting a new project in the RepoBrowser now will result in a refresh of other open RepoBrowser windows as well. - Most of the subsystems have the memcpy, memmove, memset and memcmp functions now redirected to vomemcpy, vomemmove, vomemset and vomemcmp (in CavoStr.Dll). These functions perform a an additional memory check operation to check for the memory status. This is done in an attempt to find all locations where memory corruption is caused. This has severe performance consequences, but it helps us find a couple of spots where corruption occurred. The behavior can be switched ON by including the define VOMEMCHECK for the project. At this moment the behavior is activated for: CAVO27.EXE, CAVOACT.DLL, CAVOEDIT.DLL, CAVODED.DLL, CAVOERR.DLL, CAVOFED.DLL, CAVOIED.DLL, CAVOJED.DLL, CAVOLBOX.DLL, CAVOMED.DLL, CAVOSED.DLL, CAVOSSYS.DLL, CAVOWED.DLL - Changed all IDE subsystems to NOT use FindWindow anymore to locate their FrameWindow, but Look Up into the Window chain to find it. - Added EIDMGR_NOTIFY, PROJECT_CHANGED event to the IDE. Gets send after new project has been selected. Is used by explorer windows to refresh themselves. - Increased Max # of Search libs for one app from 32 to 48 - Increased Max Length of Application/Module names from 31 to 63 - Increased Max Length of project names from 31 to 63 - Debug version of Adam shows progress between Compilation Cycles during AppMake Appmake compiles in the following order: In Compilation Cycle 0: defines, Classes, structures, globals In Compilation Cycle 1: anything except methods, accesses, assigns From Compilation Cycle 2: anything, that is left - Adam will automatically create a backup of Cavo27.CFG (Called Cavo27.VO) if it can't find this file. When Cavo27.CFG is missing it will try to copy the contents of Cavo27.VO or display a fatal error message if that file is missing as well. - If you add the entry BuildIniFile=1 to the [Adam Options] section of the Cavo27.CFG it will add all entries to the CFG file that the program tries to read and can't find. Fixes: ====== - Fixed memory leak in the Repobrowser that would occur when an Application Filter was set - Fixed memory leak in the Editor - Fixed memory corruption caused by the Compiler - Fixed memory corruption in the Debugger - Fixed Overflow error in the Linker - Removed some unused Menu resources from the IDE - Removed some duplicate strings from string table in the IDE - Removed some duplicate code for MessageBoxes (ie: loading strings from stringtable) in the IDE by calling the VoMessageBox() function in stead - Moved calls to EIDMgrExit() and EIDMgrInit() to IDEPrjSelect, to make sure they are in balance - Debugger seems to work now, after the fixes mentioned above - Reindex program now works, and displays the correct version number - Incorporated the GUI changes from Paul. Known Problems: =============== - The Tooltips in the debugger are not working in this release. This causes memory corruption - Restoring the Desktop does not totally work as expected. Fixed in 2705 For a next build: ================= - Associate .VoPrj files with VO and open them on double click - Create Shortcuts to the Project files in the \Cavoxx\Projects folder and/or the desktop - Lock icons for locked projects in the Project Selection Dialog.// Added in 2705 Notes for the DOC/Help-team: ============================ - we need to add help for the Project Selection Dialog (and a HELPID for the IDE) - We need to add help for the Project Open Dialog (and a HELPID for the IDE) - Document new SDK functions PrjOpen(LPSTR ProjectFileName) PrjClose() Enhancements in this build. IDE. Like Visual Studio and most other Dev. products, VO now will run multiple copies of itself! The IDE has also been changed not to open ALL projects upon startup.(It's default behavior with 2.0,2.5, and 2.6) With version 2.703 VO will open the default project. (This will change in future versions.)You may now open multiple copies of VO with a different project in each. You may *NOT* open the default project,or any other project twice. To run more than one copy of VO for now. o Open VO with the default repo.(This is the default behavior for now) o Create a second project o Switch to Project 2 by highlighting vo's top level in the repo browser. o In the right panel of the repo browser you will find a list of your current projects. o Highlight the project that you want to open. (Project 2) o Right Click you mouse and select the open project. You can also use double click to open. o You are now running the first copy of VO with project 2 open. Start a new copy of VO, this will open with the default project. You now have second instance of VO running! Once again, you can not open two copies of the default repo, or any other project. You will receive an error saying that the project is in use by (username) We are still working on making this error happen for the default project, but if you try to open the default project twice you will get some ugly error. (This will obviously change in future builds) Take a look at File--setup options under the explorer tab. Something that most VO programmers have been asking for...Please report any problems with this, as we have had a few reports, but can not reproduce them. (If I only had a nickel for every time I've said, "it works on my machine") VO2704 has more debug information in it. We have had a number of issues with un-initialized string values. If you see any error messages, please report them with the steps to reproduce them. Report Bugs to Bugshunter@cavo.com All bugs reported should have small AEF attached to.(If possible,if not a small set of steps to reproduce the bug will be sufficient along with a bitmap of the error If your receiving this Beta, it's probably because you've reported a bug in the past. Please test your bug, and let us know 1. It is still a problem, or 2 the issue has been resolved. Known IDE Issues as of 06/20/2003 Fixed Bugs *Delete Entity Fails (Fixed in 2701) *Multi Delete Entity Fails(Fixed in 2701) *Menu Editor Fails (Fixed in 2701) *DbServer Fails to write code (Fixed 1n 2701) *Browse button in DbServer Fails to display code (Fixed in 2701) *Added Registry keys to installation for ADS Drivers *27 Help file added(.hlp) *String DLL updated to call help file correctly. *Compiler now takes settings from and ini file for building repo *VO DLL's have been renamed VO27*.dll *VO27 Help PDF Files added 05/05/2003 (That data works for both US and Euro *Cut and Paste in Editor Fails if more then one line of test (Fixed 05/09/2003) *Deleting Code in cavoed.dll by holding dVown the back key results in an error (Fixed 05/09/2003) *New Set of help files (05/15/03) *SDK AEF's now included in /SDK. *Note, this is the source that Repo is made from (Wow, what a concept !) *Click Event in Window Editor Fails (Ignoring the Error, results in completion of saving the code in that class. Fixed in 2702 *Associate Prg Fails if the prg is more then 3 line of code Fixed in 2702) DBG & VOM being created in /BIN when %ExecutableDir% (Fixed in 2702 Known Issues Open... Bugs to be fixed soon Windows 98 bugs. Specific OS bugs... 1.New Application (Application Gallery fails to launch) 2.Run time problem "The VO27sys.dll file is linked to a missing export cavoRT.dll) When running the standard app from the IDE. Spelling errors in this file Coming Very soon at cavo.com http://support.cavo.com An on-line bugs database and the ability to report bugs will be available at that URL. http://support.cavo.com Happy VO'ing Your GrafX Dev. Team Brian, Don, John, Paul, Robert