Make your own free website on


Introduction Downloads Applications News FAQ
Forum Subscribe Articles Links Other


 Key Objects Library     

 Key Objects Library     

XCL history archive

15-Jun-00 XCL 1.97
  • [*] XApplet: OleUsed property now is obsolete (but provided for compatibility, though does nothing). If You want to refuse from ole, use published last time system dcu's replacements.
  • [-] Fixed Move in system.pas/dcu replacement. Now three (tested) versions for lovers: Borland's, small and fast (the last is turned on, other two commented).
  • [-] Fixed SysSfIni.pas (call to SetExceptionHandler).
  • [*] Some other small changes in system.pas, sysinit.pas (see comments in source). Great thanks to Alexey Torgashin for useful suggestions.
  • [-] Launcher fixed creating of window in AutoHide mode (under Win2000, but it seems, not only).
10-Jun-00 XCL changes:

- [!] New part of XCL technology: system.dcu, sysinit.dcu and some other sysxxxxx.dcu (with sources) to replace Delphi standard ones and make all XCL projects even smaller (difference is 6-20K depending on project). Dcu's are provided for Delphi5 only, but with sources, and You can adjust it for earlier Delphi versions too. What is done there (briefly):

  • references to console input/output routines (AssignFile, Read, Write, etc) removed (it is possible to call UseInputOutput to provide it therefore);
  • floating point initialization removed (if You want, call manually one of FpuInit or FpuInitConsiderNECWindows procedures);
  • references to both WriteLn and MessageBox are removed in error handling routine. You have to call manually one of UseErrorMessageBox or UseErrorMessageWrite procedure to provide it again.
  • Variables CmdShow and CmdLine are replaced with same-named functions - to allow smart-linking.
  • Embedded support of Wide strings, Wide String arrays and Variants removed. (It is yet possible to use wide strings/wide string arrays and (or) variants by placing reference(s) to units SysWStr and (or) SysVarnt units into uses clause of dpr, but with some small restrictions, e.g. it is not possible to initialize such variables in dpr itself). And with this change, well-know "feature" of linking every Delphi program with oleaut.dll is gone.
  • Overblotted Delphi memory manager is replaced by very simple one, which just calls LocalAlloc, LocalFree, LocalReAlloc. (It is yet possible to call UseDelphiMemoryManager to restore it, or to call SetMemoryManager to setup your own memory manager).
  • Try-except-finally & raise handling support routines removed, including steps of units initializations / finalization. (But therefore it can be turned on again by adding a reference to SysSfIni unit in uses clause of project's dpr file).
  • Safe-thread string reference count (and dynamic arrays too) handling feature removed (all LOCK prefixes are commented, and there is no way to enable this again - except uncommenting it again and recompiling system.pas).

In result, size of empty project is only 4,5K after compiling. And if some ansi string operations are added, size is about 5,5K. For dynamic array of strings, size of executable is about 6,5K. And so on.

- [!] Publication of new (assembler) version of Patcher utility delayed temporarily (author is yet testing it). Instead, new version, compiled using system units replacement (above) is present here.


08-Jun-00 A lot of changes and fixes: now I have two computers with all Windows95osr2 / WindowsNTsp5, Windows98 / Windows2000 installed with all Delphi2, Delphi3, Delphi4 and Delphi5 installed on every of these. So, I could spend a lot of time on testing XCL, Visual Wizard and applets made with XCL under all of them. And this work is not finished yet. But I hope, that a number of fixes already made, could solve (at least) of the most problems with installation of Wizard package. So, I decided to publish new version now. Please, report, how You found it in its new state.

XCL Visual Wizard v0.97:

  • [-] Fixed Access Violation on File|New application / File|Open project / File|Reopen.. [project] when XCL Visual Wizard installed (found for case, when not XCL project is open). Other activity of XCL Wizard is eliminated while non-XCL project is loaded.
  • [-] Fixed lost of assigned event handler in reopening of project (eventual junk strings could  appear on reopen of project).
  • [-] Fixed jump to newly created event handler (e.g. after double click in combo box, representing event in Property Editor). Earlier second double click was jumping there.
  • [-] Fixed adding ';' to declaration of newly created events, which definition is given in XLib.pas (in Class Library dll) without final ';'.
  • [-] Fixed region calculating for Palette window in Windows95 (now it is also non-rectangular like in other operating systems).
  • [-] Fixed generating event for form itself in designer.
  • [-] Fixed bringing messages to front in designer and wizard.
  • [+] Added objects (non-visual) to a Palette:
    • ZTrayIcon with design time property <IconResourceName>, which allows to generate assigning of a value to Icon property in CreateCustomObjects as a call to LoadIcon API function.
    • ZMainMenu, ZPopupMenu with design time editor (double click menu object on designing form to show it). Not finished yet - only skeleton of design-time editor is ready.

XCL v1.86:

  • [+] New classes ZMainMenu and ZPopupMenu, designed specially to work with XCL Visual Wizard (separate event handler for each menu item is the main difference from XMenu and XPopup. These last are also have now aliases ZMenu and ZPopup like other non-visual controls to make naming more strong).
  • [*] Call of constructor for ZMenu, ZPopup is changed. Now second parameter must be array of PChar (null-terminated strings), not of ansi strings. And the last of such strings must be empty (for array of string constants, can be nil). For old XCL projects, using ZMenu and ZPopup (XMenu and XPopup), it is necessary only:
    • provide type for menu template array like array of PChar;
    • provide empty string at the end of menu definition string array.
  • Changes above made to provide more easy dynamic constructing of menus with content, unknown at design time (and this is necessary to create design time menu editor in XCL Visual Wizard).
  • [-] XWindows.pas: Fixed bug with closing addition forms in Windows 95.
  • [-] XShellLinks.pas: Fixed bug with releasing IShellFolder interface object. Now further attempts to recognize special file objects do not lead to AV exception under W9x.
  • [-] XShellLinks.pas: Fixed bug with recognizing some special non-file objects (Network neighbourhood etc.)
  • [*] XShellLinks.pas: ResolveLnk now can return shortcut data for non-special file system objects (path, workdir, etc.) without actual resolving of shortcut, i.e. without searching of linked object. So there are no floppy disk seek, network drive access attempts etc., and since this, there are no displaying of some unwanted messages.
  • [+] New class ZDirChange (derived from ZFileChange), which allows to monitor changes in any folders tree (creating separate thread for monitoring every 64 folders). It works for trees of subfolders even in Win9x.
  • [*] now ClientToScreen and ScreenToClient are defined in XVisual as dynamic methods, and fixed for MFC-controls (introducing new method ParentWindowed in XVisual class).
  • [+] New unit XPrintUtils.pas with some printer-aware functions.
  • [-] Fixed automatic assignment of main icon (stored in project resource by default as 'MAINICON') to form windows and to applet button window.
  • [-] Fixed bug in XFileSeek function (XFileUtils.pas)- by Hans L?vhaga.
  • [-] Fixed property SelCount for XMultiList: it is now returns actual count of selected items instead of returning inherited SelCount.
  • [-] Fixed calculating of BoundsRect for XWindow when it is in process of destroying (GetWindowRect can not already return its rectangle, but IsWindow yet thinking that window is existing).
  • [-] Fixed error 216 at the second click on drop down button of XCombo.


  • [+] New utility CD Eject by Vadim.
  • [*] Some fixes and changes in Launcher (v1.5):
    • [-] Fixed bug with special folders for Windows9x;
    • [-] Fixed hand cursor (for drag button) under old Windows95 and WindowsNT4.
    • [-] Fixed switching of panels while dragging something onto launcher panel.
    • [+] Added: automatic drawing of small icon on top of folder icon for folders and links to folders.
    • [-] Fixed auto-refresh for Windows9x.
    • [*] Resolved links are now stored in ini-file (but reused only for ordinal file system objects, such as files, folders, disks). As a result, there are no floppy, zip or network drives check (and heads seek) at startup or refresh, and faster start.
    • [+] Added hard refresh (with Shift pressed) to rebuild all cashed icons.
    • [-] Fixed desktop sizing in stay-on-top mode for Windows95.
    • [-] Fixed desktop sizing after finishing screen-saver.
    • [-] Fixed AV on recognizing shortcuts to some special non-file objects (e.g. Network neighbourhood, etc.)
    • [*] When file is dropped onto non-default printer shortcut, Launcher first tries to set it temporarily as default (this can be done successfully in Windows9x) and only if printer can not be set as default, document is printing using 'print' command (like earlier, as plain text in OEM charset).
    • [-] Fixed usage of command line parameter. Now it is used as a root folder where ini-file and 'Folders' directory is stored. Since this, for dual boot system or for multi-user configuration or even to start two or more launcher panels simultaneously it is possible to have only one copy of Launcher.exe on disk and use different root folders in command line of a shortcut to it to define several custom panel layouts.
  • [+] New utility NullModem to link two PC-s through serial port (LPT not tested) and to transfer files between them - in both directions. Easy drag-and-drop "send" command interface, history of target folders to move received files to. Tested in Win9x/NT/2000 and works fine for me in any combination 98-95, 2000-95, 98-NT, 2000-NT (transmission speed is about 5Kbytes/sec - on binary files). There are no more needs to install some networking components, tune up (buggedtm) direct cable connection, etc.
  • [-] ResourceMonitor applet recompiled - this fixes popup menu for it under old Windows 95.
  • [*] Patcher replaced with small (3Kbytes) version, written by Alexey Klimin using assembler (great thanks to him).
  • [*] Boot2000 updated: key /Shutdown added to force shutdown instead of reboot; reboot from W9x is now made without forcing (when boot there next time, explorer windows are restored; and operation can be cancelled by some applications).


15-May-00 XCL Visual Wizard v0.97 (not finished yet, no new publication now)
  • [-] Fixed jump to newly created event handler (e.g. after double click in combo box, representing event in Property Editor). Earlier second double click was jumping there.
  • [-] Fixed adding ';' to declaration of newly created events, which definition is given in XLib.pas (in Class Library dll) without final ';'.
  • To do list:
    • another way of unit source update in IDE editor to prevent clearing of breakpoints set in unit.
    • controlling bounds for some properties, which can not accept any integer values or depends from each other.
    • completing Palette filling for self-painting controls. Adding mfc-based ones there.
    • Increasing number of available buttons on each tab (by adding scroll buttons... or may be other way - like in Launcher 1.4 below).
    • grid steps controlling for forms in designer.
    • ini files to store default Property Inspector position and Palette buttons order.
    • design-time properties <DefaultFont> for form, <ParentFont>, <ParentColor> for controls.

XCL v1.85

  • [*] XShellLinks.ResolveLnk procedure changed. Now it can retrieve also some info about special folders and its items too (including kind of special folder object and full display name).
  • [+] XShellLinks.CreateLnk procedure added (creates shortcut to a file system object).
  • [+] Some file name parsing functions added to XFileUtils.
  • [+] Another useful functions DeleteFile2Recycle and GetUniqueFilename added to XFileUtils unit.
  • [+] ZList.MoveItem( OldIdx, NewIdx ) method added (not virtual, so its code is added to executable only when You use it).
  • [+] XClass: methods ChildIndex and MoveChild added (also not virtual).
  • [-] Fixed passing of negative mouse cursor coordinates in OnMouse... events.
  • [+] New unit XSysIcons with class XSysIconsCash to speed up drawing of images from system icons image list (by cashing accessed images in intermediate buffer bitmap).

Launcher v1.4

  •     Fixed resolving of links to special folders and other file system objects (e.g., it is possible to open Recycle Bin, Printers, etc.). E.g., it is possible now to use Active Desktop scenaries (.scf), links to Control Panel applets, printers as usual.
  •     Fixed lost of images after several tenths of refresh operations. Another way is used to cash system icon images.
  •     Drop of files with left mouse button (including multiple ones) onto folder link (or to inner folder of a panel) means MOVE of file(s) to the folder.
        If files was dragged with Ctrl key pressed, small popup menu is appearing, which allows to select one of operations: MOVE or COPY.
        Operation is performed using standard Windows call SHFileOperation, which provides all neccessary confirmations and progress.
        Additionally: Drop onto Recycle Bin link leads to deleting files to recycle bin. Drop onto printer link sends document to a printer. If printer is not default, print operation is performed by 'print' command line command and document is concidering as plain text (OEM characters only). Printing onto default printer is called using ShellExecute API call, so in that case default settings for given type of document are used.
  •     As usual, drop of file(s) to link of executable (exe, com, bat or pif) launches it with given file(s) as parameters in command line (now multiple ones are allowed). Additionally, if target shortcut has no start in directory set by default, directory of (first) dropped file (or (first) dropped directory itself) assumed to be working directory too. And in case when (first) dropped is directory and key Shift is pressed, such (first dropped) folder is not added to command line as a parameter.
  •     It is now possible to easy adjust panels using drag and drop with right mouse button:
    • to add new shortcut drag file or folder or shortcut from explorer window or from desktop onto panel with right mouse button. For shortcut, in that case small menu will popup to choose Move or Copy. For file or folder, new shortcut will be created. For non file system objects, use two-step operation: first drag object (such as printer) onto desktop to create shortcut there; second drag newly created shortcut with right mouse button onto launcher's panel and choose Move.
    • to change button position drag it with right mouse button (it is possible to drop it onto another panel of the same launcher instance). If dropped outside of panel, button is removed (and correspondent file is deleted to recycle bin). If button is corresponding to folder (not to shortcut to folder), it is not possible to delete it using right mouse button drag outside of panel. In that case open panel's folder and delete it manually.
    • to change folder position press right mouse button on it (on its title or below to bottom button) and drag to new position.
    • at least, to prevent eventual undesired right mouse drag, it is possible to disable such operations directly from popup menu (Configure|Enable Drag, |EnableRemove).
  •     Additionally, it is now easy to drag objects to launch panel when it is hidden. If drag detected and x-coordinate of mouse cursor achieved the screen edge (left or right correspondantly), launch panel is activated and become ready to drop (either with left or with right mouse button - see above).
  •     Number of link buttons on every panel can now be increased as You wish, and all of them are available even without scrolling (its positions are adjusted so that these always fit all available space, and control under mouse cursor is painted first).
  •     Refresh now is performing automatically (after about 1 sec after last change of launcher folders content).
  •     At least, SHAppBarMessage is used now to adjust launcher bar. Bugs fixed with incorrect desktop setting and refilling of a panel when its size changed (e.g., in result of change screen resolution or resize of other bars including taskbar).


7-May-00 XCL Visual Wizard v0.96

     In four words: it must work now (tested for D3 and D5 in WinY2K).

  • [*] Now if form in designer is created hidden (e.g. to refresh correspondent unit source), it is not destroyed after. So, such operations as checking add-ons or changing <AutoCreate> property for forms are performed much faster even if main form is not shown. And if toggle (F12) is called for this form, it is appearing immediately, without any delays.
        This feature is carefully tested for case, when all showing forms made hidden while project is debugging in IDE. Ensured, that only those forms become visible after debugging, which were showing before.
  • [*] It is yet possible to load units from another XCL project into IDE in XCL mode, but now Toggle unit/form (F12) command will be ignored for such units - to avoid interference with designing of current XCL project.
  • [-] Fixed removing of unit with form from XCL project.
  • [-] Fixed cashing of a unit, loaded into IDE editor (several more notifications from the IDE are taking into consideration). So, there are no more questions from IDE about reloading modified unit.
  • [*] Amount of requests from Designer to Expert even more reduced (speed up the Wizard).
  • [-] Fixed other errors with changing Applet.<MainForm> property in Property Inspector or by dropping Applet onto form. Library part is not responsible now for deleting of old Applet object instance.This must also fix some errors in creating new project (File|New XCL project).
  • [*] Now call of main form constructor is generated fully qualified in dpr-file (e.g. Unit1.Form1 := Unit1.XForm1.Create( Applet ); ). But during of searching of such line in dpr to modify it, both forms are checked.
  • [+] Generation of CreateCustomObjects improved: now for aligned controls, assignment statements for properties Left, Top, Width, Height are eliminated if not actually needed.
  • [-] Palette appearance fixed - now it is independent from screen settings scheme (e.g., from height of window title).
  • [-] Fixed selecting of inner panels of XSplitPanel, XStatus at design time. Now it is made easy by mouse click on inner panel, when its parent split panel is already selected.
  • Specially for Delphi3:
    • [-] Great efforts made to fix error with updating unit source on fly. Escpecially for case when source become smaller due update. This change can be useful also for Delphi4 and Delphi5 too.
    • [-] Fixed main reason of all troubles with version of Wizard for Delphi3. Found, that it is an incompatibility with dll, created under Delphi3, with memory allocation and string manipulation under Delphi4/Delphi5. So, XCL Designer part is now provided for Delphi3 separately.
  • [+] Following controls are added to XCL Palette:
    • XGrep (implemented by special XDsgnGrep at design time);
    • XCheckBox (now is the same as XCheck, see below);
    • XRadioBox (now is the same XRadio, see below). It is not yet possible to adjust Group property at design time, and checking/unchecking at design time is not of "radio" style. But its parent control is supposing to be its group control, and "radio" style is working good at run time too.
    • XGauge, XGaugePercents.
    • XDropButton.
    • XScroller.
    • XScrollBox. It is possible to control its scrollers at design time by mouse immediately. And with design-time only property <SaveDesignPosition> (boolean) You "tell" to designer if to generate assignment statements for Position property in CreateCustomObjects method of form to set it to the same position as in form designer. (But now it is not yet working for loading form into designer, because flag "SetAfter" is not concerning that time).

XCL v1.84

  • [*] XTooltip class improved. Now it is transparent for mouse (but can generate OnMouseMove events in response to WM_NCMOUSEMOVE messages). And, when it is showing (by call to its Show method - reintroduced), it does not become focused (i.e., flicks of current foreground window's title are eliminated).
  • [-] XCustomButton.OnMouseUp fixed. And, OnClick now is called after OnMouseDown.
  • [-] XGauge + UseBitmapBkgnd fixed. Transparent property is added to XLabel. (Transparent for background, filled in PaintBackground method - not for overlapped controls). For combination XGauge + UseBitmapBkgnd: it is possible to make one of colors transparent, assigning it to clNone. E.g., if Color = clNone, the rest of gauge is filled with bitmap background, i.e. 0% => entire gauge is transparent.
       Also, for XGauge and XGaugePercents property TextColor removed (Font.Color is using instead for painting first part of text, and TextColor1 for painting second one, as earlier).
  • [-] XSplitSizing add-on fixed (with moving indeces range from 1..Count to 0..Count-1).
  • [-] XGrep ( xgrep.gif (82 bytes) ) now can have any control as a parent, not only XCustomBevel descendant.
  • [*] Class tree is simplified a bit: XCheck now is the same as XCheckBox, and XRadio is the same as XRadioBox. And intermediate class XCustomCheck is removed. As a result, applets using check boxes became smaller about 1K.
  • [*] Also XScrollBar control is removed (which makes applets smaller about 3Kbytes and more). Now XScrollBox is using XScroller controls immediately to represent its scroll bars. In result, OnInvalidate and OnScreen2Client events are removed from XScroller definition (were necessary for XScrollBar only). Also, OnChangeVisibility property is not used more and removed, and OnChangeAppearance is generated when property Visible is changed for XScroller (used in parent XScrollBox).
  • [+] XScroller now uses GetSystemMetrics (SM_CXHSCROLL) to adjust scroller widths in correspondence with user screen preferences. But, it is yet possible to use fixed scroller widths by assigning global variable DefScrollerWidth to desired number before creating of a control.
  • [+] Appearance and behaviour of XScroller and XScrollBox are greately improved:
    • Thumb button size calculating is changed in XScroller and XScrollBox so that scrollers in scroll box are showing relation between size of visible portion of scroll box in respect to total content of one (earlier it was showing relation between possible move positions and maximal position, and this could looking strange in case when more that half of content was visible).
    • Drop buttons and thumb button have better size calculating for case when size of scroller control becomes very small.
    • Scrolling now is more flexible, even for cases of small scroller and small difference between visible and invisible part of view.
    • Two new properties for XScroller: CancelEscape:Boolean and CancelDistance:Integer to control cancelling of scroll operations. New property GrepCorner: XBevel for XScrollBar (made public to place XGrep control here, if it is needed).
  • [-] OnMouseDown fixed for XListView + UseListMouseSelect. (There were: DOWN DOWN DOWN UP).
    [-] OnMouseUp fixed for XListView + UseListEdit. (There were: DOWN without UP).
  • [-] GetStartDir procedure uses now GetModuleFileName instead of command line, so returns path correctly even if applet started from FAR. XCL Update and Patcher utilities are rebuilt with such modification, so message "File xclupdat.dat not found in starting directory. Please unpack it first." fixed. Just download new versions of these, if You have troubles with upgrading XCL. (Or, use Explorer to run it instead of other shells, such as Far).

  Sorry for some broken and incorrect links (especially in 'downloads' section) at previous release of XCL. Now all of found ones are verified and corrected.

23-Apr-00 XCL Visual Wizard v0.95
  • [-] Fixed source lost of a unit after checking add-ons in Addons tab of PropertyInspector (or other changes in designed form) and recompiling or saving unit (found for case, when formatting of 'uses' clause led to inserting of new lines). Now call of 'Use...' is inserting well as needed, as well as needed reference to 'uses' clauses.
  • [-] Fixed generating of CreateCustomObjects method of form first time after implementation directive, instead of before (sometimes), which could lead later to incorrect inserting of its modified body to the start of unit.
  • [-] Fixed finishing of XCL Designer (could lead to unpredictable errors when current page in Property Inspector was not 0 - "Properties").
  • [-] Fixed moving of .xfm file together with its unit. Earlier it was just created again at new place, but without deleting .xfm-file on old place. In result, interesting "feature" was appeared: when new XCL project was creating using correspondent menu in IDE, form definition was used from previous project. Now it is creating empty as it must (at least if previous project was saved in other folder, than Delphi default one, or its units were renamed during saving). For Delphi3, see also below.
  • [-] Fixed removing addons from add-on tab in Property Inspector for addons, which are no more used (after deleting an object on designed form).
  • [-] Fixed applying <AutoCreate> property for project forms after changing its value by rebuilding of CreateCustomObjects of main form (even not loaded into IDE editor - see other fixes).
  • [-] Now constructors of auto-created forms in main form's CreateCustomObjects methods are generated fully qualified to avoid possible conflicts in case when project has two forms with the same name or type (defined in different units).
  • [-] Fixed scanning of events in Inspector. When form was just created, events could be assigned to strange values ('True', '4'), which actually was strings, not erased after scanning other form properties (AutoAlign, Margin, etc.)
  • [-] Fixed appearing of annoying message about not matching form name to defined in form signature with appearing form as 'Erroneuos' - when File|New XCL form clicked. In that case unit is not yet exist in IDE editor and as a file, but form name and type is calculated now succefully on base of unit name (e.g., Unit2 -> Form2:XForm2). And, even if this calculation made incorrectly, this is auto-corrected immediately when form is showing in designer and in property inspector (now on base of form signature from source, that become available already).
  • [-] Fixed multiple flickering of entire desktop when new XCL project was creating or old one reopened (reason was, that Inspector made attempts to update its window before creating it).
  • [-] Fixed two serious bugs in Inspector: with incorrect attempts to insert items into list and string list with index -1, and with incorrect using of XNamedTags add-on (some named tag, used as ttInteger, was named as ttString, so Inspector unsuccessfully tried to release 'pointed' memory). With fixing these bugs, XCL Visual Wizard becomes very stable. With fixing another serious bug in XNamedTag itself (see below), errors concerning using of this great add-on, (I hope) finally vanished.
  • [-] Fixed moving of dots, indicating selection, with correspondent objects on designed form, even for case when form or parent object is resizing and selected object is aligned on it.
  • [-] Fixed modifying of units, which are not loaded into IDE editor, including unit, containing main form definition (tested for checking add-ons).
  • [-] Amount of messages between XCL Designer and XCL Wizard part is reduced a lot, so Wizard became faster and even more stable.
  • [-] Fixed naming of Applet non-visual control as 'Applet' but not 'Applet1', 'Applet2' and so on.
  • [-] Now all chages are applied to a source immediately (after small delay following the last of properties change). So, button 'SaveAll' on IDE panel is correctly indicating that source is changed (for Delphi and for You). I hope, this fixes necessity of pressing 'Compile' button twice (earlier some changes was applied only after pressing this button, so first compiling operation could be silently cancelled - this was annoying a bit).
  • Special for DELPHI3:
    • [-] Fixed appearing of main form immediately after File|New XCL project.
    • [-] Fixed unrecognizing of form type when it was first created, which could lead to representing a form in Inspector as a string 'FormN: ???' (in title).
    • [-] Fixed closing of designing form when correspondent unit source is closed in IDE editor.
    • [-] Fixed moving .xfm with correspondent unit, when it is saving first time after File|New XCL form command (Delphi3 does not provide notifications about such events, so checking of this was necessary to be made in XCL Designer).
    • [-] The same as above, but even for case, when unit is saving under another name then it is just created.
  • [+] CreateProc added to XButton definition (so on dropping it at design time, it sets Caption to a button name).
  • [+] Some add-ons are added for automatic maintenance:
    • UseBtnRepeats (for XCustomButton);
    • UseResizeAntiflicker (for XForm);
    • UseFocusPainter (for XCustomControl);
    • and others - see below.
  • [+] With new events OnAddonGetSet and OnPropChange following feature added to the Wizard: when some property is changed, addons which are needed to work with such value are asked to be checked (if not yet checked before). E.g., if Align property for a control is set, addon UseAligner is asked to be checked if not yet checked.
  • [+] Several events are added to global Applet object (OnActivate/OnDeactivate, OnMinimize/OnRestore, OnMessage). Now it is possible to maintain handlers for such events in PropertyInspector.
  • [+] Several other controls and objects are added to the Palette:
    • XPanel (there are no assignment of panel name to Caption on create like for XLabel and XButton, but editing is provided in combo box style with two items: empty line and panel name).
    • XEdit (with four add-ons: UseEditUndo, UseEditClipboard, UseEditMouseSelect, UseCaret).
    • XSplitPanel (with UseSplitSizer add-on). It is possible to adjust properties of inner panels (e.g. its width) at design time, using Property Inspector as usual (but now inner panel can be selected only by pressing Escape when its child control (if any) is selected, or in Objects tab in the Inspector).
    • XStatus (the same as XSplitPanel, but created aligned to bottom).

XCL v1.83

  • [-] Fixed adjusting of XPanel (found at design time, when BevelWidth property was changing after Layout property changed). In some protected methods of XCustomBevel call ToAdjustMembers added (new non-virtual method of XVisual, which first tests if members are now creating, and calls AdjustMembers only if ones are already created).
  • [-] Fixed autosizing of XButton when Font is changed (found at design time while manipulating with Font.Orientation - reason was, that XLabel was generating OnChangeAppearance only if its Autosize was True - fixed too).
  • [*] CaptureMouse and ReleaseMouse methods of XControl class are moved to public section (from protected).
  • [*] XSplitPanel is changed: its Panels[] are now enumerated starting from 0, not from 1. So, sample04 will not working without correspondent corrections.
  • [-] Fixed bug in XNamedTag: when new named tag was adding, its initial type was not assigned. Since setting of new value requires removing of old one (even first time), sometimes this led to attempt to free memory which was not allocated before. Because such values are only two among of 256 possible, this bug could be shown very rarely.
  • [-] Fixed bug in XStrUtils.LowerCase and UpperCase functions (which worked incorrectly with empty strings).


12-Apr-00 XCL Visual Wizard v0.94+:
  • [-] XCL Visual Designer and Expert are provided for Delphi3. Designer is yet marked as v0.94, but it is actually is changed, let let us name it as v0.94+. To avoid large uploads, version 0.94+ of XCL Designer, compatible with Delphi3, is provided as a patch. Use Patcher utility from 'applets' section to update XCL Designer part. See readme file about installation.


11-Apr-00 XCL v1.82 and XCL Visual Wizard 0.94 announce:
  • XCL Wizard:
    • [+] new non-visual object Applet is added to XCL Palette. It is appearing on main form and allows to maintain properties of the entire applet, created with XCL Visual Wizard. Changing its property <MainForm> of an Applet (design time only), or dropping Applet object onto desired form, it is possible to define another form in project as 'main form' easy. In such case XCL Designer makes an attempt to change a line in dpr-file of a project, where constructor of MainForm is called.
         Some changes in general: in XCL Visual Wizard code, which before had to be placed in dpr (calls to add-on's initialization procedures, etc.) is planning to be placed in CreateCustomObjects of the main form, when created automatically.
    • [+] new design-time property for form: <AutoCreate>. For all forms, which <AutoCreate> property is True, constructors are called in CreateCustomObjects automatically. (Such constructors are sorted in alphabetical order, so if You want to create [autocreated] forms in a certain order, change its names correspondantly).
    • [-] fixed possible trouble with impossibility to recompile project in some cases. At least, press 'Compile' button (or call 'Compile project' from menu) twice. First time some changes in source could be done in respond to 'compile' command, and these are requiring to cancel first request. May be, in future I'll look for capability to simulate second 'Compile' after cancelling first one and making necessary changes in source.
    • [-] log files XCLWZD.LOG and XCLDSG.LOG are now created for every Delphi session (placed in your temporary directory, if You can not easy find it, use 'Search' in Start menu of your PC). If You have troubles with XCL Visual Wisard, I suggest to send me these two files with (detailed as possible) report about circumstances of an occurance.
    • [+] Add-ons page is implemented now in Property Inspector and shows all possible for project add-ons as a table of check boxes. State of these check boxes is taking into consideration to generate call statements for needed add-ons - in CreateCustomObjects method of the main form of a project - before all other initializations. Information about selected add-ons is stored in form definition of the main form (file with extension .xfm), in section [ADDONS].
    • [-] with fixed scrolling in XMultilist, 'Object' pane can now be normally scrolled in XCL Property Inspector.
    • [-] fixed scrolling with keyboard downto bottom item in property list, event list, addon list.
    • [+] once more simple control XButton added to Palette. With this, I am starting a bit boring, but necessary working of adding all other simple controls. And hard working under some not to easy controls is in front of me (I suppose, that adding of XMenu, XSplitPanel, XNotebook and some other complex controls is not too easy task).
  • XCL:
    • [-] Small error in docs is fixed: XApplet.OleUsed = True means that OleAut32.dll is NOT unloaded due message handling loop.
    • [-] Fixed scrolling in XMultilist.
    • [-] Fixed checkboxes (XCheck, XCheckBox, XRadio, XRadioBox): it is now can not be clicked when disabled.
    • [-] In XKeyboardEvents.pas, only Enabled controls are taking into consideration now to tabulate.

    As it is said earlier, XCL 1.82 is distributed as a small update (5K in ZIP). You need to download also previous update (1.80 to 1.81, ~30K) and small XCLUpdate utility (~30K) and run it in XCL directory first with 1.81 update unpacked there, and then with 1.82 update.

    And, starting from (this) version 0.94, XCL Visual Wizard (expert and designer parts) are provided as uncompressed executables. May be, next version also will be provided as a set of patches (using XCLUpdate or Patcher utility from XCL WEB Page).

    Unfortunately, version 1.94 of XCL Visual Wizard is not available for Delphi3, but I hope to correct this in next update. Sorry.


01-Apr-00 XCL v1.81 announce:
  • [*] Good news: commenting of the most of units (at least developed totally by me - Mr.Bonanzas) finished. So, help now is generated almost for all classes (about 4,2 MBytes of html documents).
    [+] With new version of xHelpGen.exe, index topic is improved and supports now switching between showing unit references sorted or by dependances (as earlier) and between showing class references as tree or sorted alphabetically, and button to expand/collapse all classes tree nodes is available in "view as tree" mode. All such states are stored in cookies and restored when index page is loaded again. Also, it is possible now to add some external html documents (not generated by xHelpGen) directly into index topic in its introduction section (a small introduction article is placed there now, and later may be other links too).
  • [-] Fixed setting value to Top, Left, Width and Height (was incorrect rather then assignment to BoundsRect) - for windowed controls and forms.
  • [+] XGrep.ActiveNotVisible property added. If set to True, XGrep is operating without painting (like invisible).
  • [+] New control XHystoEx which can make its parent form really transparent.
    [-] Fixed usage of BoxColor for XHysto control.
    [-] Small change in XForm.ExcludeUpdRgn, ExcludeUpdRect. Now region/rectangle is not excluded if painting is performing through buffer.
  • [+] New procedure SortData, implementing quick sorting algorithm (in XSort.pas). Can be applied to an arbitrary array of any kind data (which could be "strictly ordered").
    [+] Also several ready-to-use procedures to sort arrays of integers, dwords and strings (the last - for strings in ZStrings object).
    [+] New virtual method ZStrings.Swap.
    [+] New class ZDirListEx, extending ZDirList to work with custom sets of filters (are passed as a string with several filters separated by semicolon);
    [+] New procedure SortDirList, allowing to sort directory entries, taking into consideration several sorting rules in certain order (by name , by extension, by size, by time and even more detailed).
  • [+] Several new useful functions in XStrUtils.pas (Int2Ths - to separate triples of digits with ','; Int2Digs - to extend number to desired width by leading zeroes; Num2Bytes - to represent large counts of bytes shortly with 'K', 'M', 'G' or 'T' suffix; StrSatisfy - to compare string with wildcards mask).
  • [-] Small note added about conflicting of two add-on units: XBtnRepeats.pas prevents add-on unit XEditMouseSel.pas from normal working if the first is activated later. To avoid such kind of conflict and allow both these add-on units to work together, just call UseBtnRepeats BEFORE calling of UseEditMouseSelect procedure.
  • [+] Finally, new XCL Update utility is created (based on PatchMaker/Patcher applets). This update and next eight (8) updates will be made using XCL Update, so You will have to download only small and (the last archive with the utility only once). I hope this will reduce your download time (and my upload time too).


18-Mar-00 XCL v1.80 announce:
  • XWndDynHandlers is changed a bit. Now checking of a fact "is add-on already in use", is performing by call AttachedProc2Window function instead of testing internal variable. Not a bug, but there were problems with running of Applet twice or more.
  • XCombo is improved a bit to provide showing of more content without needs of vertical scrolling in case when number of items in dropped window is not too big. Properties Color, BoxColor of XCombo now are applied to dropped down list.
  • Changes in XEditClpbrd.pas: two functions are available now separately and even without calling UseEditClipboard: CopyToClipboard( Text ) and PasteFromClipboard : String.
  • Fixed bug in ZDIBitmap with leaking of memory in destructor.
  • Fixed in XGrid order of Col, Row in OnPaintCell event call.
  • Fixed XEdit: OnKeyPress is now called properly.
  • Bug fixed in XFileSeek with setting pointer above first 64 K bytes of a file.
  • New feature added to XButton implementation: if in OnClick event handler set Down := False, it is posiible now to change focused control there too.
  • Forget to say: last time new useful function WinNTShutdown was added into XWindowsUtils.pas unit.
  • Once more fix of XCL Help Generator (v1.4): Tasks article is now added to class topic successfully if defined in source immediately following class definition.
  • Several more units are commented. Now total size of help, generated by xHelpGen.exe, is about 2,66Mbytes.
  • New: XRichEdit.pas - translation of richedit.h by Tim Slusher;
    Update of XRegistry.pas by Tim Slusher.


22-Feb-00 XCL v1.79 announce:
  • Added comments to several more units (so, help documentation, generated now with XCL Help Generator, is more complete).
  • XCL Wizard: fixed bug with enumerating of fonts in XLib.pas (thanks to Cibulka Karel).
  • Small ( :) ) changes in XCL Help Generator:
    • fixed reference to an item, defined in unit (when reference is given by XUnitName.ItemName in {* comments } in source).
    • fixed reference from class topic to another inherited property, event, method, field. Now short reference to the same class is used first.
    • fixed scanning of directives in global procedure/function declaration.
    • removed empty heads 'from Ancestor' for properties, methods, etc.
    • earlier generated html-code is reused in derived classes, so process is much faster (especially for classes, located far from tree root).
    • progress indicator is improved again, and now shows classes, generating in units, too.
    • to mark out end classes (intended to use, not to derive other ones), it is possible now to start comment following to class definition, with '{*!' characters (without quotas).
    • it is possible (and recommended) now to add empty comment '{*}' (without quotas) for overridden declarations to provide reference to inherited item (like 'See also ...'). Also, if item is overridden method, note is added about overriding, and if item was protected in base class and moved to public section, correspondent note is added automatically.
    • class tree in index.htm now is made as expandable with initially two levels opened.
    • top frame layout of class-related article is changed a bit to make it more observative if there is an image of class to be placed there.
  • Changes above in XCL Help Generator are not too serious to make it necessary for You to download new version 1.3 again. At least, generating of help was tested with v1.2 and it is working. But v1.3 is faster, so decide for yourself, download or not new version.
  • While writing comments into source of XCL, some things are changed a bit to make text more clear and compliant with documentation:
    • In XWindows: AttachMethod2Window, AttachProc2Window, DetachMethod2Window, DetachProc2Window procedures are changed and call UseWndDynHandlers by theirself (once). Other calls of this last are removed.
    • In XApplet when Applet is terminating SendMessage( WM_CLOSE, ... is performed before PostQuitMessage. And when XApplet.WndProc is handling WM_CLOSE message, it calls inherited method too (to provide handling of this message in add-ons, attached to applet's window dynamically).
    • In XTrayIcons object TrayIconsManager is removed, and Applet.OnMessage is not used more. Instead, ordinal procedure is attached to applet button window.
    • Also, in XAligns.pas, Aligner variable and correspondent class are removed and replaced with a couple of ordinal procedures.
    • Changed algorithm of XCarets.pas (also to remove object and replace procedures of object with ordinal ones).
    • XBtnRepeats.pas add-on [fixed] and improved. Small change in XMouseEvents: declaration of procedure HandleMessage is placed into interface part.
    • Small fix in XButton class implementation: mouse is captured now before setting Down property to True (when button is clicked). And ReleaseCapture is now called when False is assigned to property Down in XCustomButton. With these changes Launcher demo is recompiled to fix clicking on some buttons (links to CD drive), which could take some time to respond. Also by the same changes fixed releasing of a button in Launcher outside of launch panel.
  • Launcher applet improved (first of all for proper work under Windows2000):
    • More careful calculating of desktop positioning;
    • Added item Poition-(Left,Right) into menu;
    • Added item Autohide into menu; when not Autohide, launch panel stays on top, cutting desktop workarea space;
    • When stays on top (not Autohide), accepts dropping of files (only to run program, correspondent to target button, with dropped file as an argument of command line).
  • New applet added - Boot2000 to simplify rebooting of PC with Windows2000, WindowsNT and Windows9x operating systems installed into several partitions.


4-Feb-00 XCL v1.78 announce:
  • Fixed bugs with XCombo control, XListView control, XListMouseSel add-on (reported by Dave Beseke).
    • XCombo - error 216 was found on clicking combolist item. Reason was in XWndDynHandlers. Some code added to prevent further processing if a window was destroyed while handling attached handlers.
    • With overriding SetBoundsRect in XForm and calling there GlobalForms_On_Realign appearance of a combolist is fixed (sometimes was shown incorrectly).
    • XListView - duplicated OnMouseUp event fixed.
    • With adding global event GlobalLists_OnDestroyListView fixed a bug with error 216 appearing in very rare case (mouse down on combolist with releasing outbounds of the combolist was leading to the error if drop down button was clicked again).
  • Fixed for XFontRotate: font is not rotated now if it is not TrueType (discovered eventually, when TestAllControls was testing in Win98 with no 'Times' font installed).
  • Starting from this version (1.78), XCL sources are delivered for You as a self-extracted archive (using RAR SFX technology). This allows to make archive smaller.
  • XCL Visual Wizard v0.93: Expert part is recompiled with new XCL (fixed comboboxes in Property Inspector), and improved a bit: regeneration of erroneously deleted definitions of objects in form class, ignoring of objects of class, not present in Palette.
       Also, starting from v0.93, it is possible to get context help about controls and its properties at design time, pressing F1 key when a designed form or Property Inspector is current window on screen.
  • XCL Help Generator v1.2:
    • fixed small bug with referencing to class article from type definition (in head of topic).
    • Also, if -no single key used in command line, html document is not opened. This allows to use xHelpGen.exe just as utility to generate help documents. And if xHelpRun.exe exists in $(Delphi)\Bin path, it is running instead of xHelpGen.exe from the Wizard (so, You can write your own launcher for XCL help, which only calls xHelpGen first to refresh help files if needed).
    • If there are some problems on your system with opening help article not in the same browser window or with finding browser itself, try to change UseJavaScript value (No to Yes) in xHelpGen.ini (could be found in the same directory as xHelpGen.exe itself). This key affects only will be or not created batch html file, launched invisible to reopen desired topic in the same window (also fixed in this version - no more confirmation questions from IE about closing document).
         These changes do not mean that You have to download new version immediately. Previous v1.1 is sufficiently to work as standalone application or Delphi Tool.


3-Feb-00 XCL v1.77 announce:
  • Improvement of XRegistry.pas by Tim Slusher.
  • Change of XApplets.pas by Jordan Russell (fixing "Bug #2" of autominimizing of an applet under Wind95/98).
  • Fixed small bug in XApplet/XWindow, so it is possible now to create applet without main icon.
  • Fixed running of an applet without creating of a form under Windows95.
  • Fixed WriteResource2Stream for Win9x - now TestAllControls sample (#01) from newest (see it at downloads topic) must work both for Win9x and NT (with running clouds).
  • Comments added into next several XCL units, so XCL Help, generated by XCL Help Generator, now is more complete.
  • New version of XCL Help Generator. My believes, that You will never need to download new version of this utility, failed :(. Therefore, I hope (again :) ), that this version (1.1) tested very well and You will never not need to download it again later. Changes are following:
    • Fixed scanning of source for records and some other Pascal constructions (fixed 'abstract' directive, scanning of var definition, class with default TObject ancestor, etc.)
    • Fixed output of string constants (no more #000...0 instead of 'string').
    • Fixed glossary letters (finalization of <a href...> with </a>).
    • Fixed references from a glossary (#topic added for members of class).
    • Fixed referring from class-related article to methods, properties, etc., inherited from ancestor class. Therefore, to make references to members of other classes it is necessary to use either qualified names (fixed too) or insertion of inline html tags into comments.
    • Changed progress indicator - now topics for classes of unit are created immediately after creating of topic for unit itself.
    • Java script added to frames page of class-related help to jump into given hash (works for IE4/5 only).
    • Customized macroses (with parameters) added to insert a lot of similar html tags easy and make comments itself readable in source.
    • Fixed class tree building for levels 3 and higher.
    • Fixed determining of read-only attribute for inherited properties, which are declared only in derived class with no type name and read/write directives (now ancesting class is looking for this property to determine is a property read-only or not).
    • And may be something else... Do not remeber what.
  • Since some important changes are made in XCL, all parts of XCL Visual Wizard are recompiled. So, if old version, downloaded earlier, does not work for You, get new version on XCL Web Page.


3-Feb-00 XCL v1.77 announce:
  • Improvement of XRegistry.pas by Tim Slusher.
  • Change of XApplets.pas by Jordan Russell (fixing "Bug #2" of autominimizing of an applet under Wind95/98).
  • Fixed small bug in XApplet/XWindow, so it is possible now to create applet without main icon.
  • Fixed running of an applet without creating of a form under Windows95.
  • Fixed WriteResource2Stream for Win9x - now TestAllControls sample (#01) from newest (see it at downloads topic) must work both for Win9x and NT (with running clouds).
  • Comments added into next several XCL units, so XCL Help, generated by XCL Help Generator, now is more complete.
  • New version of XCL Help Generator. My believes, that You will never need to download new version of this utility, failed :(. Therefore, I hope (again :) ), that this version (1.1) tested very well and You will never not need to download it again later. Changes are following:
    • Fixed scanning of source for records and some other Pascal constructions (fixed 'abstract' directive, scanning of var definition, class with default TObject ancestor, etc.)
    • Fixed output of string constants (no more #000...0 instead of 'string').
    • Fixed glossary letters (finalization of <a href...> with </a>).
    • Fixed references from a glossary (#topic added for members of class).
    • Fixed referring from class-related article to methods, properties, etc., inherited from ancestor class. Therefore, to make references to members of other classes it is necessary to use either qualified names (fixed too) or insertion of inline html tags into comments.
    • Changed progress indicator - now topics for classes of unit are created immediately after creating of topic for unit itself.
    • Java script added to frames page of class-related help to jump into given hash (works for IE4/5 only).
    • Customized macroses (with parameters) added to insert a lot of similar html tags easy and make comments itself readable in source.
    • Fixed class tree building for levels 3 and higher.
    • Fixed determining of read-only attribute for inherited properties, which are declared only in derived class with no type name and read/write directives (now ancesting class is looking for this property to determine is a property read-only or not).
    • And may be something else... Do not remeber what.
  • Since some important changes are made in XCL, all parts of XCL Visual Wizard are recompiled. So, if old version, downloaded earlier, does not work for You, get new version on XCL Web Page.


3-Feb-00 XCL v1.77 announce:
  • Improvement of XRegistry.pas by Tim Slusher.
  • Change of XApplets.pas by Jordan Russell (fixing "Bug #2" of autominimizing of an applet under Wind95/98).
  • Fixed small bug in XApplet/XWindow, so it is possible now to create applet without main icon.
  • Fixed running of an applet without creating of a form under Windows95.
  • Fixed WriteResource2Stream for Win9x - now TestAllControls sample (#01) from newest (see it at downloads topic) must work both for Win9x and NT (with running clouds).
  • Comments added into next several XCL units, so XCL Help, generated by XCL Help Generator, now is more complete.
  • New version of XCL Help Generator. My believes, that You will never need to download new version of this utility, failed :(. Therefore, I hope (again :) ), that this version (1.1) tested very well and You will never not need to download it again later. Changes are following:
    • Fixed scanning of source for records and some other Pascal constructions (fixed 'abstract' directive, scanning of var definition, class with default TObject ancestor, etc.)
    • Fixed output of string constants (no more #000...0 instead of 'string').
    • Fixed glossary letters (finalization of <a href...> with </a>).
    • Fixed references from a glossary (#topic added for members of class).
    • Fixed referring from class-related article to methods, properties, etc., inherited from ancestor class. Therefore, to make references to members of other classes it is necessary to use either qualified names (fixed too) or insertion of inline html tags into comments.
    • Changed progress indicator - now topics for classes of unit are created immediately after creating of topic for unit itself.
    • Java script added to frames page of class-related help to jump into given hash (works for IE4/5 only).
    • Customized macroses (with parameters) added to insert a lot of similar html tags easy and make comments itself readable in source.
    • Fixed class tree building for levels 3 and higher.
    • Fixed determining of read-only attribute for inherited properties, which are declared only in derived class with no type name and read/write directives (now ancesting class is looking for this property to determine is a property read-only or not).
    • And may be something else... Do not remeber what.
  • Since some important changes are made in XCL, all parts of XCL Visual Wizard are recompiled. So, if old version, downloaded earlier, does not work for You, get new version on XCL Web Page.


27-Jan-00 XCL v1.76 announce:
  • changes in XDialogs.pas:
    • reference to SysUtils removed;
    • class XOpenSaveDialog renamed to ZOpenSaveDialog;
    • new class ZOpenDirDialog (uses SHBrowseForFolder).
  • new unit XPascalUnit.pas with main class ZPascalUnit intended to help with syntax analizing of (Delphi) Pascal unit. Supports only reading of pascal source and lexical parsing of the unit.
  • new "XCL Help generator" is created to solve once and for all times problem of synchronization of XCL docs with constantly changing sources. Download it, and You always will get access to the most fresh version of XCL Help (in html-format), generated "on fly". Now only help for several basics units is provided. But You will never need to download the Generator in future (excluding possible bug fixing, but I tested it very carefully, and hope, it does not contain bugs).
  • Gift from Tim Slusher: ZReqistry in XRegistry.pas.
22-Jan-00 XCL v1.75 announce:
  • added JPeg graphic format support: new ZJpeg class (in XJpegs.pas).
  • New function WriteResource2Stream (in XStreams.pas). Small change for ZMemoryStream: SetSize now overriden, and setting of size for ZMemoryStream is possible by assignment a value to property Size.
  • TestAllControls sample (#01) now uses for running sky animation clouds image stored in resource (640 x 480, about 10K), which is embedding to exe. Tested now for D3 and D5. I hope, must work for D4.
21-Jan-00 XCL v1.74 announce:
  • XCL: New concept of dynamic attach/detach to/from windows message handlers chain (declared in previous version) is applied to the most of add-ons.
  • XCL: new XBackgrounds.pas add-on, making bitmap skins for forms of applet. Thanks to Wei Bao for idea. Some changes in code to make possible this add-on:
    • new method PaintBackground in XVisual, which is calling now in PaintErase and in turn, calling event handler GlobalVisuals_OnPaintBkgnd (if those last is assigned);
    • changing some FillRect calls to PaintBackground (for XBevel, XLabel, etc.);
    • new add-on XBufLabels (called automatically from XRotateFonts add-on or/and from XBackgrounds) to paint labels through buffer (its main procedure PaintLabelThroughBuffer was previously located in XRotateFonts, I just moved it into new add-on with samll changes).
         Also property ManualInvalidate added to XLabel. If it is True, the label never invalidated, allowing faster painting through buffer.
    • boolean flag GlobalControls_InvalidateScrolled. If set to True (in XBackgrounds) then all scrolling is performed by invalidating of entire scrolled area (instead of call ScrollWindowEx);
    • XRadioBox Paint method changed a bit and uses now regions to clip output.
    • XCalendar now is painting its digits using hidden XLabel control.
  • XCL: New method IsTrueType: Boolean for XFont. If font is not True Type, it is now not rotating in XRotateFonts. New boolean flag GlobalGraphics_UseOrientation. If not set to True, Orientation of fonts is ignored. (It is set to True only if XRotateFonts add-on used).
  • XCL: Small fix in XFocusDrawing.pas. I found that it is necessary, that valid Font must be selected into device context to DrawFocusRect correctly.
  • XCL: Small change in XFileUtils.XFileSeek : checking if position to move to less then 0.
  • XCL: I tired of maintaining dcu's for XGifs.pas, so I decided to publish it with source starting from this version.
18-Jan-00 XCL v1.73 and XCL Visual Wizard v0.91 (almost functional) announce:
  • Wizard: version for Delphi3 ready. I also tried to make it compatible with Delphi2, but failed to do this - either my D2 is too bugged, or my hands too wry... :(. So, don't ask me about D2 version. Any way, You can design XCL applet in D3/4/5, and then compile it in D2.
  • XCL: XApplet.CreateWindow now redirects to CreateAppButton. Since this, ambiguous system menu items (Maximize, Move, Size) are deleted always correctly at startup.
  • XCL: some small changes in entire XCL code to achieve compatibility with earlier versions of Delphi (Delphi2.0, Delphi2.01, Delphi3). E.g., LongWord => DWord type, StrCopy( PChar, PChar(String(ShortStr))) => StrPCopy( PChar, ShortStr ), adding conditional directives {$IF[N]DEF VER90} somewhere, etc.
  • XCL: XMenu is returned to InsertMenuItem but with setting cbSize to 44 like in VCL (for compatibility with Windows95), as it is suggested by Otakar Milink.
  • XCL: New concept of dynamic attaching of add-ons to window handlers chains. No overbloats, and implemented also as add-on. Allows to detach attached handlers at any time during run time executing. Made with a small piece of code, and allows to reduce code for add-ons, using dynamic attachment.
         This technique is yet applied only to menus, but later it will change old self-assignment-to-event statements and redundant code (left for backward compatibility) will be removed.
  • XCL: Small change in XWindows.pas to close on WM_NCDESTROY only form window (i.e. XWindow object having Applet as a parent object), so MFC-control windows could be destroyed normally when its parent is destroyed.
  • XCL: Small change in XAligns.pas to do nothing when AppletTerminated = True. Avoid some possible problems with finishing XCL applet with XNotebook on form.
  • Wizard: fixed XLabel (and any other similar objects could be added later with custom constructor). Reference to %PARENT% is substituting with Self only if parent is form, otherwise - with a name of its parent object in CreateCustomObjects.
  • Wizard: implementation of renaming of objects is finished (I just forgot before to replace name in unit form definition class, though renaming of form was made correctly :) ). Also, double click on title bar of the Inspector now fixed and always available to rename objects/forms.
  • Wizard: appearing of newly created XCL form (File|New XCL form) made forced (in D3 especially).
  • Wizard: appearing of Palette by moving mouse to the top of screen (under Win9x especially) fixed.
  • Wizard. Now current designing form can be easy made foreground by clicking on Palette.
  • Wizard: now designed form becomes current also by clicking on its caption (and Inspector shows its properties). Selection (of controls on form) is not changed in that case.
  • Wizard: ZTimer registration on Palette is finished.
  • Wizard: Faking NonVisual base class added to classes tree above all non-visual objects (e.g., above ZTimer) with hidden properties *Left and *Top. This allow to designer to save/restore position of non-visual object button on designing form.
  • Wizard: OnLeave event is handled now immediately if current form is changed in Inspector (for event combo boxes). But I decided to discard changes in combo silently in this case, just to avoid annoying message like 'Timer1Timer method already exists'.
  • Wizard. Manual input of event name in combo edit fixed. If it is changed, pressing Enter now lead to apply changes, not to drop down combo list. Previous assigned event is automatically removed if it is empty. Also, all assignments to empty event, been removed, are eliminated.
  • Wizard. Fixed updating of CreateCustomObjects when a last control is removed from the form.
  • XCL. DestroyCustomObjects virtual method added to definition of XCustomForm class. This method is introduced here to override it in user defined forms and fill (automatically) with destructors of poor objects, created at design time.
  • Wizard. DestroyCustomObjects is generated for objects with ckObject kind (e.g., for ZTimer). This method is automatically removed if last of such objects is removed from designing form.
  • XCL, Wizard: small changes in XDsgnNonVisual implementation to make appearing of non-visual object exactly in place of mouse click (when dropped on designing form).
  • Wizard: Fixed using of defaults list of class for design-protected properties, defined in XLib.pas unit. Both for setting value of property first time, and for taking its into consideration when code is generated in CreateCustomObjects.
  • Wizard: useless field Dflt removed from TXPropInfo, instead boolean field SetAfter added, which allows to tell to the Designer to set this property for an object only after creating of all objects and controls of the form. I.g., property Enabled of ZTimer has SetAfter = True, so timer can be enabled only after creating of all controls and objects of the form.
  • Wizard: Font enumeration added into XLib. Fields GetValCount and GetVal added to property definition record TXPropInfo, which are callback functions. These entries are used now in Property Inspector (if assigned), so it is possible now to select font name (e.g., for XLabel) from drop down list of the combo, representing the property. Also, it is possible to enter empty font name to reset all font parameters to default.
  • Wizard: now does not trust to BeforeCompile/AfterCompile notifications, sent by IDE (because these notifications can be fake, as a result of working some wizards or IDE code insight). So, if after changing of some properties in Property Inspector You press Run (F9), "nothing" can be done. This is because changes are applied to unit source - by generating needed code. Press Run button (F9) again  in that case. Another way - always do "Save all" before pressing Run button.
  • Wizard: while editing unit source directly in IDE edit window, now only after entire transfer of new content to expert part changes are applied. This allows to avoid problems with compressing of source text in IDE, which could lead to leaking of some characters or to leave some characters after last 'end.' in unit.
  • Wizard: fixed selecting of the whole text of edit control in Inspector after applying changes (after editing it and pressing ENTER). Fixed strange editing after first editing and pressing ENTER in edit control which requires confirmation (pressing of ENTER).
  • Wizard: fixed appearing of the same form twice on opening XCL project with unit source opened in editor.
12-Jan-00 XCL v1.72 and XCL Visual Wizard v0.9 (almost functional) announce:
  • XCL: bug fixed with resource leaking with rotated fonts. Graphics (XGraphics, XCanvases, etc.) is changed a lot to avoid this bug and other similar possible there.
  • XCL: some changes in base classes (XControl, XForm) to avoid problems with closing forms and closing applet. Now SetBoundsRect does nothing when AppletTerminated = True. So, closing now is much faster.
  • Also I have to notice You, what to avoid problems with closing forms and applet with XImgButton's used, it is necessary to create XImageList object just after its parent form creation, before all other child XImgButton's (so, it will be destroyed last, and run time error 216 will not appear). Later, in Wizard, all non-viaual objects will be created first.
  • XCL: appearing of menu achieved in Windows95 (under 98/NT all was OK, but in 95 API call InsertMenuItem does not work, and I had to change it to AppendMenu - which is claimed to be "obsolete" :) ). Now this version is uploaded, but later I will change it again to InsertMenuItem but with line
                  MenuItemInfo.cbSize := 44; // Required for Windows 95,
    as suggested by Otakar Milink.
  • Wizard: Appearing of a label at run-time is fixed (creation string changed to 'NewLabel( Self, ...'  ). Now creation string generated for XLabel, contains assignments to Width and Height commented, if AutoSize is True (and this is garantee that its size will be automatically adjusted when form is created).
  • Wizard: first non-visual class (ZTimer) is added onto palette. But it is not possible yet to drop it onto form. Other problems stopped this work. Next non-visual is Applet (to place onto main form). Soon.
  • Wizard. Fixed for Win95/98 leaking of resources (see above).
  • Wizard. Fixed for Win95/98. Under Win95 region is not set to Palette. Interprocess communications between Designer and Expert parts now made synchronously, using SendMessage (with a single global windows message) and two mapped files. Only mapped files found to be working for all Win95, Win98 and NT. All others (pipes, mailslots, WM_COPYDATA) are not appropriate for Win9x.
  • Wizard. There are no restrictions now for starting several instances of Delphi (of the same or different - 4 or 5 version) with the Wizard installed. And it is even possible to open several XCL projects in these Delphi shells simultaneously (but, only last instance of the Wizard can be used in that case to design forms visually - because of Palette made auto-hiding only).
  • Wizard. Then XCL project is running under Delphi debugger, designer's windows (forms, Inspector, Palette) are hiding until the end of debug session.
  • Wizard. Now two log files are generating in your windows temp directory (e.g. Windows\Temp): XCLWZD.log and XCLDSG.log. If You have repeatitive trouble with working with XCL Wizard, please send me such log files (and if possible, with project, which gives the error). Do not forget to tell also runtime error code (or other final message) and details about your system (NT/9x, Delphi4/5). Thank You.
  • Applet Launcher - fixed menus in Win95 and Run Time error after refresh info. Small delay made for appearing the launcher on screen. No appearing if left mouse button is pressed.
  • Added "third party" supplement - HfUtils by Howard Flank (set of useful string utils).
2-Jan-00 XCL v1.71 and XCL Wizard v0.8 (almost functional) announce:
  • Small changes in XForms.pas and XAligns.pas. Improving of the aligning. Tested for all samples.
  • Small changes of XCustomForm and definition of some classes in XLib.pas (for XCL Wizard).
  • Added method ClearItems for XCombo.
  • Added functions IndexOfCharsMin( S, Separators ) and Parse( S : Separators ) to XStrUtils.pas.
  • Small change in Inspector: to rename control now double click on title bar is used, or Ctrl+R.
  • Inspector now shows combo boxes for events in Events tab, and allows creating of new events, jumping to assigned ones or choosing among existing methods to install as event handlers.
       It is possible to use/create as event handlers only methods of the form itself, eigher setting an event handler or overriding method.
       Like in VCL, new event can be created by double-clicking on combo-box with no handler assigned to event. If event is already assigned and combo is not empty, double click leads to jump to the event handler body in IDE editor. Like in VCL, all empty handlers are removed when unit is saved. Also it is possible to remove single (empty) handler by pressing Delete in a combo (or by entering here empty string value).
       With adding this events automation, XCL Wizard becomes almost fully functional and You can start your own XCL projects developing now in VISUAL environment. The most serious restriction is in incompleting of XCL Palette (i.e., writing initializations for constant arrays in XLib.pas). IF ANYONE CAN SPEND A TIME TO DO THIS EASY WORK, give me know please. I have a lot "to do list" of other things what have to be completed to claim that the Wizard is finished. Now only three items are available on palette: XLabel, XBevel and XPaint
1-Jan-00 XCL v1.70 and XCL Wizard v0.7 (semi-functional) announce:
  • Very small changes in XStrUtils.pas:
    • New function CopyTail( S : String; Len : Integer ).
    • Function IndexOfStr returns -1instead of 0, if string does not contain given substring.
  • XCL Wizard Inspector can now rename objects of form and form itself, making correspondent changes in a source of unit (directly in IDE editor, if the source is now loaded into editor). There are no renaming of form type, but it is possible to do this manually (at least, XCL Wizard understands, that form can be of any type, not only XFormN. Only You have to do is to change <FormName> in signature to <FormName:NewFormType> and manually replace all references to old type into new one). Later I shell provide command to rename type of the form automatically.
       Renaming is implemented by clicking of mouse left button on caption of Inspector or pressing Ctrl+R and editing of name in edit box, appearing in title bar. A lot of checks are performed to validate new name before accept one. E.g., name must be an identifier, not matching to reserved words, names of other objects, methods or fields of form (including inherited ones).
  • XCL Wizard can now generate code for XCL form, making changes directly in IDE editor window, which is containing unit with the form declaration.
       Code for declaration of objects in form class definition is generated every time with dropping new objects onto form from the Palette or with deleting selected objects. (So, if You have already designed form in existing XCL project, just, drop a lebel, and remove it - to complete form declaration). And declaration of new objects is placed first time in public section of the class before all other sections. Any time You can move any of such objects to any other section (private, protected), which You prefer.
       Code of overriden method CreateCustomObjects is generated in following cases:
    • when unit is saved on disk;
    • when project is compiling;
    • when designed form is closing manually;
    • when unit source is closing in IDE Editor (also form is closing in that case).
  • So, XCL project, created with XCL Wizard, could now be compiled and executed. But current version is yet restriced with its capabilities:
    1. There are no event automation and tab Events is not yet complete in Inspector (with work is a primary task for implementation).
    2. If your project contains more than one form, You have to add code for creating and showing additional forms into dpr-file manually.
    3. There are no automatic add-ons calls in dpr. Only silent adding of references to add-ons with auMust usage style into uses clause of the unit is implemented.
XCL v1.69 and Wizard v0.6 announce:

- there are a lot of changes, bug fixes, improvements etc. listed below. For those of You who prefer brief description, I can say it shorter:

  • new class ZQueue
  • new add-on UseBtnRepeats
  • new control XNumEdit
  • main fixes and improvements in XCombo, XListView, ZTrayIcon, XEdit, XAligns.pas, XWindows.pas, XForms.pas, XApplets.pas
  • other fixes and imrovements
  • XCL Wizard now compatible with D4 and D5 and working more stable
  • Inspector is fixed and improved and now is keyboard-friendly
  • Designer is fixed and imroved and now is placing its icon on tray

And now more detailed:

  • new class ZQueue (in XQueues.pas), which is intended to provide asynchronous access to queues (data structures with FIFO order organization). Now XCL Wizard is using the ZQueue to delay requests to Designer from Expert part, if such requests can not be performed immediately.
  • aligning a bit improved to allow aligning on too small parents. Also realigning now called not for control itself, but for its parent - this leads to allow realigning of controls with autosizing after its automatic resizing.
  • added new add-on UseBtnRepeats, which extends XCustomButton (and its descenders XButton, XDropButton, etc.) behaviour - if Repeats property is True (default), than pressing of the button (by mouse, by keyboard this worked without the add-on well) leads to repetitive clicking of one (about 5 times a second, if it is possible). Repeats property now False by default.
  • very small change in XCustomButton. Now it is first changes its visual state when pressed, and then calls OnClick event.
  • numeric property values with esIncDec in editing style of the property (in XLib.pas) are now editing with new control XNumEdit. This last has buttons looking like < and >, which can be pressed to decrement/increment number. Also XNumEdit provides bounds checking and filtering of input (testing may be not finished yet). It is also possible in Inspector to use CTRL+LEFT/RIGHT arrows to decrement/increment property value.
  • esAutoSelect style fixed for XEdit. Now it is actually selects its content on enter if such flag is turned on in Options.
  • small change in XWindow: flag SWP_NOACTIVATE used in SetWindowPos call to prevent activating window (and form too) every time when its bounding rectangle is changed.
  • fixed (for XTimers first of all): AppletTerminated now is True on exit of message handling loop (Applet.Run). The most of references to "AppletTerminated" are changed to "not AppletRunning" therefore.
  • ZTrayIcon implementation changed a bit to allow removing all installed icons from taskbar (automatically) when applet is exiting (when receiving WM_CLOSE by applet window). Now only one message handler is created for total set of icons installed. And address of the ZTrayIcon object is used as its UID to obtain destination the object directly from notification message.
      Previous implementation was wrong, because when ZTrayIcon was destroyed, its message handler could not be removed from message handling chain. And this could cause fatal error 216 if tray icon object was destroyed before closing the applet.
  • fixed problem with turning XCL mode on when Delphi is starting with reopening of last project, which is XCL. Also, all itsXCL forms are opening in form Editor for all opened units (I know this is not correct for all the cases and later state of all forms - opened/not opened - will be stored and used in reopening project).
  • fixed suddenly appeared problem with XCombo - last fixes of XListView and its add-on were lead to a bit durty influence to list box, used in XCombo. Now combo item can be choosen normally with mouse, since Property Inspector allows edit properties in combo-edits (if there are ones).
  • fixed for XCombo: setting ItemIndex with changing Text correspondently, ignoring mouse while choosing item by keyboard, activating when dropped and others.
  • XCombo: when it is dropped down, makes current value visible. Method MakeCurItemVisible added to XListView.
  • fixed for XListView setting HScroll.Position to 0 on entering to edit (XListEditExt add-on).
  • I decided to represent and edit boolean values in Inspector as XRadio which actually are not radio boxes, but functioning like check boxes. It is looking a bit another than check box (rhombic check), since this is easy to recognize visually.
  • small fix in XRadio painting (restoration of OldPen was forgotten).
  • UseFontRotator called in XLib dll, so it is possible to control font rotating at design time.
  • fixed CanFocus = True for some controls, added virtual method MembersCanFocus into XControls and total concept of focusing and tabulating is revised. Now CanFocus must be True only if control itself can be focused. Independently from this, its children are looking first to find control, which can be focused. Since this, even if control can not be focused (like XPanel), its children therefore can.
       At the end I found, that these changes are not sufficient to provide wished keyboard tabulating between only desired controls in Inspector, so I have overrided GotoControl and WndProc methods for Property Inspector form to force tabulating between Inspector's controls as I suppose must be done to make this easy.
  • now Inspector allows easy navigation through its controls and tab sheets and editing using keyboard. I tried to make interface most clear as it is possible. And I think, I have succeed. Switching between form editor and Inspector is now available using F11/F12. After switching to Inspector window by keyboard (F11), it is becoming non-topmost and autohiding of the Inspector window is turning off. Walking through lines of properties in Inspector is done by up and down arrow keys. If current control is radio or check box, it can be switched by ENTER or SPACE. Also, current combo box can be dropped down by ENTER too (and closed up by ESCAPE). Key TAB is used to switch between tabs in property Inspector (Properties, Events, Objects, Addons). It is possible in 'Objects' tab sheet to select single control with ENTER or group of controls with SPACE, walking through by usual way (UP, DOWN, HOME, END, PAGEUP, PAGEDOWN). Certainly, all these tasks can be done with mouse too.
  • When walking through properties in Inspector with keyboard, scrolling is smooth.
  • properties with esConfirm style of editing now assigning to new value only by pressing ENTER key or when edit control is leaved (e.g, by UP/DOWN arrow keys).
  • definition of XAlign enumerated type is changed (in XForms.pas, XLib.pas) to fix aligning from the Designer.
  • I have installed Delphi5 (no bugs with working yet, but installation very warp). Finally, I found that at the end of the story, Borland finished CPU window. And debugging becomes very power. Feeling, I will migrate here.
       Also, after working with D5 about 12 hours, I pressed F1 first time and was gladly surprized that help window now is taking into consideration real desktop bounds and does not resizing every time, when new topic is selected, so I need no move it manually every time over screen. I like it...
  • it is not necessary now to have any Unit1.pas in $(Delphi)\Projects directory to create successfully new XCL project/add new units and forms there. If You try to use File|New form, New..unit etc. in XCL mode, the Wizard now shows message dialog with explanation why this operation is cancelled.
  • fixed problems with opening/reopening/closing XCL projects in D5 version of the Wizard. Any attempts to open other files than dpr or pas are cancelled now with a warning. This does not mean that it is not possible to load and edit pas files from other projects. But working with packages can cause problems, so I decided disable its in XCL mode.
  • When button is pressed on the XCL Palette, currently inspecting form is bringing up front.
  • XCL Designer now invisible and places its icon on tray. Popup menu with single item Exit is assigned to it. But I do not recommend to exit the designer excluding extraordinal cases.
23-Dec-99 XCL v1.68 and Wizard v0.5 announce:
  • bug fixed in XListView with inserting new lines using Insert method (number of visible rows was not increased). Small change in XListMouseSel to provide selecting of items with first mouse down event (earlier two clicks was needed, first - to make it focused). Also XListMouseSel now ignores clicks with Ctrl and Alt buttons pressed, and passes all mouse down events to DoMouseDown method of XListView.
  • new XMultiList class added. Derived from XListView, it allows to select any items of the list simultaneously, even not neighbour for each other.
  • new class XTree (with XNode) to be able to work with trees in XCL (without visualization - trees in memory). Made as functional, but allow to derive new pairs of its descendants to improve these (by defining node creation method CreateNode as a virtual one). Also XFastTree (with XFastNode) to work faster with huge trees.
  • small fix in XForm/XWindow to prevent erroneous working with walking through controls while destroying of form. FDestroying in XWindow is moved to 'protected' section, and tested in GotoControl method in XForm.
  • small fix of XButton: in create its title (implemented as XLabel) had AutoSize=True by default, since there were some problems with centering button caption. Now Autosize is set to False.
  • XCombo is improved a bit (property EditOptions, ShowWidth, OnEnter/OnExit, OnDropDown/OnCloseUp, OnEditChanged events).
  • In new version (0.5) of the Wizard some problems with interacting between its three parts are fixed (Saving of form, showing of ones, renaming etc.)
  • Property Inspector (in XCL Wizard) can now show qualified (with dots) properties and checkable flags as expandable nodes of tree. All changes of bounding rectangle of the [selected] control during moving / sizing it on form are indicating in Inspector now. Also the Inspector can now be used for main its purpose - to change property values. New tab sheet 'Objects' is now representing the objects of inspecting form as a hierarchical tree. All selected items in tree are always selected on the designed form and otherwise. So, it is now possible to select controls easy if accessibility of those ones become difficult (e.g., in reason of too thin size or negative positioning coordinates).
  • To-Do list for Inspector:
    • Editing of Boolean values. I would like your suggestion how to do it better (but not suggest me boring combo like in VCL).
    • Renaming of objects (bold because this step [only] must be done to complete Inspector to totally functional tool). Object Name is not 'published' property of class/control in XCL. So, editing of it in the same style can not be implemented. I plan to use special edit procedure to do it. Your suggestions?
    • Editing of numeric (Integer or Cardinal) properties with Increment/Decrement buttons.
    • Navigation through property tree using keyboard.
    • Easy focusing of correspondent control when property name is clicked (in left column).
    • Implementing 'Add-on's' Tab in Inspector.
    • Showing and editing of events. This task is very close to next step - code generation.
  • Also I plan to make some enchancements in future, which could make XCL Inspector even more power, e.g. following:
    • Buttons 'Reset property to default' - for some properties.
    • Highlighting of properties changed from default to custom values (e.g. by Red font) - to show what properties need in special code to set its initial values in CreateCustomObjects.
    • Some floating tooltips.
    • Editing of some properties in resizeable memo.
    • Providing ability of editing control chars in properties of type 'String' (e.g. #13).
    • other... Your suggestions?
15-Dec-99 XCL v1.67 and Wizard v0.4 announce:
  • XEdit drawing is fixed (first, this was wrong a bit, when its height was greater then font required, and second was a bit incorrect when caret was positioning to the end of a large editing text).
  • XEdit and its add-on XCaretShower are fixed with destroying the edit control and/or terminating applet correctly if blinking of caret is on.
  • XEditMouseSel fixed finding the edit control on notebook pages and other parents, which are not usual children of its own parents.
  • small fix in XCombo - now it has no border (like XEdit).
  • also XCombo fixed to realign its content when its size is changing. And with changing algorithm of calculating Showing property for XControl (now only if all parents without ParentForm are Visible), it is now looking well after realigning on invisible form.
  • XScroll, XScrollBar and XScrollBox are moved into separate unit XScrolls.pas  (from XControls.pas)
  • now XScrollBox is fixed and makes scrolling of its content more smoothed (most appreciable if contains a number of child controls).
  • another fix for XScrollBox - correct setting of property Position (not by user with mouse, but changing this property directly in your code).
  • new XScrollBox descendant is added: XScrollBoxEx. This last can notify (by event OnChangeClient) about changing its client rectangle in cause of resizing or appearing/disappearing horizontal/vertical scrollbar. Also it has additional function ClientRectEx, which returns actual client rectangle, taking into considerations visibility of vertical and horizontal scrollbars.
  • add-on XListEditExt.pas for XListView is fixed (there was a small bug - it allowed beginning of editing by CTRL-ENTER only if mouse was over list box).
  • And now about XCL Wizard:
    • All fixed, changes and new classes above allowed me to improve Property Inspector and it can now show property values as a set of edits and combo - in its current state.
    • To improve it further, I need in XChkCombo (combo-box with XChkList dropped down, which also have to be created).
    • Version 0.4 of Wizard has changed only XCL Designer part, so if You already downloaded v0.3, You need only to download changed XCL files ( - 52K) and new version of
  • All samples are tested again with new version of XCL and new version of (~63K) is also available on my site.


14-Dec-99 XCL v1.66 and Wizard v0.3 announce:
  • new XCombo control (self-painted) in XCombos.pas. Its drop-down list is implemented as a separate form with XListView, which is appearing on top when combo is dropped. Some changes made in XList (XLists.pas), XListMouseSelect (XListMouseSel.pas) to fix MultiSelect property and prevent event handling after life-time of the control (when drop-list form is disappearing, it is destroying and can not handle messages). One problem still not solved - when drop-down list is popping up, caption of the form with combo becomes deactivated. To prevent this I only can now advise to handle message WM_ACTIVATE by your form and return FALSE to avoid repainting of the title bar, if a combo is now dropped down. Later I'll documenting this more detailed.
  • new XGifs.dcu for Delphi5 is included.
  • some small changes made in XScrollBox/XScrollbar/XScroll (in XControls.pas) to fix annoying behaviour of those controls, when content of XScrollBox is changing.
  • XImgButton is fixed with calculating of the DesiredSize. When default font size was too large, this could lead to infinite looping in aligning of autosized XImgButton. I found this while testing Property Inspector in my Windows98 with large fonts installed (usually I am working in WindowsNT4 - much faster).
  • Property Inspector of the Wizard can now collect and show names of all 'published' properties of currently selected object on a designing form. And even of all properties with the same names and types (if presented ones) for group of selected objects.
  • new Wizard version is still non-functioinal and provided only for testing purposes.


11-Dec-99 XCL v1.65 and Wizard v0.2 announce:

First some news about Wizard project:

  • It is the first time, when I was need a visual control as a child of non-visual on form. So, I had to fix a couple of methods in base classes - in XAligns.pas and in XForms.pas to force it working in those new situation. In result, I created new class XDsgnNonVisual for visualization of non-visuals on designed form (like visualization of TComponent inVCL at design time).
  • Since designing form (XDsgnForm class) is always using now XMFCControl descendants, I had to fix some problems with hooking MFC Control messages (to prevent its from responding to mouse/keyboard if it is not desirable). Now dots in corners of selected controls/non-visuals are created using CDsgnPaint (derived from CPaint, which is MFC-based), and this allows to make such dots on top of all other controls (including MFC). A bit slower dragging, then I believed, though...
  • The proto-Inspector window is added to the XCL Designer part of the XCL Wizard. No content, but only appearing/disappearing (using F11 and command View|Object Inspector). Also auto-hided (like a Palette, but optional) and aligned to left or right edge of screen. With non-standard title bar.
  • More careful interacting between Designer and Expert parts, including some error handling.
  • Therefore (unfortunately) two problems was not solved:
    • sometimes Designer is initializing too long and could not catch and handle requests to open forms. Later I will solve it by creating real-time queue of notification requests. Now it is possible to open designing forms manually for given units (F12 or View|Toggle XCL form/unit).
    • If Delphi is started and last project was XCL, the Wizard can not recognize it and switch to XCL mode automatically. Have to File|Close All and then File|Reopen the project to do so.
  • And, concerning v1.65 of the XCL itself:
    • Solved problem with aligning of controls (and calculating of client/control rectangle) in a captionless windows (forms).
    • Fixed CComboBox (by TimSlusher). And (with my small change), it is now showing its content without problems.
    • New property ImpulseStage added to XTabs and XTabbedNotebook. So, it is now possible to set how current tab will be larger than other tabs (100-400%).
    • Also some small changes are made in some base classes in XVisuals, XWindows, XForms, XControls, XMFCControls, XAligns units.
    • I have temporarily excluded version of XGifs.dcu for D5 from the archive. After some chahges in v1.63 it must be incompatible with current XImages and XGraphics units.


9-Dec-99 XCL v1.64 news (9-Dec-99):
  • I decided to publish XCL Wizard in its current state. It is only pre-alpha and non-functional version (0.1, for D4 only - sorry). You can install it and play with creating of new XCL project, adding new forms and units to it, dropping of XLabel and XBevel controls onto designing form. Though the Designer can save and than restore state of the form (with its controls), there is not possible now to use it because there are no code generation. Therefore, try it and if something wrong with installation, please report.
  • Take into consideration also, what it is desirable to download also with new version of XDsgnControls.pas to provide correct working of the Wizard.
  • I decided to publish the pre-alpha after finishing working under IDE editor notifications and solving of some problems listed below:
    • Already this version can get notifications about saving of the unit and save/move XCL form definition file into the same directory (with renaming it appropriately).
    • And, now it is not necessary to close form visual editor to save its state. It is saving together with the unit - thus is - before compile, and before closing of project too.
    • Also, forms visual editor opens forms automatically when XCL project is opened/created.
    • Problem of bringing of form visual editor window up front is solved. It is bringing to front when F12 is pressed or Toggle XCL form/unit IDE menu item clicked or if button is pushed on the XCL palette. (You may easy get IDE editor foreground again by clicking on big arrow in the standard IDE palette, which is non-functional in XCL mode, but yet visible).
    • Modified version of XDsgnForm (in XDsgnControls.pas, has fixed dragging of selected groups of controls.
    • And others, which I find difficult to list in total.
  • Oh, nearly forgot: You need to have Unit1.pas (even empty) in your Delphi default projects directory (usually $(Delphi)\Projects) to create first XCL project successfully.


7-Dec-99 XCL v1.63 (7-Dec-99) new:
  • Since XCL is going to become VISUAL , some new XForm descenders are added: XCustomForm (intended to become later basic form class for other forms, which could be created and edited with XCL Designer) and XDsgnForm (which is derived from XCustomForm and is using in XCL Designer to preview custom form at design time. This last allows selecting of its child controls and later non-visuals, drag it with mouse and resize it).
  • CCheckBox, CRadioBox, CComboBox, CListBox by Tim Slusher are added (XMFCControls.pas).
  • Some small changes made in several basic classes. Some new utility functions and classes added (mainly into XStrUtils, such as Int2Hex, Hex2Int, IndexOfStr). New useful form class is added - XTooltip in XTooltips.pas.
  • Due some changes in several units, suggested by D5 user Vitaly Krivosheyev to avoid some warnings similar '... Overriding virtual method 'XScrollBar.Initialize' has lower visibility (private) than base class 'XCustomBevel' (protected)', D5 version of XGifs.dcu now may be incompatible with v1.63. So, if You use D5 and want to use XGifs, install new XCL version into another directory.
  • Fixed bugs in XNamedTags.pas with incorrect working with first (non-named) tag through usual property Tag:Pointer simultaneously with named tags.
  • Soon first pre-alpha version of XCL Wizard is coming. Here I only want to report about current state of the project. XCL Wizard is consists of three main parts:
    1. XCL Expert, which is integrated into IDE and adding several new menu items (such as Form|New XCL project). The Expert can notify XCL Designer about all important events and perform some requests from the Designer. (Status: implemented almost at all - excluding editing of the source).
    2. XCL Designer, which is a standalone XCL-based applet, interacting with the Expert using global events and file mapping objects, and containing
      • XCL class Palette (now implemented as autohiding top-aligned toolbar, activating by mouse on the top edge of screen);
      • XCL Property Inspector (not implemented yet);
      • XCL Form Visual Editor (is implementing now).
    3. XCL Class Library DLL, containing all XCL classes (compiled) and definitions of its design-time behaviour and design-time editing properties lists. This last part of XCL Wizard always will be opened and distributed with source. Actually, placing of definition of newly created class into this dll and recompiling of it is equivalent to registering process of components in VCL.
  • Now it is possible to drop controls (only XLabel and XBevel are tested) onto form at design time, move it, resize it, select and select by group, delete, switch to parent (with ESCAPE). Form is successfully scanning its properties and all its children and store form definition into .xfm-file (very similar to .dfm - text format). When unit form is opened again, these definitions are successfully loaded and all form children are restored with its properties (and form properties too).
  • New XCL project can be started with File|New XCL project menu item or by reopening project. created by that way (project is recognizing by small text signature in project's .dpr-file). XCL Designer is starting and running only while working with XCL projects. In this mode, standard Object Inspector is hiding, and calling of Object Inspector (by F11) will be (later) readressed to XCL Property Inspector. Standard palette now is not hiding (and I do not see reasons to do this so urgently - it is not affecting XCL forms, because for IDE, XCL forms are just external files - not Delphi Forms).
  • And what about TO DO: I am going to make generating of code after making of Property Inspector. What code will be generated: initialization form code in protected method CreateCustomObjects (and may be finalization - in DestroyCustomObjects); new event handlers by entering names or double-clicking in Property Inspector; creation of forms operators in dpr-file; calling of add-on units there; filling of uses list of dpr-file to allow calling of certain add-ons in dpr-file.
       Already now I made some efforts to make creating of form objects and initializing of its by not too much code.
       Also, definitions of classes and properties allow to provide additional functionality of controls at design time. E.g.,
    • initializing of control first time when it is creatied (allows assigning initial Caption for labels and so on);
    • defining drop target, when some new object is dropped onto the control at design time (from the Palette) - for XTabbedNotebook, XSplitPanel, XStatus, this will allow to drop child controls to members of aggregate controls, not to theirselves;
    • defining activation function for control, which can give answer, is control will handle mouse/keyboard events by itself or no. I think this will be very useful to allow adjustment of XSplitPanel, XStatus, XGrid at design time using mouse;
    • protecting of certain properties at design time from changing of the real objects and therefore providing its editing at design time (e.g., Visible property, styling properties for windows and forms).
    • already now it is possible to code constant flags (such as WS_, WS_EX_, CS_ for window styles, clXXXX for XColor property) using mnemonic identifiers instead boring hexadecimals.
  • This not the end of a story. Other detailes will be added with first pre-release of XCL Wizard. Very soon.


25-Nov-99 XCL v1.62 (25-Nov-99) new:
  • New control XHysto (Self-drawing, i.e. derived from XBevel <- XCustomControl and needs XCanvas). Allows graphically represent set of mesure values (as pulses), which could be dynamically changed. Number of different mesures can vary and not restricted. If number of mesures is equal to 2, mode TwoDirections is allowed. In that case TwoDirsBase can be set (in percents) to adjust zero line, from which pulses are dancing (eigher TwoDirsBase can stay 0 and recalculated automatically).
    • Capacity of banks to store values for each mesure by default is 1000 and can be changed. Eight different colors by default are set to represent each measure pulses. And it is possible to set custom colors for every mesure graph.
    • By default, pulses are fate and Look3D on. It is possible to change PulseWidth ( >=1 ), PulseInterval ( >=0 ) and Look3D to adjust appearance of pulses.
    • By default, Direction is hdRight. And can be changed to hdLeft, hdTop and hdBottom to set side of control, from which new pulses are appearing. To change side, from which base line is calculated, set Inverse to True.
    • Also XHysto can be Transparent.
  • You may look for Sample16Hysto project in samples set to watch new control in action.
  • Bug fixed with autosizing of XCheck. When it was aligned, its resizing caused constant realigning which caused resizing again recursively and so on. I will look if this bug is located in other autoresizing controls.
  • Now I am starting great project named 'XCL Wizard', which must make XCL programming visual again. It will contain expert module, integrated into Delphi IDE, and XCL-based applet with XCL class inspector, XCL form designer and XCL classes palette. Wish me every success which possible!


23-Nov-99 New v1.61 contains mumerous of fixes and changes. Starting from v1.61, all samples are stored separately in a single archive (now ~104K). ALL samples are tested in Win98 and WinNT for both D3 and D4. New message handling (introduced in previous release) required very large number of changes, so I suggest You to download new version in total. Other changes are following:
  • XMenus are causing access violation or infinite looping in D3 when applet is finished (may be my D3 version slightly bugged, under D4 all OK :o ). So I have inserted TerminateProcess into finalization section of XMenus unit (only for D3). You may try to remove it (just by commenting).
  • SaveIconToStream fixed for NT (now it is saving only in 16 or 256 or 2 colors mode).
  • Finishing of applet with several forms caused access violation, stack overflow and some other errors. Fixed.
  • My suggestion not to call UseCanvases( because it is called automatically when first control is created) was not good a bit. Now it is good therefore (even if form's window handle is created before first control - :) ).
  • Some dummy objects created only to store events to extend object's interface with add-ons, replaced to global variables of correspondent type ( e.g., GlobalFormsManager.On_CreateControl => GlobalForms_On_CreateControl ).
  •    Unfortunately, v1.59+ (and may be several previous ones) are found too incompatible with Delphi3. So, now v1.60 is publishing, which has set of fixes for these.
    • Declaration of Style, ExStyle and ClsStyle properties in XWindow is changed from cardinal to DWord - this works good both in D3 and D4. Other (Integer, LongInt, cardinal) require additional adaptations either for D3 or for D3.
    • Directive reintroduce, which is available only in D4, changed to override for D3 (staying reintroduce for D4).
    • In ZFileChange declaration of Execute as procedure is corrected to function as it is in ancestor (ZThread). D3 seems to be more pedantic then D4.
    • In XShellLinks references to ActiveX and comobj units are deleted to reduce compiling time (unfortunately, ole2 still needed, so command Build All is very long, especially in D3 :( ).
    • Declaration of VK_STAB is changed in XMFCControls from cardinal to DWord.
    • May be I forget to list here other similar changes, but all samples are tested and needed changes made to provide correct compiling and working of its.
  •    Also, some changes are made in XCanvases.pas to initialize canvas management only if UseCanvases is called (I could not find out, why XCanvases code yet debugged in MFC-projects even without references to it - in Delphi3). And some changes are made in modules, using XCanvases (XControls and XCanvasObjects).
      Therefore, You do not need to call UseCanvases in your dpr. It is called in units, acutely using XCanvases (two above).
  •    Another trick is in changing message handling methods in XWindows/XApplets. Now target window object for message is calculated by calling GetProp for window handle. Correspondent window atom is set when window handle is created and removed during its destroying. Idea is got from ACL by Bokovikov Alexander. Onother changes in that direction will be made later (e.g., to allow use standard directive message; to easy override some messagehandlers).
  •    Something can be yet wrong with MFC-based controls. At least, problem of creating desired CPanel is not solved yet. I will look for it nowadays.
17-Nov-99    XCL v1.59 news:
  • ZDirList class in XDirLists.pas. Intended to read directory list (files and subdirectories). Not yet finished - has no sorting.
  • Several bugs fixed in XNamedTags.pas. Finally named tags are tested and ready to use.
  • Two new functions in XStrUtils: AnsiUpperCase and AnsiLowerCase. New function DirectoryExists in XFileUtils.pas.
  • Fixed bug in LoadSystemIcons method of XImageList class.
  • Fixed bug with calculating SectionLength in ZIniFile.SetSection.
  • Added unit XShellLinks with useful function ResolveLink, which allows to extract full information from existing .lnk-file (path, arguments, working directory, icon location, show command). May be later function CreateLink will be added here.
  • Added unit XWindowUtils with two useful functions: GetSesktopRect and FindWindowByThreadID.
  • Added function XFileTimeCompare in XFileUtils unit.
  • New small applet published to demonstrate XCL advantages - freeware Launcher Panel. It is created by me to avoid istalling of Active Desktop on my PC and represents right-side auto-hiding launch panel like it is done in A.D. It is very easy to use (but not too easy in configure). I decided to provide commands Open for folders corresponding to panels and Refresh instead of embedding auto-refresh capabilities. It is also possible to open in Notepad configuration file (Configure) to rearrange buttons and folders manually. This launcher does not support drag-drop and may be looking more poor. But it does what I want- it launches any applications and folders. If You are intersted in getting source for studying purposes, I agree to send it by e-mail with no restrictions.
12-Nov-99    XCL v1.58 news:
  • ZGifDecoder and ZGif classes by Vladimir Kladov. ZGifDecoder is based on freeware TGifImage component source from RxLib and adapted to XCL needs (descendant of TObject, no VCL bloats). Improved in direction of correct showing of any gif by calculating exact transparency mask during loading of gif image. ZGif is a descendant of ZClip (XImages.pas) and contains all for drawing frames of gif animation. It uses ability of ZGifDecoder to store exact mask of transparency to show correctly any gif's. Sample16(GifTest).zip contains sample of showing gif, loaded from hard disk. Soon XGif control will be added to show gif animation in separate clip control.
       Gif classes are provided only as compiled dcu-files for Delphi3 and Delphi4. Source of XGifs.pas is only for XCL members.
  • Changes in XImages.pas made to create gif classes above: functions DrawBitmapMask, DrawBitmapMaskMask, StretchBitmapMask, StretchBitmapMaskMask; property Bits in ZDIBitmap and ZBitmap to access pixels array directly (by Vladimir Kladov).
  • Bug fixed in XStreams.pas with reallocating memory in ZMemoryStream. Method CopyFrom added to ZStream and in ZMemoryStream it is overriden to copy data from one stream to another memory stream faster. Function Stream2Stream now obsolete and calls CopyFrom method for destination stream (by Vladimir Kladov).
  • XVisual class: virtual function HandleAllocated added. XWindow class: function HandleAllocated is overriden to return True if window is already created. XMFCControl class : function HandleAllocated reintroduced to return True if handle is allocated for its window instance (by Vladimir Kladov, requester Tim Slusher).
  • ZStrList class is now obsolete and ZStringList should be used instead. ZStringList is descending from abstract ZStrings class. CMemo is improved to manipulate with memo strings using CMemoStrings class, derived from ZStrings (by TimSlusher).
  • XWindow class: code for notify all windowed child controls added (by Vladimir Kladov, requester Tim Slusher), when WM_COMMAND message is arrived (all windowed children are receiving CM_COMMAND in that case). CEdit, CMemo are handling CM_COMMAND message and have now additional events OnChange, OnUpdate (by TimSlusher).
2-Nov-99    Reading news, I found another API programming library by Alexander Bokovikov. Ideology of this project is slightly differing from XCL, but it gives even more compact executables with even larger set of controls. The total library is made by the single person - A.Bokovikov. Very recommended. It is enough documentation there, but look at source - it is written very professionally. Some annotations could be in russian on the page, so download (~15K), (~11K) and (~2K) from his page.
31-Oct-99   v1.57 news:

   Those of You, who have already version 1.56 installed, can download, containing only files, changed/added in v1.57.

27-Oct-99   There were many events in my life from publishing v1.55 at 18-Oct-99 (crush of FAT32, Windows98 and Windows NT on my PC, reinstall of Win98, working under CButton together with Tim Slusher, renovation of my new flatroom, finishing of derivatives with my students, upgrading of my TBaloonHint and CloudHint components, 1st burthday of my son), so this decade I could not even to update my XCL page.
   New in v1.56: CButton. This is only the first (be precisely second, but taking under sonsideration how much it was hard to do...) signs of the series of MFC-based controls. And I glad to see, that Tim like this job and going to do even CRichEdit class in near future.
   Really, CButton was very important to solve problems with including of MFC-based controls branch into XCL (tab-stops, focusing,mouse/keyboard handling and so on, these all tasks had required to make serious changes in XWindow, XForm, XControl and in XMFCControl/XMFCWindow classes).
   New version of XMfcControls.pas contains also CEdit and CMemo, but these both not yet finished, and we all will wait for Tim Slusher to test its.
   Also, v1.56 contains finished ZFileChange class (in XFileChange), that can notify about changes in folder and folder subtree.
   Those of You, who have already version 1.55, can download smaller archive, containing only files, new in v1.56.
18-Oct-99   New in v1.55: ZPicture (abstract), ZClip (abstract), ZDDB, ZHiBmp, ZDIBitmap, ZBitmap, ZIcon classes in XImages.pas. ZDIBitmap and ZBitmap allow storing and painting DIB bitmap even without of creating of handle. After painting on the bitnap it is possible to free up all allocated GDI resources (FreeResources) and paint such bitmap further directly without GDI ! It is possible to have numerous number of such bitmaps and do not care of resource eating more...
   Also: fixed bug with leak of resource in XCanvases.pas. It could not appear before starting of bitmap classes foundation.
10-Oct-99    Unexpectadly found very big bug in version 1.53, so I am hurry to present version 1.54 with XVisuals.pas corrected (reason was in last correction, which was made to prevent incorrect calculating of client rect when part of visual object is invisible. Correction was not finished, as it is found now).
   Also painting of XBevel, calculating of ClientRect for XGroup are changed.
   Added: XImgLists.pas with XImageList (similar to TImageList in VCL, but easier), XImgButton in XImgButtons.pas (similar to TBitBtn in VCL). ZThread in XThreads (by Tim Slusher) is included also (but did not finished yet).
6-Oct-99    XCL v1.53 changes:
  • First fully functional utility made using XCL - ResourceMeter 1.0 (60K, 30K after packing with UPX). ResourceMeter can be used to show Free GDI or/and User resources (only under Windows 9x, for NT this is not urgently). Full project source of ResourceMeter is included as Sample13 into downloadable archive. And for users only, it is announced at new part of this page - Applets.
  • Working under R.M., two changes were made in XTrayIcons.pas. 1st, fixed bug with assigning value to Tooltip property. 2nd, when icon is adding to tray, it is ensures that Applet.Handle is not 0 (if 0, Applet.CreateAppButton is called).
  • Also, small bug fixed in XVisuals.pas to paint correctly overlapped windows and windows, some parts of those are not at screen.
  • Also, unit XInfoSystemResources to get info about free GDI, User and System resources under Windows 9.x [only!] is added (based on freeware TSysInfo component by Sight&Sound, Slovenia .
  • Several useful functions are added: CopyEnd and IndexOfChar in XStrUtils.pas, GetStartDir in XIniFiles.pas.
4-Oct-99    XCL v1.52 changes:
  • XNamedTags.pas add-on. It is possible now to use not just Tag : Pointer property but a set of named tags (for XControl descenders only). E.g., SetNamedTag( Control1, 'Name', ttString, 'Control1' );
  • Applet.ProcessMessages added.
  • XGauge (like TGauge in VCL but non-flickering) and XGaugePercents are added.
  • Changes of XStreams and XFileUtils by Tim Slusher.
  • Remeber new address of XCL page:
3-Oct-99    It is very important. XOOM server mainly is very good for me (and I hope for You too). But sometimes it can low down its performance. There is now such period of unstable working. It may long weeks or months, no concerns. I think, XCL may return there later. But now I decided to find some other good servers to make XCL page accessible. And to be independent from its location, I got universal domain, which always will true. Bookmark this address, and if it is not working, just e-mail me and I will redirect XCL page to another location.
   Now I place on my 'home' page on XOOM a page with list of opened mirrors of XCL page. Try different servers, and if some of these are not working or have too bad accessibility for You, please report me. You may use my old e-mail to send me messages, or one of two new: and
   I am also continuing working under documentation. Soon I will reorganize slightly some of html's into frames to divide too big files onto several small ones.


1-Oct-99    Some new funny things are added to XCL: XJustOne.pas, XJustOneNotify.pas and XTrayIcons.pas.
   Also some changes made in XStreams.pas, XStrLists.pas and XLists.pas.
29-Sep-99    Good sounds! Another Delphi developer suggested his assistance in creating of XCL. New version of XCL (1.51) contains changed XFileUtils.pas, XStrLists.pas and new XStrings.pas unit with new classes ZStream, ZFileStream by Tim Slusher.
   Also, I decided to open new section - Articles. I will place there text stories concerning XCL. I hope, this part will be interesting for You and useful for me to improve my English.
   I got counter for this week and see, that either your interest to XCL is fading or my host provider XOOM had problems this week in hosting XCL pages. It is would to be so sometimes. In common, XOOM works better for me than others.
   My work under correcting documentation is continuing. I corrected XClass-XVisual-XWindow-XApplet,XForm,XControl-XCustomControl brunch. If You found some mistakes or omissions in docs listed above, please give me know.
28-Sep-99    Guestbook is added to XCL page:
Show Guest Book           Add Message To Guest Book
   I began a great work of verifying and correcting this documentation. I think, several next days were occupied with this one. But this is very important and useful job.
27-Sep-1999    XCL Forum is open at Visit it and leave there your opinions, suggestions, ask questions and (may be, later) get answers on your questions.
   Small piece of code is added to XApplet.Run to unload OleAut32.dll and Ole32.dll at the start of running (if OleUsed property is not set to True). I found that in that case memory volume (shown by Norton as used by applet) is shorter about 1,5 Mbytes.
   Also I think about adding ProcessMessages procedure to XApplet. If it will be used only by developers in their projects, its code will not be added to executable in cases, when it is not called explicitly.
   I have been asked about Tag property again. I think, that adding of 4 byte-sized field to XClass is not too weightly. I will add this.
   I desided to devote a lot of time to verify and complete the documentation. I found that inaccuracies are arise often from repeating of inherited properties, methods, events in descending classes. I think about using <iframe> tag for include pieces of the same text into html, but this will not work in Netscape. If anybody can give me an advance how to do this better, give me know please. At least now, I decided to stop such practice and leave only names/types of inherited properties, methods, events and names of classes, where from these ones came out.
   Last time (yesterday) I announced XCalendar. I forgot to say: it is multiligual and with call SetCaptionsWithLocale it can use user or system (or certain language) locale settings to initialize captions of dayweek buttons. Unfortunately, info what day is first in a week (Sunday or Monday) is not a subject of locales :(.
26-Sep-99    Fixed: Centering labels; Mouse events for controls on inner panels of XSplitPanel; Initial width of XEdit made equal to 64 pixels; function PointInRect corrected.
   New utility unit XDateUtils.pas is added to provide date/time operations. Type XDateTime differs from TDateTime of VCL in represantation of its value. Integer part of XDateTime is counting days starting from 30-Dec-0001 BC, not from 30-Dec-1899 AD, as it is done in TDateTime. For funs, I included function CatholicEaster (from Swags) there.
   New control XCalendar is added. I think it is even more power than TCalendar in Delphi. It can be horizontally or vertically oriented, it is possible to change first day of week (in some countries week is starting not from Sunday, but from Monday), font of buttons can be not the same as for digits (and rotated with Orientation property), day cells can be owner drawn with event OnPaintDay, events OnClickDay, OnClickWeekDay are provided, captions of weekday buttons are customizable and so on.
23-Sep-99    Some efforts are made to provide correct autosizing of XSplitPanel and its successor XStatus.
    As You could see, I added last time method LoadFromFile to XListView. Now I tested it and added SaveToFile as well.
   Also, XIniFile class is added (not tested) to provide easy working with ini files. I think, that my idea of using the same methods to both read and write allows to simplify code in case of fixed set of keys and sections and avoid most of errors when reading and writing of ini-file made in two different parts of code (and to make code smaller, :)), too )
22-Sep-99    New controls XNotebook, XTabs (similar to XPageControl, but with slightly another appearance and behavior) and XTabbedNotebook are added to XCL palette.
   Great efforts made to implement idea (10-Sep-99) of another imagination of internal (previously hidden and now 'member') controls. I hope, this leads to more easy creation of new controls (in future) and simplifies code. Unfortunately, I have not seen that exe becomes smaller but yet not all changes are made.
   Very interesting bug was found in 1.46 release due to code completion feature of Delphi: field FScrollOffset was inserted into private section of XScrollBox overriding existing protected one (inherited from XVisual). As a result, scrolled objects was not painted correctly after scrolling. In current 1.48 version this bug fixed and to prevent its new appearance, special private function intended to get FScrollOffset value.
   Also small bug fixed with finishing applet, containing the XScrollBar control (abundant calls to destroyers of child scrollbars are deleted).
   Very small change made in XListView to fix annoying appearance/disappearance of horizontal scrollbar while resizing in some cases. Also small change made to provide appearing / disappearing of such scrollbars simultaneously if this has to be done so.
   Attempt was made to implement idea listed 10-Sep-99 (above) to assign all the manager's events to dummy handler, but unsuccessfully. Size of exe was increased about 500 bytes even after deleting all the assignment tests, so I had returned the library to its previous state.
   I am planning to vote some next days to clean code and correct documentation in accordance with changes made through the XCL from its publication.
16-Sep-99    Add-ons XListKeySel.pas and XListEditExt.pas are ready. Now lines of XListView can be edited. XListMouseSel.pas add-on is improved to allow selecting a group of lines with SHIFT key. XScrollbox, XCustomGrid and XListView are corrected to provide smooth scrolling in case of single column/row of grid.
   I am planning XCombo on base of XEdit, XDropButton and XListView next.
14-Sep-99    Something similar to grid in VCL (XCustomGrid, XGrid in XGrids.pas) and XListView (similar to TListBox) are ready, so I have updated arhive on my site. The greatest difference of XGrid from its VCL's mirror TDrawGrid is in that it is not understanding fixed cols and rows. I think that the single optional fixed column/row will be added, but no more, and in another class derived from it. XGrid and XCustomGrid in this "light" status are very useful to derive XListView, which does not need in fixed cols or rows. I spent a lot time to achieve discrete scrolling by columns and rows and result is not looking great in some cases. May be, I will try to return to smooth scrolling later or to make this discrete scrolling smooth with special add-on class. And at least, I will return soon normal horizontal scroll of one-column grid (and XListView as well).
   Working under XCustomGrid, I had to make serious changes in XScrollBox (the ancestor) and in XScroller/XScrollbar. But (I hope) this will not affect its own behaviour.
10-Sep-99    The last of add-ons planned before for XEdit, is ready: XEditUndo which allows to undo/redo editing operations for edit control. Add-on XEditMouseSelect is improved to allow selecting with double click and corrected to work properly with scrolled controls.
   Now I am starting the next great editing control XGrid (similar to TDrawGrid in VCL) and XStrGrid (similar to TStringGrid). I am going to derive later XListBox, XTextBox, XTreeView from these grid controls. I hope, that this will not contradict with the basic principle "not to reduce functionality while deriving new control from more power".
   Also I am investigating possibility of some changes in concept of constructing and painting of self-drawing controls. In particular, if it is more advisable to make inner controls to be normal children of combined control (or at least, store it in the same list and do not show in Children[] property for "users"). It seems could allow to reduce code of PaintTo method (or even eliminate it all) for some combined controls.
   Once more possible way of reducing code never leave me in peace. Every examining of the fact that a handler is assigned to an event of GlobalFormsManager, GlobalControlsManager and so on takes about 14 bytes of code. These examinations could be eliminated at all, but only in case if such events are always assigned to something. It is possible to assign them to dummy procedures (at the moment of creating Global...Manager variables) but creating of such dummy procedures and assigning its to events also takes some code. It would be wonder, if I could create the single dummy handler for all events, but these ones has different parameters number often... And Pascal demands that its number and types (signature) were equal.
08-Sep-99    At last! XEdit is ready and XCL v1.43 becomes more power. Now it is not yet understanding undo, but functions to work with it are ready. And this feature will be implemented as optional add-on, as well as for other unnecessary parts of XCL. Even caret showing, selecting with mouse and clipboard copy/cut/paste commands (these all are ready) are implemented as add-ons and can be included or not to your XCL project.
   Also, ones more small bug fixed with dragging the scroller thumb button up/left. Small correction is made in ZTimer.Destroy method. And other small changes, what I do not remember.
05-Sep-99    New cool add-on added to XCL - XResizeAntiFlicker. It eliminates resize flickering almost at all. This mean that with XResizeAntiFlicker turned on, when You move one of border edges of the x-form, all controls, aligned to opposite side of this one, are standing like a stone image and do not try to jump as rabbit.
   And, finally, XScrollBox is upgraded to restrict painting of scrolled child controls with client area of scrollbox. So, it is now done correctly.
   Also, focus drawing add-on is improved and now focus rectangle is non-flickering when other window is moving through it.
   New version 1.42 contains XApplets.pas unit, modified by C.Kok. Thanks to your assistance.
   Other: main page of my Web is simplified and is loading faster.
01-Sep-99    Greetings again. With new version (1.41) bugs with XScrollBar are fixed and now it is correctly scrolling all its child controls (of any level) and mouse events are provided perfectly for scrolled objects. Also, priority for handling mouse and for painting of XScrollBox scrollbars made highest. I had to make some changes in XVisuals and XForms to do all these above.
   When XCL were only in project, I even could not suppose that ScrollBox can be useful. Now I am sure that it is really need to create scrollable self-painted controls similar TEdit, TListBox, T...Grid in VCL.
   You could ask me: why I spend so lot time to develop hard-working self-painted controls instead of improving MFC-based ones? Yes, creating of MFC-based controls is very easy. But my opinion still is that Foundation Classes are bugged, slow, overblotted, and have restrictions which are insuperable without creating of original controls. So I'd like to avoid of using MFC-based controls in my own applets and do not speed this brunch of XCL tree. If You want, You can make it easy and contact me.
   And, my congratulations to all teachers (even English language :-] ) and students with the start of new academic year!


29-Aug-99 - XScroller and XScrollBar are finished. Applets with only XScrollbar component is already about 70K. But this yet smaller then VCL empty form. To show dependency of application size and development time I placed a graphic at the top of this page.
- New small bugs were found and fixed. E.g., XSplitSizing.pas now works more carefully with sizing to right side of XSplitPanel of the first sizeable inner panel. XGrep now is created as alRight-aligned to prevent infinitive looping when FormAutoSize and ControlAutoPlace are using together. Key event is first passed to control which is capturing mouse. Capturing of mouse is improved and special method to XControl class is added. FormAutoSizer object has now property Collapse (default False) to let x-forms to become smaller than its controls are reducing its size (sometimes Collapse=True can lead to infinite recursion in autosizing and autoaligning). Some efforts are made in XFormAutoSize to allow autosizing of alClient, alRight and alBottom aligned controls.

- Also documentation for newly added classes is completed. And a couple of "typo" discovered by one English teacher are corrected. Now Children property is substituting old property Childs, ChildsCount is changed to ChildCount, and property XApplet.Running is corrected too. The teacher did not write more after my reply, where I said that I write not in English but in Pascal. Typographical error in English is not the same as typographical error in Pascal. So, please report me Pascal errors, not English language ones.


31-Jul-99 - Even more number of small and not too small bugs are found in add-ons XAligns, XControlAutoPlace and XFormAutoSize while XSplitPanel and XStatus were debugging and testing. Three new self-painting controls are ready: XSplitPanel, XStatus and XGrep.
  All XCL documentation files from this page are now available to download in a single zip, which will refreshing with the page. See bottom/top of this frame!


29-Jul-99 - Some small bugs are found while working under XSplitPanel control. All those bugs were affecting XAligns, XFormAutoSize add-on units and painting of XCustomBevel. Very small bug found in XMenus.pas with showing of radioitems after first checking (highlighting not removed). This was taking place only under Windows98. All found bugs are fixed in located on my Web page. Starting from next version, I am going to not place uploaded copy of xcl onto Torry pages to reduce number of re-registrations.
   I had registered as a member of Delphi Corner Web-ring. I hope, this will help me to notice more developers which could be interested in XCL.


27-Jul-99 - Small changes are made in XMfcAntiFlick to work with anti-flick more strongly when add-ons XControlAutoPlacer and XFormAutoSize are active too. Now there are no flicks at all for MFC-controls. Also I decided to alternate names for MFC-based controls using prefix 'C' instead 'XW'. So, XWLabel becomes CLabel, XWPaint becomes CPaint and so on.
   Also new XMenus unit is added to library with two new classes XMenu and XPopup.


23-Jul-99 - I found a time to spend it to complete documentation. Also, banner of XCL is made, and You now can refer to this page from yours if You like it. I still believe that You will not just watch, but join and take part in creating of XCL...


19-Jul-99 - Very important news: XMfcControl class and first MFC-based control XWLabel are finished. These required to make very serious changes in some base classes (XVisual, XWindow, XForm, XControl). But after all that I could find time to fight with flickering (I hate it, and I do know who love it - MS). In result add-on XAntiFlick.pas is ready to stop flicks in MFC-based controls, and add-on XRotateFonts is extended to do so with rotated labels.
   Something yet can be not finished, some bugs could be found, but I am going to go on leave and make holidays with my family (I will read mail at least ones a week and response as far as possible), so I am in hurry to publish all that made even without docs. I hope that some voluntaries from You will join to this project, and assist me in creating other MFC-based control.


06-Jun-99 - Documentation for XClass, XVisual, XWindow, XApplet and XForm is ready and I decided to start publishing XCL. Didn't I too hurry up?


03-Jul-99 - Several self-painting controls are ready. This set of ready modules allows to create some small utilities starting it from 60Kbytes and without fast increasing of code while programming it. Now, I feel that I will busy with my family during summer, so I decided to stop coding and make some efforts to create a few docs and publish this my work on my page. Go and get it!


20-Jun-99 - unit XCanvases had written. Also unit XCanvasObjects is written too. New technique of optional including additional modules extending functionality of basic ones is applied, so applet can either include only XCanvases unit or XCanvases + XCanvasObjects. Or canvases can be voided to include at all if only MFC based controls are used.


16-Jun-99 - XCL project has started. This document had written (but not published yet), ZList, XClass, XWindow, XApplet are made. First applet with three windows and total size 23,5Kbytes of executable.