Make your own free website on


Introduction Downloads Applications News FAQ
Forum Subscribe Articles Links Other


 Key Objects Library     

 Key Objects Library     

OLD KOL history

See latest news here

KOL & MCK v0.84 (1-Jul-2001)

[*] Small change: if the TControl.Icon property is set to THandle(-1), then the application no more tries to load default icon resource. Some debugging tools (MemProof) do not alert more that the API failure took place while loading 'MAINICON' from the resource.
    Also, in MCK property Icon (of type String) is added to TKOLApplet and value -1 is available both for TKOLForm and TKOLApplet to prevent loading the icon resource at run time.

[-] Resource (bitmap) leak fixed for TMenu (for case, when ItemBitmap[ ] property used - for asm-version).
    Asm version of TIcon.Destroy fixed for resource (icon) leak.
    Small fix for TBitmap.RotateRight - one possible memory leak fixed.
    Possible memory leak fixed in TBitmap.FormatChanged asm-version.
    Potential error fixed with GetObject usage in pascal version of TBitmap.FormatChanged (tagBitmap must be (d?)word-aligned, though this is totally undocumented requirement and is not explained even in MSDN).

[-] TControl.CreateWindow pascal version fixed. (Ambigous call to Global_Align removed, because it could cause infinite realigning in some cases, which cases application to hang at run time).

[-] Aligning of dynamically created controls on pages of tab control fixed. (ToBeVisible for tab pages always returns its Parent.ToBeVisible now. This allows to get in consideration all pages of visible tab control, not only current page, while re-aligning controls).

[-] HeapMM.pas fixed and now can be used not only with system.dcu replacements (in standard system.pas, IsMemoryManagerSet variable is not in interface part, so it is unavailable for accessing from other units). HeapMM is recommended to use instead of standard Delphi memory manager when the program is debugging under proofing tools, because those ones can detect some API failures under Delphi memory manager, junking the report with undesired messages.

[+] Methods IconLoad, IconLoadCursor, CursorLoad added to TControl. These are recommended to use when Icon or Cursor is loaded from the resource, because in such case special flags are set to prevent attempts to destroy shared icon object. Changes made also in MCK code generation to use these methods for loading Icon and Cursor properties from resources, when needed.

[-] StrSatisfy function changed to become case insensitive. This fixes TDirList filtering while retrieving directory list by mask(s). Thanks to Alexey Shuvalov, who reported this bug.

[+] Methods TObj.Add2AutoFree and TObj.Add2AutoFreeEx added to allow destroying non-parented (usually non-visual) objects in the destructor of the owner object. This is used in MCK to add all such objects (e.g., TKOLTimer) to this list of the parent form object. Also, the form holder object now is added to the auto-free list of the contained form too. Since this, generating special procedure to destroy all such objects is abandoned. But the main benefit is that the form holder object (e.g. Form1 variable) is live yet when OnDestroy is called for a form or its child controls.
   Correspondent changes are made in MCK for TKOLDataModule and TKOLFrame too, and auto-freeing VCL components also provided.
[!] Note: these changes require for all existing projects to re-open all forms at design time and save changes made by MCK, before re-building the project.

[-] Possible Delphi hang fixed for TKOLForm (could occur when TKOLControl descendant was dropped onto it).

[-] Events OnEnter / OnLeave are added for mirror components (MCK), correspondent to those controls, which can be focused at run time. And, OnLeave event fixed for radio box (never called).

[!] About compatibility with Delphi6. Now I do not effort to provide such compatibility, but people tell that v0.83 (at least) works normally, when a symbol ASM_VERSION is undefined (i.e., Pascal only used with a few inline asm code).

[!] About compatibility with FreePascal. Do not ask me more. I spend two+1 evenings and found a lot of reasons why KOL can not support it. Following are among this:
- no property for poor object, only for class with a lot of necessary changes to convert KOL objects to classes;
- no interface support at all;
- too exacting assembler. E.g., it is not possible to write [EAX].fCount in TList method implementation, but [EAX].TList.fCount. Since this, a lot of changes should be made to satisfy it.
- minimal size of the application is about 50K. Or, system unit (win32sys.pp) should be re-written again to overcome this. Under Delphi2, minimal size of the application was ~7K, and under Delphi5, even without system.dcu replacement, it is 16K.


KOL & MCK v0.83 (26-Jun-2001)

Changes by Sergey Shisminzev:
[+] Event OnTVSelChanging added for tree view control. It allows to prevent selection change.
[*] Event OnTVBeginEdit changed from procedure to a function of type boolean. It is now possible to return False to prevent editing of some nodes.

[-] OnSelChange event fixed for tree view control. And, editing label for tree view nodes fixed (asm version). Thanks to Sergey Shisminzev for a bug report.

[+] Events OnTVBeginDrag, OnTVBeginEdit, OnTVEndEdit, OnTVSelChanging, OnTVExpanding, OnTVExpanded, OnTVDelete added to MCK mirror class TKOLTreeView and available now at design time.


KOL & MCK v0.82 (24-Jun-2001)

[+] Int64 type added, and following functions/procedures to work with it:
     - MakeInt64( Lo, Hi ): Int64
     - Int2Int64( I ): Int64
     - IncInt64( X, I )
     - DecInt64( X, I )
     - Add64( X, Y ): Int64
     - Sub64( X, Y ): Int64
     - Neg64( X ): Int64
     - Mul64i( X, I ): Int64
     - Div64i( X, I ): Int64
     - Mod64i( X, I ): Int64
     - Sgn64( X ): Integer
     - Cmp64( X, Y ): Integer
     - Int64_2Str( X ): String
     - Str2Int64( S ): Int64
     - Int64_2Double( X ): Double
     - Double2Int64( D ): Int64

[+] For working with Double, following functions are added:
     - TruncD( D ): Double
     - Double2Str( D ): String
     - Str2Double( S ): Double

[-] Reading rich edit font styles fixed - thanks to Sergey Shisminzev for bug fix.

[*] Small changes in TStream implementation. Interesting only for those of programmers, who want to derive their own stream type.

[-] Small fix for KOLGIF.PAS, new version available.


KOL & MCK v0.81 (17-Jun-2001)

[-] OnEraseBkgnd fixed for a form object (did not work).

[-] When a Brush (property of TCanvas, or TControl) is destroying, its BrushBitmap is destroying automatically. Also, old BrushBitmap is destroyed automatically when another value (bitmap handle) is assigned.

[-] After OnPaint, all graphic tools are deselected automatically from a Canvas, if it is created. This fixes drawing with non-default font, brush, etc.

[-] Pascal version of TCanvas.TextExent fixed.

[+] MCK: New component added: TKOLFrame. It is intended to use in place of TKOLForm, and allows to create and adjust at design time a panel with child controls and objects on a standalone designer form. At run time, instances of such panel together with its children can be put onto another parent control or form dynamically.

[*] TTimer implementation improved. Now timer owner window is destoyed not when the last active timer is deactivated, but when the last TTimer object is destroyed. This makes working with timers faster.


KOL & MCK v0.80 (15-Jun-2001)

[-] FIXED: Disorder of aligned controls (in MCK projects) with no TabOrder property available (such as labels).

[-] TextAlign property added for TKOLMemo mirror component.

[-] StrLen fixed - thanks to Peter Tuente, who reported the bug. (As a result, TStrList.GetText, SaveToFile work correctly now).

[-] Design-time editor for TKOLToolbar component fixed (separators have no correspondent images, etc.) and improved a bit. Also, noTextLabels fixed for separator buttons.

[*] When TVInsert / TVDelete methods are called, tree view control is invalidated automatically now. Earlier, [+] button did not appear immediately after creating the first child node. (Thanks to BaRoN! for this report).

[+] Methods BeginUpdate / EndUpdate added for TControl (useful for treeview, listview, listbox, memo, richedit controls). Thanks to BaRoN! for a question about it.

[-] For TKOLOpenSaveDialog, assignment to OpenDialog property is generated now (this affected only that caption of button was 'Open', not 'Save' as it should be).

[-] For combobox, OnSelChange event now occure after Text and CurIndex property are changed.

[-] OnClose event is called ones now (this is done by assigning nil to OnClose event handler after first call of it). Earlier, OnClose could be called twice for a form without standalone Applet object - because of sending WM_CLOSE message at the end of Run procedure. Thanks to Peter Tuente for a bug report.

[+] Another memory manager unit added - HeapMM - small and fast (in a separate archive). It can be used separately, or with system.dcu replacement (separately from KOL), or together with KOL. But the most efficient is to use it together with KOL, when system.dcu replacement used.

[*] TTimer no more depends on Applet and form windows: special invisible window is created to own timers. Since this, TTimer object can be used in an application without GUI windows, or work before creating or after destroying other windows. Sure, code is not grow in result of this change.

[+] OnPaint event is now available for any control, not only for paint box. Properties UpdateRgn and EraseBackground are added to improve painting (these allow to examine what parts of the window are invalid and repaint only those ones, and to determine if the application or system is resposible for erasing window background). Another event added OnEraseBkgnd, which allows to decorate controls without overriding its painting in total. And with new function PaintLaterIsBetter it is possible to improve performance of painting operations greatly, together with drawing only over invalidated region (i.e. when real UpdateRgn is examined to reduce drawing to the clipping area only).

[!] Sorry, but changes in TKOLDataModule can cause corrupt the unit correspondent to a such component. Save your work first (copy unit files without opening it in IDE), and re-create all needed components manually. [ :-( ]

Version 0.80 (base version, or stable) of KOL and MCK is provided in two archives where all needed files are packed. Following several version will be available as small patches.


KOL & MCK v0.78 (5-Jun-2001)

[+] New additional unit provided: KOLword.PAS, which is intended to do MS Word automation (client). It requires only ~1K of code itself (and ~3K together with a code used from system units), and all the objects of Word together with its properties and methods are available.

[*] DragStart method improved. Now an undocumented SC_DRAGMOVE command message is used, which allows to easy provide dragging of a window (both form and control) until left mouse button released. (It is tested and found working even under Windows95 without any additional software installed).

[-] Calculating of TKOLProject.projectName property fixed for case when Delphi5 is started with -hm command line option. Thanks to Dočekal Radek, who reported this bug.

[-] Some small changes made to accomodate Delphi2 to make it compatible again. Code of KOL is checked again to provide compatibility with old Delphi versions.

[*] Working with Cursor property changed. In KOL, Cursor property is inherited by child control from the parent, when child control is created. In MCK, Cursor_ property (TKOLControl) introduced as string to allow typing cursor resource name manually, and special property editor made to allow selecting one of standard cursors from drop-down list.
   Also, global variable ScreenCursor is introduced in KOL to allow overriding Cursor property settings for the most of controls and forms (useful to set special cursor shape for all application windows during long calculations, waiting some events and so on).

[*] Aligning fixed and improved. Now parent's Border property (the same as Margin) is used to provide a border between aligned controls (and between those and its parent). Also, MarginTop, MarginBottom, MarginLeft, MarginRight properties added to allow determine additional space between parent control and its (aligned) children. In MCK, earlier defined property Margin (replaced by Border) moved from published section, so just answer "Ignore all", when a project is loaded into IDE.

[-] Setting Margin property (now Border) for TKOLForm fixed - thanks to BaRoN!.

[-] Groupbox fixed: WS_ES_TRANSPARENT style no more used, the only thing what had to do: filling its background in responce to WM_ERASEBKGND message.

[*] Small changes in splitter to make it compatible with new aligning capabilities. Another constructing function added: NewSplitterEx, which allows to determine how it is beveled. Also, design-time property edgeStyle added in MCK mirror of the splitter control. It is possible now to set MinSizeNext property to negative value to compensate too large parent Border and allow resizing first control widely.

[-] Small fix for DoubleBuffered drawing: ClientRect is obtained now using windows native GetClientRect API function, not using property ClientRect, which corrects rectangle for some idiosincrasies controls, returning ClientRect incorrectly (e.g., groupbox).

[-] Assigning a value to Color property of TControl at run time fixed.

[-] TBitmap.LoadFromStream, LoadFromFile fixed.

[+] ExecuteWait function added, which allows to launch an application and wait until it finishes or specified TimeOut expires.

[-] Generating icon and bitmap resources for MCK project changed a bit. Now, resulting res-file is compared with its previous content and when it is actually changed (or created new), source is marked modified, so a compiler is forced to rebuild project with new resources. This also fixes a problem with changes in TKOLTrayIcon resource naming when You re-open earlier created project.


KOL & MCK v0.77 (29-May-2001)

[=] Sorry, special update to fix MCK installation under Windows95 (no more depends on setupapi.dll presence).


KOL & MCK v0.76 (28-May-2001)

[+] KOLSocket.PAS additional unit provided -- by Alexander Shakhaylo.

[+] TCABFile object provided to extract files from CABinet file archive.

[*] TIniFile: GetSectionNames, SectionData methods updated (by Vyacheslav A. Gavrik).

[-] Assignment to Text property for TKOLEdit, TKOLMemo, TKOLRichEdit at design time now applied immediately to code generated.

[-] MCK: Assigning Visible = False at design time fixed for controls from comctl32 (e.g., for TKOLRichEdit, TKOLListView, etc.)

[-] Character formatting in rich edit control fixed. Now all RE_Fmt... properties are working properly.
  Also, some code added to supress inserting tabulation character in result of pressing Ctrl+I (when RE_FmtStandard used to easy format text using keyboard).

[*] rich edit: Assignment to RE_FmtFontColor changed. Now a property RE_FmtAutoColor (just introduced) is reset to False, and color is converted to RGB always. Properties RE_FmtHidden and RE_FmtHiddenValid provided.

[*] rich edit: properties RE_AutoKeyboard, RE_AutoKeybdSet, RE_AutoURLDetect, RE_DisableOverwriteChange, RE_FmtStandard, RE_Transparent and events OnRE_InsOvrModeChange, OnRE_OverURL are available at design time for rich edit control mirror (MCK).

[-] MCK: Inserting long strings as initial value for string type property fixed - by LasTNighT.

[*] MCK: now TKOLProject can detect correct project source directory during loading the form at design time, so there are no needs to type sourcePath property manually every time, when MCK project is moved (or distributed) to another location (or to another PC).

[-] Tabulating to controls, currently invisible together with its parent ones, fixed. Property ToBeVisible now returns False, if ToBeVisible for its parent control is False too.

[-] Aligning of child controls on group box fixed. Thanks to BaRoN!, who found this bug.


KOL & MCK v0.75 (20-May-2001)

[+] New methods in TControl: DragStart (for form only) and DragStartEx, DragStopEx (and propertty Dragging reused) - for any control, which allow moving form/control with mouse not only by dragging form's title bar.

[-] Events OnMouseDblClk, OnClose forgotten earlier, added for mirror components and available in the Object Inspector now.

[*] Some changes in window message handling procedure. Dynamic procedures (attached using AttachProc) no more called for Applet (excluding its own messages queue), but only for control itself. As a result, attached procedures now do not filter all the messages passing through all application windows, but only messages, posted to the target control's window only. This means, that to filter all the messages, it is possible to use Applet.OnMessage event only now.

[*] Change above made it possible to change and improve mouse messages processing. Now all the mouse events (OnMouseDown, OnClick, OnMouseUp, OnMouseDblClick) are received normally - and assigning an event handler to OnMouse... does not hang OnClick and OnMouseDblClk handlers from working. One more flag is used now in TMouseEventData record, passed to all OnMouse... event handlers. It is called StopHandling and setting it to TRUE prevents this message to further processing it (it is not passed to all other event handlers and to default window handler too).

[*] Change in MCK project code generation: now not functions
        New{Formname}(AParent:PControl ):P{Formname}
used to create forms, but procedures
        New{FromaName}( var AForm: P{Formname}; AParent: PControl ).
Since this, global variable (e.g. Form1: PForm1 ) is assigned already in OnFormCreate handler (and in other event handlers too, when those are called before returning from the form creation procedure).

[*] Double click on mirror component at design time now always creates and shows the most appropriate event handler for non-visual KOL objects. OnDestroy event handler is created at last, when the object has no other events defined for it in events list.

[+] New type of component added to the MCK: TKOLDataModule. It is for using in place of TKOLForm component to collect a set of components (mainly non-visual) on a separate design-time form. Though referencing between objects from different units is not possible at design time, this component can be useful to avoid jamming the form with a lot of non-visual components.


KOL & MCK v0.74 (14-May-2001)

[=] TTimer previous changes were made not too carefully. Both Pascal and Assembler versions fixed.

[-] MCK installation problem under Windows95 fixed. As it is found, BroadcastSystemMessage API function was declared incorrectly in windows.pas unit, erroneously referencing function BroadcastSystemMessageA, which does not present in USER32.DLL living under Windows95. Instead, BroadcastSystemMessage entry should be used, present everywhere.

[*] When an icon can not be assigned to listview subitem because of too old version of comctl32.dll, assert exception is not generated now. But, all other states of the subitem also can stay unchanged (LVSetItem procedure).

[*] Starting from this small update, several follow ones will be delivered to You using small Updater utility, so download size is reduced a lot.


KOL 0.73 (13-May-2001)

[-] The most of resource and memory leaks are fixed. Very big (no, VERY BIG) thanks to Vyacheslav A. Gavrik, who reported several bugs, and made some useful suggestions to fix it. (And he suggested some other useful changes in KOL, too).

[+] New methods GetSectionNames and SectionData for TIniFile object (by Vyacheslav A. Gavrik).

[*] To simplify further working with proofing tools and code insight in Delphi5, all inc-files are merged with the KOL.PAS again (1,5 Mb). And to minimize downloaded updates size, the PatchMaker / Patcher utilities will be used starting from the next version (current version is distributed in a single archive).

[-] Tab control changes: tcoBorder option added, which simulates previous tab control behaviour, when a border (sunken) was appear around the control. Now tab control by default has no border (like similar TPageControl in VCL). Correspondently, in MCK, TKOLTabControl.edgeType implemetation changed and default style (without border) does not require additional code as earlier.

[-] Double call of OnRE_URLClick event fixed (rich edit control, click on URL link) - fixed.

MCK 0.73 (13-May-2001)

[+] VerticalAlign property provided for TKOLPanel mirror. Also, VerticalAlign and TextAlign both applied to TKOLBitBtn (forgotten earlier).

[+] Property Font added for TKOLTabControl. See also KOL 0.73 changes, with which drawing of edit, memo controls fixed on tab control with edgeStyle = esNone.

[-] Resource names for icon resources, generated automatically (e.g. for TTrayIcon) are starting now from 'z' character to provide for 'MAINICON' resource (i.e. for icon, representing the application) to be the first. Since this, windows explorer shows correct application icon in a file list now.

[-] Some efforts made to solve a problem with inserting definitions for new controls of the form by Delphi designer not to an appropriate place. This bug was found usually just after creating new MCK project. Now, every time, when code is generated again (with every change in form and its controls), source is checked to move {$ENDIF} directive to the correct place. This solvation should working both for newly created MCK projects, and for old projects too.

[+] Properties SimpleStatusText and StatusText implemented for TKOLForm component.

[+] Property MaxTextSize and event OnRE_URLClick added for TKOLRichEdit component.


KOL 0.72 (7-May-2001)

[+] TImageShow object added (similar to TImage in VCL). It allows to show an image from TImageList object. Correspondent TKOLImageShow mirror component also added to MCK.

[+] Events OnShow and OnHide added for TControl. Also, these events are both implemented at design time (in MCK).

[-] Pascal version of TControl.Run fixed a bit (sometimes failed to assign nil to a variable, passed as a parameter, at the end of executing). Asm version worked properly therefore.

[-] Pascal version of TControl.GetCurIndex fixed (assembler version was working fine).

[-] Asm version of OnSelChange event handling fixed for tab control. Also, forcing OnSelChange event added for case, when CurIndex is changed programmatically (notification message TCN_SELCHANGE is not sending in such case automatically by Windows).

[+] Methods BringToFront and SendToBack added for TControl to simplify changing Z-order of controls at run time.

[-] Asm version of TBitmap.FillBmpWithBkColor fixed (used when width or height of bitmap object was changed). Also, asm version of TBitmap.FormatChanged fixed (did not work properly for case of changing PixelFormat to bmDDB, and when width or height of bitmap was changed).

[+] Method PopupEx added to TMenu object. For pop-up menus, it provides correct menu behavior under menu for case, when the form, parent to popup menu object is not visible.

[-] OnMouseXXXX events call for panel control fixed (were not called at all).

[-] OnMouseEnter / OnMouseLeave events handling changed and fixed. For now, _TrackMouseEvent function is used, which makes this more accurately, than mouse capturing method, used before. This also tested for glyph bitbtn control, for case when those events are used to change it states.

MCK 0.72 (7-May-2001)

[+] Design-time property wordWrap added for TKOLLabel. It determines only what function is used to create label object: NewLabel or NewWordWrapLabel (so, this property can not be accessed at run time).

[-] TKOLTabControl: generating code to setup properties and events for Pages of tab control provided (was missed). Also, showing certain page defined by CurIndex property at startup fixed (new method BringToFront used to ensure changing current page).

[-] It is now possible to add another functions, procedures,  containing 'begin' reserved word, into dpr-file of a project. (In earlier version, the first line, containing 'begin' erroneously was detected as a place to insert defines, needed to indicate mck project for Delphi compiler). This fixed by adding a mark comment for actually needed begin operator the first time, when project is converted.

[-] One more fix for parentFont, parentColor property. Now those become FALSE automatically, when Font, Color are changed in The Object Inspector.

[-] Generating OnMenu event assignment fixed for TKOLTrayIcon mirror.

[-] TKOLImageList component editor fixed. Now it does not corrupt bitmap after editing it.

[-] TComponent descendant components usage on MCK form fixed for Delphi3.


Site news (3-May-2001)

Several answers are added on FAQ page.

KOL 0.71 (3-May-2001)

Note: When MCK v0.70 was released, KOL was not changed, so version 0.71 of KOL follows immediately after 0.69 to keep synchronous version numbers between KOL and MCK.

[+] OnDropFiles event is added for TControl. It allows to your applications to accept dropping files very easy just assigning an event handler. (Correspondent changes are made already in MCK 0.71, so You can implement drop files acceptance in your MCK projects very easy).

[-] OnSelChange event was called twice for tab control, when page was changed by mouse - fixed.

[*] Methods GetWindowHandle and CreateChildWindows moved to public section in TControl declaration. GetWindowHandle allows to force control's window handle to be allocated but without showing its parent form on screen, if it is yet not shown in process of creating (this prevents flicks on screen during the process of the form appearance). CreateChildWindows also useful for creating controls dynamically.

[-] TTrayIcon.Destroy asm version revised and fixed.

[-] TIcon.Convert2Bmp fixed for icons with size different from system default (usually 32x32). Thanks to Basil Matveev, who've found this bug and reported it.

MCK 0.71 (3-May-2001)

[-] OnSelChange event added for TKOLTabControl.
[+] Design-time property edgeType added to adjust border style of tab control added to TKOLTabControl.

[-] Tooltip property initialization added for TKOLTrayIcon.

[-] FontPitch, FontOrientation and FontCharset initialization code generation fixed. Thanks to Jean-Marie Delbary, who found and reported this bug.

[-] Properties parentFont, parentColor now allows to inherit font/color of parent recursively for all child controls having those flags True.

[*] Property Locked added to TKOLForm and TKOLProject, which both become locked, when VCL controls are found on a form. When TKOLForm / TKOLProject are locked, these are not functioning, preventing possible damages in VCL-based projects. Since this, dropping of MCK mirror components onto the form of VCL-based project becomes not too dangerous.

[+] Code generation is added for VCL's TComponent descendant objects, placed onto MCK form. It is now possible to use non-visual VCL components (not controls) in KOL-MCK projects, even to adjust those at design-time. The only restriction is, that code auto-generation is not supported when properties of such objects are changed - TKOLProject component should be double-clicked (e.g.) to do this.
   Generating code supported for creation of such VCL components, and assigning published properties (and events), which value differ from the default, detected when new component of such type is created. Also, code is generated for destroying such objects together with the form (since run-time instances of a form and controls in KOL are not TComponent descendants, an owner for VCL components is always nil).

[-] The way how OnFormDestroy called is changed so it is now called properly in all cases - both when form is closed by appropriate message or calling Free method programmatically.

[*] Special (public) field called "FormPointer_DoNotUseItPlease_ItIsUsedByMCK" introduced in KOL's TControl to use as a pointer to form holder object, so Tag of the form is now free for use again in MCK projects.


MCK 0.70 (30-Apr-2001)

[+] Mirror TKOLTabControl for tab control (known as page control in VCL) is added. With this mirror, mirrors are ready almost for all visual controls in KOL.

[+] Mirrors for non-visual objects TKOLColorDialog, TKOLTrayIcon are added.

[*] TKOLPaintBox accepts now controls dropped onto it as children, so it can be used as a custom-painted panel.


Site news:

[*] The mirror abandoned. It became too slow to be really useful. Remember (bookmark) the address: XCL.CJB.NET .

KOL 0.69 (28-Apr-2001)

[+] SysErrorMessage function added to format system error message to a string.

[+] New add-on package with Service.pas unit is provided. It contains definitions of two objects: TServiceCtl and TService, which allow to create and maintain Windows NT services.

MCK 0.69 (28-Apr-2001)

[-] TKOLToolbar: design-time component editor fixed for Delphi5.

[-] Properties parentFont, parentColor behaviour is changed a bit. Now it is possible to assign False to it at design time to make Font or Color of the object independant from its parent even if these are equal yet.

[+] Now TKOLApplet is not really needed to be dropped onto form for case of a single form even if TKOLTimer used, which requires an Applet variable to be assigned. For this case, an assignment of the form object to the Applet variable is generated well.


Site news:

[+] On the FAQ page, an answer added to a question, how to create DLL, containing KOL form.

KOL 0.68 (26-Apr-2001)

[-] TOpenSaveDialog.InitialDir assignment fixed in NewOpenSaveDialog function.

[-] Stream2Stream fixed for case when source is memory stream (current Position was not increased).

[-] TStream.Seek asm version fixed.

[-] TBitmap.Dormant fixed: when Canvas was used already, resource leak occured. Changing format procedure also improved to work more correctly for case of pf15bit PixelFormat.

[*] OnDestroy event is called now before destroying children, handle, etc. for TControl.

[*] Some fixes and changes in documentation: TColorDialog is commented and shown in auto-generated help, some comments are changed to use new features of xHelpGen v3.0 (updated this week), some comments are revised.

[+] GIF decoding support added: KolGif.pas is available in a separate archive. Animated, transparent and even corrupted gif-files are shown correctly in most cases. For bitmap packing purposes, it is possible to use lighter object TGifDecoder, which just unpacks frames and converts ones into bitmaps. To provide correct sequence of frames in animation, use TGif which is much more power.

MCK 0.68 (26-Apr-2001)

[-] First setup Checked := True and SetRadioChecked added for TKOLCheckbox and TKOLRadiobox when these are checked at design time.

xHelpGen 3.0 (19-Apr-2001)

[+] Multi-language support. Though, comments for all the controls are not yet ready for the second language yet. (Russian comments will be provided).

[+] Local glossary support added. This simplifies mainainance of related comments in a big source (important for KOL).

[-] Support of interface, interfaced class, overload directive, case in record, packed object, nested declarations fixed and improved.


KOL 0.67 (15-Apr-2001)

[+] Two models to derive your own controls on base of TControl are provided. The first uses the standard OOP capabilities and requires USE_CONSTRUCTORS option to be turned on. This way leads to increase the size of executable a bit, so it is still optional. The second allows You to extend TControl from the interior. You just turn on USE_CUSTOM_EXTENSIONS option and provide three files, and, where You place your own code. Because KOL distributive does not contain such files, these are never replaced, so You can implement there what You wish.

[+] VERY IMPORTANT: new unit KOLEDB.PAS is provided (in a separate archive), which allows to access database through OLE DB. This is yet restricted a lot in functionality but now it is possible with Delphi and KOL to create GUI applications working with real data sources (local or network), which executable is less that 25K !

[-] A bug in LVItemAdd, LVItemInsert fixed.

MCK 0.67 (15-Apr-2001)

[-] A small bug with InitialPath property for TOpenDirDialog fixed.


KOL 0.66 (8-Apr-2001)

[-] CanResize property fixed (asm version of SetCanResize procedure). Restoring of form size after minimization when its property CanResize is set to False fixed too.

[-] A bug with TMenu's OnMenuItem individual events fixed. (asm version).

[-] A bug with toolbar having a single button fixed (asm version).

[-] Another toolbar "feature" corrected. Now only one event OnClick is occur when click was on toolbar but not on one of its buttons. This is made now for both left and right click. In both cases CurItem and CurIndex are assigned to clicked button id and index, or to -1 when click was out of buttons area.

[-] In result of some "shaman dancing" methods TObj.Init and TObj.Destroy fixed for Delphi3 and Delphi2. Now it is possible to destroy visual objects at run time without problem, and OnDestroy event works properly. The most of these problems were found in assembler version of code.

[+] Following property and functions are added to TControl for list view to get know what items are selected easy:

  • LVCurItem - returns an index of the first selected item in a list view
  • LVNextSelected( Idx ) - returns an index of the next selected item in a list view
  • LVNextItem( Idx, Attrs ) - returns an index of the next item with given attributes

     With these new supplements a lack of list view functionality in KOL is filled up.

[+] For your convenience, method Close is added to TControl. If applied to a main form or Applet object, it terminates the application. Also following functions are added: ShowMsg( S, Flags ), ShowMessage( S ), ShowMsgModal( S ).

[+] Method MinimizeNormalAnimated is added for TControl. If applied (once) to a main form, it provides normal animation from a caption of main form to application taskbar button. Also, correspondent design-time property added for TKOLForm mirror of MCK.

MCK 0.66 (8-Apr-2001)

[*] parentFont property now is working by another way and serves to apply all changes in parent's font to font of children immediately - not only to show if a font is equal to parent's one and to generate optimal code. (Do not forget, that Font of TKOLForm should be changed, not the Font of a form itself).

[+] parentColor property added for the same purpose.

[*] More advanced technique of accessing and updating the source directly in IDE editor applied. There are no more restrictions to load automatically generated inc-files into IDE. TKOLProject's property protectFiles is now obsolete. Protecting of such files is abandoned to allow updating of those from the IDE editor automatically.
   Unfortunately, this method is not applicable in Delphi2 and Delphi3. For these old Delphi versions, automatically generated inc-files should not be loaded into IDE manually therefore.

[+] Mirror for a toolbar is implemented: TKOLToolbar. It is tested in all Delphi32 versions (D2, D3, D4, D5). The only difference under Delphi2 is that API CreateMappedBitmap fails, so a property mapBitmapColors introduced to allow to generate code which does not use color mapping.

[*] An event OnDestroy applied also to TKOLForm.

[-] Generating .SetSize( 0, 0 ) removed in automatically created code. (This had no effect, but not optimal).


KOL 0.65 (1-Apr-2001)

[-] Memory leak with releasing huge string members of KOL objects fixed. As it is found, poor Pascal object does not release these automatically. Fortunately, there were no many such fields found in KOL objects. E.g., TControl contains only one of such members - FREUrl, which for most cases was never assigned.

[+] Another archive is available for download. It contains units ERR.PAS and KOLMATH.PAS, which are intended to replace standard SysUtils and Math units in part of exceptions handling. ERR.PAS increases size of the executable only about 6K (instead of 11K when SysUtils used), and allows to work with try-finally, try-except, try-except-on, raise in projects, developed with KOL.

MCK 0.65 (1-Apr-2001)

[+] TKOLOpenSaveDialog and TKOLOpenDirDialog mirrors for TOpenSaveDialog and TOpenDirDialog are added.

[+] OnDestroy event is added to all the mirrors of KOL controls and objects.

[=] Known bug in Delphi2: OnMenu events are not available for separate menu items. Therefore, OnMenuItem event for entire menu is available and works properly. This bug is appearing only in Delphi2. All other Delphi versions work normally with OnMenu events.


KOL 0.64 (25-Mar-2001)

[-] UpperCase and LowerCase asm version fixed for case of empty string parameter. (Thanks to Rick B. for the bug report).

[+] List view control is improved. New properties and methods are added:

  • LVItemState[ Idx ]: set of [ lvisFocused, lvisSelect, lvisBlend, lvisHighlight ]
    (index -1 is used to refer to all items of the list view with lvoMultiSelect style or to the last item otherwise)
  • LVSelectAll
  • LVItemAdd( aText )
  • LVItemInsert( Idx, aText )
  • LVItemStateImgIdx[ Idx ]
  • LVItemOverlayImgIdx[ Idx ]
  • OnDeleteLVItem( Sender, Idx )
  • OnDeleteAllLVItems( Sender )
  • OnLVData( ... ) and lvoOwnerData style, allowing to maintain huge (virtual) list views without performance degradation.
  • OnCompareLVItems( Sender, Idx1, Idx2 ): integer and LVSort/LVSortData procedures
  • OnColumnClick( Sender, Idx )
  • LVSortColumn( Idx )
  • OnDrawItem( Sender, DC, Rect, Action, State ) and lvoOwnerDraw style for list view

[+] Also owner-drawn style and virtual style list box are provided:

  • with OnDrawItem (see above) and loOwnerDrawFixed/loOwnerDrawVariable it is possible to create owner-drawn list box
  • with loNoStrings/loNoData style and making Count property not read only it is possible to maintain virtual list boxes, containing thousands of items without performance degradation
  • new event is added OnMeasureItem, which allows to add code, responsible for calculating individual items height for list box with loOwnerDrawVariable style (and combo box with coOwnerDrawVariable style)

[+] By the same way owner-drawn combobox is provided:

  • coOwnerDrawFixed and coOwnerDrawnVariable together with described above OnDrawItem and OnMeasureItem events gives desired effect.

[+] New property ItemData[ Idx ]: DWORD is available for list box and combo box to assosiate any user-defined data with list box / combo box items.

MCK 0.64 (25-Mar-2001)

[+] All new events and styles are applied to TKOLListView, mirror of KOL list view control.

[+] All new owner-drawn events and styles are applied to TKOLListbox, mirror of KOL list box control.

[+] All new owner-drawn events and styles are applied to TKOLCombobox, mirror of KOL combobox control.


KOL 0.63 (9-Mar-2001)

[-] SetPosition method, assigning 0 to Left or Top properties of a form fixed. Now CW_USEDEFAULT constant is used only in case than Left and Top properties both were not changed before showing the form.

[-] Assembler version of SortData procedure fixed.

[*] An event OnDestroy is added to a base object type TObj (so, any KOL object or control has now this event applicable).

MCK 0.63 (9-Mar-2001)

[+] Several mirrors are added: TKOLGroupBox, TKOLCheckBox, TKOLRadioBox, TKOLEditBox, TKOLMemo, TKOLListBox, TKOLComboBox, TKOLSplitter, TKOLPaintBox, TKOLListView, TKOLTreeView, TKOLRichEdit, TKOLProgessBar.
   The only several mirrors are not ready yet: tabcontrol, toolbar, label effect. I hope, these three will be ready soon too. But already now, it is possible to start visual programming with MCK for KOL.

[-] Problem with string property, which contains apostroph, caret return and other control characters, fixed.

[-] TabOrder property usage fixed. Now controls are created in the order, determined by the TabOrder property value, so there are no generating of the assignment of a value to the TabOrder property.

[-] Problem of correspondance of visual placement of child controls at design time and run time is partially solved. Some efforts made to overcome the absence of the client area border on design time mirror components. At least, for non-aligned controls children are placed at run time exactly at the same position, where these are placed at design time. (For aligned controls, this problem is not too serious, and for implemented set of mirrors, the only TKOLPanel is actually important, which has the difference only 3 pixels or less, depending on parent TKOLPanel.edgeStyle property value). Special property editors (for Delphi5 only) are provided to visualize Left and Top properties as these should be at run time (these have no effect while direct editing of the property though).

All changes above are tested for Delphi5, Delphi4, Delphi3, Delphi2 under Windows 2000.


KOL 0.62 (1-Mar-2001)

[-] SetCanResize asm version fixed (thanks to Dalibor Toman).

[-] Assigning value to MaxProgress property fixed - for progress bar control.

[-] TOnEventAccept type declaration fixed (TObject replaced to PObj, as it should be).

[+] Some other registry functions are added: RegKeyOpenCreate, RegKeyExists, RegKeyValueExists.

[*] For TOpenSaveDialog, now ';' in filter is not assumed to be a divider between filter strings (only '|' should be used for such purpose). Since this, it can be used as a separator between multiple filters in a group of filters.

   I recommend to visit Thaddy's KOL Web Page and to see small FTP explorer which is about 60K even without system dcu replacement's !


MCK 0.61 (30-Dec-2000)

Small fixes for Delphi5:

[-] Incorrect function QueryFormDesigner in mirror.pas seems was a problem - fixed.

[-] Some changes in documentation made - how to convert project to KOL first time. In Delphi5, it is necessary to add a path $(Delphi)\Source\ToolsApi to search path of newly created project (it seems this is not necessary in all other Delphi versions).



M C K   0 . 6 ( 2 6 - D e c - 0 0 )

[+] <!!!> A mirror (be carefully, complex of mirrors) added for a menu - with its own design time component editor and some property editors. TKOLMainMenu and TKOLPopupMenu are support bitmap and accelerator key assignment at design time, menu bar is emulated well for main menu at design time.

[+] Small new feature added for TKOLProject component. Double clicking it twice forces converting project to KOL. This is equivalent to select TKOLProject in Object Inspector and double click BUILD property value.

[*] Small change: now all the published properties, which are available only at design time (or at least do not match to correspondent ones in KOL - at run time), are named in small capitals.

KOL 0.6:

[-] Assignment of a an event OnItem to menu item fixed - for case when such events are assigned separately (not using AssignEvents method once for all event handlers).

[-] Asm version of WndProcMouse fixed, and not only OnMouseMove now handled correctly.


By some disaster reasons (HDD RIP :((( ), this issue was delayed for some days. But therefore, an essencial progress was achieved, including compatibility with earlier versions of Delphi, and implementing some important capabilities.

MCK 0.5 (19-Dec-00)

[+] Some problems are solved. Mirror for panel, TKOLPanel component added, and generating code for tree of children is implemented well. Two visual mirror classes for non-visual objects added: TKOLTimer and TKOLImageList (the last - even with component editor). With the last, mirror for KOL's bitbtn added: TKOLBitBtn, with capability to use loaded Bitmap or certain ImageList: TKOLImageList to store images to draw.

[+] Generating code for case of single form without special Applet window changed to allow for some objects to refer to it via Applet pointer (e.g., to be used by timer objects).

[+] Compatibility with Delphi4, Delphi3 and Delphi2 provided. Since TBitmap in Delphi2 is much easier and does not support DIB bitmaps, I can not promise too good working with graphics at design time. Therefore, MCK components can be installed onto Component Palette without problems and work fine.

KOL 0.5 (19-DEC-00)

[+] VerticalAlign is implemented also for labels and panels, not only for buttons. Also TextAlign is now applicable to panels. Unfortunately, (bottom-aligning of text on label and panel can not be achieved, because of using <static> GUI controls to implement it.

[-] Asm version of BitBtn fixed (painting was not correct for other GlyphLayout, then glyphLeft).

[+] Compatibility with Delphi2, Delphi3 and Delphi4 for KOL itself provided (problem was with using TGUIThreadInfo, and because of bug in D2-D4 with incorrect declaration of GetPrivateProfileStrucuct / WritePrivateProfileStruct in windows.pas, and with some other differences).


MCK 0.4 (11-Dec-00)

[+] Source retrieving / updating methods are improved: now pas-units and dpr-file are obtained from and stored to Delphi IDE Editor directly, if these are always opened there (not only from / to file on disk, as earlier). This solves problem of source files synchronization between KOL code completion and editing code in IDE at design time.
  But You should not open automatically generated inc-files in IDE Editor (excluding some special cases).

[+] Adding of form became very easy operation with change above.

[+] There is not necessary now to have main form with TKOLProject component on it always opened. But changes are applied to code immediately, and always like in AutoBuild mode, so be careful.

[*] Minimal value for AutoBuildDelay now = 0 (and means that there are no delay at all).

[+] Problem of form renaming is totally solved. This can be done easy by changing property FormName of TKOLForm component located on the form. (But if main form is not opened in designer, operation is failed, and message to instruct to open main form is displayed).

[+] Now TKOLProject can automatically detect path to project source and dcu output directories, and no more dialog to select source path appearing when new visual KOL project is started.

<*> Note: MCK now is designed under Delphi5, but it is provided with sources, so when compatibility of KOL itself with different Delphi versions will be provided, I am sure, that MCK also will work in Delphi3 and Delphi4.


MCK 0.3 (10-Dec-00)

[-] Message 'Invalid typecast' when dropping TKOL... component onto form eliminated.

[-] TKOLProject.AutoBuild fixed and now works properly.

[-] Problem with converting of newly added form to KOL solved. Problem of renaming of form is not yet solved (but all needed changes can be made manually).

[+] Console added to show log - for debugging purpose only. But it can be useful to find out what is wrong.

[*] Structure of dpr changed to allow more automatic forms maintanance. This also resolves problem of including of constructors for all (autocreated) forms, even not opened in IDE, into code ( Property AutoCreate is removed from TKOLForm, and autocreating is controlled now by Project|Options|Forms.

[*] Design-time property TKOLForm.DefaultSize replaces DefaultWidth and DefaultHeight.

KOL 0.391 (sorry, this bug was erroneously claimed as fixed, but actually not - code was lost on the way...):
[-] CanResize fixes:
- window handle is created, if it is not yet created before, so bug with collapsing form is eliminated (only be sure, that You have assigned False to CanResize just before calling Run).
- WM_NCHITTEST message is handled to prevent cursor from changing to resizeable shapes.


KOL 0.39 (9-Dec-00)

[+] KOL MCK became even more power. New solutions found, which allow to make designing of KOL projects totally visual like in VCL. You can add forms, drop controls and objects onto it, adjust its placement and size visually, change its properties using Object Inspector and even create event handlers and write code using entire set of IDE features (code insight, code completion, auto completion, etc.), and when You compile the project - it is very, very small. And there are no needs to switch between real and mirror projects - You are developing your KOL application exactly like You do this usually in Delphi! (your breakpoints are not lost, You are keeping cursor near the code, which You find suitable to change while debugging it, your text bookmarks are always available, ... wonderful!)
  Not yet all mirror classes are ready for all KOL objects, and even painting is still schematic (this will be done at the last moment, when functionality will be provided in total), but already now we can say - KOL is becomong really visual library. And tiny!

[-] TrimRight fixed (asm version, all characters #128..#255 were trimming).

[-] DelimeterLast, ExtractFilePath/Name/Ext/NameWOExt pascal versions fixed.

[-] TDirList.ScanDirectory asm-version fixed (the last backslush is not necessary now in path passed as a parameter).

[-] Hex2Int (Pas-version) fixed: non-hexadecimal characters were skipped instead stopping scan process.

[+] TColorDialog added to KOL.

[*] TControl.Click method is changed for button control (now it is sending WM_COMMAND with BN_CLICKED=0 code).

[-] TIniFile.ValueBoolean fixed: in ifmWrite mode, always False was returned.

[-] SortData fixed (asm-version): was sorting incorrectly sometimes (but with no faults therefore).

[-] TControl.WndProc asm version fixed (great thanks to Peter Feldbaumer and Alexey Shuvalov, who reported about the bug - with incorrect handling OnMessage for case of single form). Also, both Pascal and and asm version are changed to allow sequential handling of OnMessage and dynamic handlers first by Applet, and then by the form - until message is handled and True returned.

[+] New version (2.0) of xHelpGen application is published. It is now ported to KOL and improved a lot.


KOL 0.38 (2-Dec-00)

[+] New project started - KOL Mirror Classes Kit. It is now published in following state: 5 mirror components are ready to register it on Delphi Component Palette: TKOLProject, TKOLForm, TKOLApplet, TKOLButton, TKOLLabel. This is only a sceleton model, but it works, and allows even to assign event (OnClick). Designing of forms, adjusting of properties and writing code for event handlers can be made at design time, and when mirror project is started, real KOL project is created. Then, it can be opened in IDE, compiled and debugged.
   KOL MCK will be distributed freeware with sorces (in return, I hope, that You help me to finish this work - reporting bugs, making suggestions how to perform some tasks easier and so on).


KOL 0.37 (26-Nov-00)

[-] Asm version of NewApplet fixed (was: incorrect minimize/restore system menu commands preparing). Also TControl.WndProc (asm version) fixed for SC_MINIMIZE command handling.

[-] toolbar: TBAddButtons method (asm-version) fixed for case when there are no buttons added first time in NewToolbar call.
[*] Option tboTextBottom added, and option tboTextRight became default (i.e., its absence is ignored, and it is not applyed only if tboTextBottom used when toolbar is created). This change allows to force correct toolbar buttons sizing in case, when no text labels used.
[*] Another small change: it is possible now to pass empty string to create toolbar button with no label. (Earlier it was necessary to pass string containing at least one space).

[+] Method Click added to TControl. For controls, which (like buttons), can be clicked via WM_COMMAND message, this message is performed with the most appropriate code parameter. Otherwise, clicking is simulated by performing WM_LBUTTONDOWN / WM_LBUTTONUP messages.
[*] Method SetRadioChecked is renamed to SetRadioCheckedOld, and new one with name SetRadioChecked is replasing it. It is actually calls new method Click, and works fine even if control (radiobutton) is not visible (may be, together with the form).

[+] Windows utility functions ported from XCL with some changes: FindWindowByThreadID, GetDesktopRect, WindowsShutdown. New functions added: GetWindowChild( { wcActive, wcFocus, wcCapture, wcMenuOwner, wcMoveSize, wcCaret } ), GetFocusedChild, Stroke2Window, Stroke2WindowEx.

[+] Property AlphaBlend (0..255) added to TControl, which allows to make any control or form semi-transparent in Win2K.

[*] CanResize property is implemented by another way. It now prevents window resizing monitoring WM_GETMINMAXINFO message in dynamically attached procedure. Since this, any attempts to resize window (e.g. using external tools) are failed. (So, assign False to CanResize property of form only after finishing of placing all controls on it and all necessary size adjustments, just before showing it in its ending size and position).

[+] Section Applications is opened on KOL site with applications made using KOL. If You have any, tell me, and I will place link to your site there. For now, my boot2000 utility placed there after porting it from XCL.


KOL 0.36 (19-Nov-00)

[+] FontWidth property added for TGraphicTool, implementing font object. This allows to scale fonts non-proportionally, i.e. to scale it in given direction (e.g. vertically) leaving another direction untouched.

[-] ExtractFilePath, ExtractFileName, ExtractFileExt, ExtractFileNameWOExt functions fixed for case when only name is present or path contains only drive letter without slush (e.g., 'AAA.TXT', 'C:AAA.TXT' ).

[+] Non-visual TTree object added. (Not for representing trees, but to organize data in memory.)

[-] Asm version of TDirList.ScanDirectory fixed (always current directory was scanned).

[-] Asm version of function IndexOfCharsMin fixed (result was not the first, but the last required character). This function was used very rare, but therefore could affect some of code.

[-] Asm version of functions LowerCase and UpperCase fixed ('Z' was not converted to 'z').


KOL 0.35 (14-Nov-00)

[-] Some fixes for TBitmap (asm version of GetCanvas and FormatChanged methods).

[-] TIcon tested (did not tested before, just ported from XCL) and fixed for some bugs.

[-] Notes added for NewToolbar (how to fix incorrect sizing of buttons under Windows9x in case when all buttons have no text labels).

[+] HasBorder property now works for controls too, not only for forms.

(Though and files are affected, these are included to archive, so download only this package now).


KOL 0.34 (29-Oct-00)

[-] Some fixes for ImageList, used with tree view and list view controls. Image lists with any size are now recognized well. Problems with overlay image are solved (property Overlay[1..15]: integer added for TImageList object to determine which images to use as overlaying ones).

[+] Two functions added to work with text in clipboard: Text2Clipboard and Clipboard2Text.

[+] Property AutoRecreate added to TTrayIcon. When set to true, it provides auto-recreating (re-activating) of tray icons in case of explorer restart.

[-] Asm version of splitter control window procedure fixed.
[-] Aligning fixed for (initially) invisible controls.

[+] Another "transparent" method added: Size( w, h ) to simplify adjustment of controls. It is very like to SetSize method but specially designed for aligned controls and provides correct resizing of such ones, automatically resizing its parents (recursively, if needed).

[+] Property ToBeVisible added. It is True, when control is Visible or temporary invisible because of creating its parent form/control hidden (but it becomes Visible together with showing its parent form/control). Though this property is mainly for internal purposes, it is possible to use it instead of Visible in a project.

[a] The rest of basic procedures is compiled to basm, so minimal size of executable, containing only single empty form (see TestKOL.dpr), is now only about 13K. (And can be made only 8K after stripping relocations and compressing with compressor utility).


KOL 0.33 (22-Oct-00)

[*] Sorry a lot, but due translating of WndProcKeybd procedure to BASM, I decided to change TOnChar event type and to add parameter Shift, which bring a combination of shift states like for TOnKey event. This is the first time for a long period, when I make a decision, which can affect your code and You should change it (if You use OnChar event). Only what compensate for us, this change allowed to make WndProcKeybd asm code about 168 bytes smaller then in Pascal version.

[-] Asm version fixed for NewForm, NewPaintBox, NewWordWrapLabel and ApplyImageLists2Window (the last was wrong for NewListView mainly).

[+] Another control added: NewTabControl( aParent, aTabs[ ], aOptions, aImgList, aImgIdx1st ): PControl. It allows to place child controls on its Pages[ ], only one of which can be visible at a time.

[+] Another (one more) control added: NewTreeView( aParent, aOptions, aImgListNormal, aImgListState ): PControl.


KOL 0.32 (15-Oct-00)

[+] Event OnTestMouseOver added, which allows to improve testing if mouse is actually over the control (useful for non-rectangular bitbtn buttons).

[-] ShowModal (method of TControl) fixed (if modal form is closed with default close button, it is now set its ModalResult to -1 and not destroyed). Thanks to Michael A. Sewell for this bug report.

[-] RichEdit: RE_SearchText fixed. Another parameter added - ScanForward. Thanks to Michael A. Sewell for this bug report.

[-] Combobox: Tabulating fixed again for comboedit (when coReadOnly is not in Options).

[a] A lot of code converted to BASM and optimized.

Unfortunately, I have to stop temporarily sending newsletter mail because of some problems with this service (mail can not be delivered properly to about 10% of recipients, instead I receive about 70 mails about unsuccessful attempts to do this every time). Therefore, You still can subscribe here for future. Sorry for inconvenience. At least, I promise, that this page will be updated every weekend, so check if it is changed every Monday or Tuesday.


KOL 0.31 (8-Oct-00)

[!] KOL Forum is open. Thanks to Erik Nordlund, who made it for us.

[-] ListView fixed for StateImageIndex and OverlayImageIndex (LVInsert, LVAdd methods of TControl). Also lvsDetailNoHeader style fixed for ListView control. Thanks to Mike Talcott for his report and advises.

[-] RichEdit: assigning values to RE_FmtBold, RE_FmtItalic and so on (which are boolean) fixed. Asm version of SetSelLength fixed.

[*+] Method Add improved and now it is understanded by Edit controls too. For RichEdit control, it is necessary to access RE_Text property at least once to provide appending text with Add method.

[+] Another control added: NewBitBtn( aParent, aCaption, aOptions: [ bboImageList, bboNoBorder, bboNoCaption, bboFixed ], aLayout: { glyphLeft, glyphTop, glyphRight, glyphBottom, glyphOver }, GlyphBmp_or_ImageList, GlyphCount__or__ImgIdx_and_GlyphCount_shl16 ): PControl with additional properties Flat, RepeatInterval. This button allows changing of Font, Color and even can be totally Transparent. Also, it can contain up to 5 glyphs for different states, stored in bitmap or image list.

[+] Now button (usual or BitBtn) can be non-focusable, like TSpeedButton in VCL - with applying new method LikeSpeedButton.

[+] Events OnMouseEnter / OnMouseLeave and property MouseInControl added for TControl.

[-*+] Last announce about fixing Transparent for edit control was not correct a bit. Now special property Ed_Transparent added for TControl, which actually makes edit control transparent while editing, selecting and scrolling editbox content with keyboard and mouse.

[*] Remarks made how to get vertically oriented toolbar.


KOL 0.30 (1-Oct-00)

[-] TTrayIcon fixed: now icon is removed from tray automatically only if master window receives WM_CLOSE or WM_NCDESTROY message (earlier handle was not checked, and all tray icons was becoming not Active in result of destroying of any form). Thanks to Vadim Petrov for bug report.

[-*] Tabulate and TabulateEx methods are fixed. Now, both WM_KEYDOWN and WM_KEYUP are analized, and though tabulating occure on WM_KEYUP only, undesired handling of key by control in both cases is prevented (though OnKey... event is called therefore). Since this, pressing arrow up key in single-line edit control, for example, leads only to tabulating to previous control, and without changing of position in edit control.
   Another thing: TabulateEx uses now real window rectangles, so smart tabulating with arrow keys works more correctly.

[-] TOpenSaveDialog fixed for DefExtention assigned (asm version). Thanks to Ferenc Lutischan for bug report.

[-] Event OnMessage fixed for forms and now is called not only for main form or applet, but for any control too. Thanks to Carlo Kok for report about lack of correspondance of behaviour with documentation.

[-] TControl.GetCaption asm-version fixed for case, when caption is empty. Thanks to Erik Nordlund for bug report.

[-] LabelEffect over GradientPanel fixed (window procedure changed a bit for LabelEffect). Also, DoubleBuffered for form fixed (and all similar pieces of code are checked to avoid possible bugs in double-buffered drawing). And, Transparent is fixed for Editbox (now it is possible to edit text in transparent editbox, placed over gradient panel too, but until its content is scrolled horizontally).

[-] MemoryStream: SetPosition fixed (and returns now new position, like FileStream).

[a] Statusbar-related code is translated to BASM.
The rest of (TCanvas, TGraphicTool) is translated to BASM.
All methods, marked with __! recompiled to BASM again (asm version code was abandoned after adding RichEdit temporary, and now restored, but with new features supported).
The most of and rest of is translated too.

KOL_INC changes:

[-] In, asm version of TGraphicTool.MakeFontHandle fixed a bit (assigning value to FontWeight property).

  Some serious changes made in inc-files, so with version 0.30 You have to download both and


KOL 0.28 (24-Sep-00), KOL 0.29 (27-Sep-00)

[-] Some fixes for Toolbar control:

  • To align toolbar at the top edge of a parent, it is necessary to pass caNone as Align parameter (for NewToolbar), and then assign normal Align property to caTop (or call SetAlign( caTop ) )- for case, when Align property is used in other controls on form.
  • Click (left and right, on button, drop-button or free area of toolbar) is recognized now correctly (though even with less of code).
  • If there are no tooltips set, Access Violation now removed when mouse is over button.

[*] Fixes and changes  for Listview control:

  • {-} Using image lists fixed for list view (lvsIcon, lvsSmallIcon view styles).
  • {+} LVItemImageIndex property added.


  • {-} taCenter and taRight text aligning styles fixed.

If You have already downloaded v0.27, just download new version of ( is not changed).


KOL 0.27 (23-Sep-00)

[-] Fixed: CPU Usage showing by Windows Task Manager, now lowered from 100% to normal value (call of WaitMessage inserted to message loop).

[*] The most of static calls (by pointer) of extended control's window procedures replaced to dynamic handlers. This makes code smaller and fast a bit, and increases flexibility for programming new features. (Though the are no changes in interface to objects and since there are no needs to change anything in your projects).
  E.g. following this change, event OnResize added for all controls (TControl), and without of adding any code to executable unless this event is assigned to a value.

[*] RichEdit:

  • {-} Fixed: for Windows versions, which have different RichEdit dll's installed, NewRichEdit now is trying first RICHED20.DLL ('RichEdit20A' class), then RICHED32.DLL and RICHED.DLL as a last thing (both with 'RichEdit' window class). Also NewRichEdit1 added to work only with version 1.0 of RichEdit control.
  • {-} Fixed: appearing of scrollbars after resizing of RichEdit.
  • {-} Fixed: OnSelChange event for RichEdit.
  • {+} Now  TCharFormat2 and TParaFormat2 structures are used to get / change formatting attributes (but not for case of using RichEdit v1.0).
  • {+} For method RE_FmtStandard (which extends keyboard handling for RichEdit control with additional key shortcuts, such as CTRL+B - bold, CTRL+I - italic, etc.), CTRL+SHIFT+Z calls now RE_Redo operation (CTRL+Z - undo - is provided by RichEdit itself).
  • {+} Support for other formatting keys added (in method RE_FmtStandard), such as CTRL+L (align left), CTRL+E (align center), CTRL+R (align right), CTRL+J (justify - new), though these all can work in some versions of Windows or RichEdit support dlls.
  • {+} CTRL+SHIFT+U extends CTRL+U underline key (in RE_FmtStandard) with switching between underlining styles for RichEdit2.0 (dotted -> double -> words -> single ->), though some of these could not be displayed but only stored in text (as well as for most of other new RichEdit2.0 capabilities).
  • {+} New properties RE_NumStyle, RE_NumBrackets, RE_NumStart, RE_NumTab, allowing to use advanced numbering styles (numbers, letters, roman numbers, bracketing). CTRL+N and CTRL+SHIFT+N key combinations added to RE_FmtStandard method to allow for user to change numbering styles with keyboard.
  • {+} New properties RE_SpaceBefore, RE_SpaceAfter, RE_LineSpacing, RE_SpacingRule and correspondent RE_SpaceBeforeValid, RE_SpaceAfterValid, RE_LineSpacingValid to format paragraphs.
  • {+} Event OnProgress added (for loading or saving RichEdit from / to stream, file or ansi string).
  • {+} Event OnRE_InsOvrMode_Change, properties RE_OverwriteMode, RE_DisableOverwriteChange added - to monitor and control switching between insert/overwrite modes.
  • {+} Property RE_Transparent added - to implement transparency especially for RichEdit (usual Transparent method has no effect for RichEdit, as well as DoubleBuffered property, by design of RichEdit). This looking fine, but with great number of flicks when control is resizing (though scroll flicks are eliminated at all).
  • {+} Events OnRE_OverURL, OnRE_URLClick and string property RE_URL added to work with URL.
  • {+} Property RE_CharFmtArea ( raSelection, raWord, raAll ) added to determine, which characters to format or for which area to obtain formatting attributes using properties RE_Fmt..., RE_Font... and RE_CharFormat.
  • {+} All kinds of cursors, provided by RichEdit control, are now working without problem.
  • Now, the most of planned features are implemented well for RichEdit. And if You fill, that something is not sufficient, give me know.

[-] Function StrIsStartingFrom fixed (thanks to Marco Bobba - Marisa Bo).

[*] Starting from now, KOL archive is separated onto two zips:, containing kol.pas and sample dpr sources, and with all other stuff, including .inc-files, needed to install KOL. The second contains parts, which are changing rare, so You have to download it only if it is changed (I will tell You with every new release of, whether new version of is published).


KOL 0.26 (15-Sep-00)

[+] New control - rich edit text control. NewRichEdit( Parent, Options ): PControl. At least in first approximation, it is ready to use. Extended styles and options (such as "justify" text align style, additional numbering styles, underline styles, tables etc.) will be added later.

[+] Selection(: String) property for edit and RichEdit control.

[+] TControl.TabOrder property - very like to VCL (but with adding code, needed to change it, only if TabOrder is changed in project).

[+] TControl.Focused property for TControl.

[+] Method TControl.SelectAll (for edit, rich edit)

[+] Function File2Str( F ): String

[-] Fixed text align style for list view control (LVColAdd method).

[-] Fixed: asm-version of TControl.GetClientHeight.


StrDB unit (13-Sep-00)

[+] Additional unit StrDB.pas by Mike Talcott. It contains TStrTable object, incapsulating simple database table with fixed fields (named). Created table can also be accessed from MS Access (text file with fixed widths - with some limitations). is available to download as separate unit with author's comments.


KOL 0.25 (13-Sep-00)
[+] Property Align added for TControl. Now it is possible to adjust controls on its parents using habitual for Delphi aligning styles (coLeft, coTop, etc.) To simplify initial assignment of Align property, function SetAlign( aAlign ): PControl added (to TControl), which returns pointer to a control itself (thus is, this method also is "transparent", and can be called in the same Pascal operator, where object is created - see TestKOL4 project).


[+] Another control added: splitter control, very similar to TSplitter in VCL.

[-+] Fixed: DoubleBuffered property. Transparent and DoubleBuffered drawing is improved a lot.

[+] Added method PreventResizeFlicks. If been called for a form (or control, or applet window), it eliminates the most of flicks, appearing as a result of realignment of controls due resizing of form (or splitting its controls).

[+] Several functions are added to play WAVE from resource, memory and file and to play sound, associated with standard event easy:
  • PlaySoundMemory( Memory: Pointer; Options:set of [ poLoop, poWait, poNoStopAnotherSound, poNotImportant ] )
  • PlaySoundResourceID( Inst, ResID: Integer; Options )
  • PlaySoundResourceName( Inst: Integer; const ResName: String; Options )
  • PlaySoundEvent( const EventName: String; Options )
  • PlaySoundFile( const FileName: String )
  • PlaySoundStop

[+] Two functions are added to retrieve/adjust volume for wave output:

  • function WaveOutChannels( DevID: Integer ): set of [chLeft, chRight];
  • function WaveOutVolume
  • ( DevID; Channel: {chLeft, chRight}; NewValue ): Integer

[+] TMediaPlayer transladed to BASM. Some other properties and methods are added to TMediaPlayer to control speed, volume and turn on/off audio or/and video.

[-] Fixed: Combobox when option coReadOnly omit. In this mode, keys "Escape" and "Enter" close up dropped down combobox list normally now. ("Escape" means cancel selection, "Enter" - confirm new selection, as usual). Also default sound removed when tabulating from combobox - by changing tabulating handling algorithm a bit (now it process WM_KEYUP, not WM_KEYDOWN message. This allows not to receive correspondent WM_KEYUP in newly focused control).

[*] IDC_IBeam cursor provided automatically now for edit control.

[+] AddDirList method now works for Combobox too (initially it was created for Listbox only).

[-] Fixed: CenterOnParent method of TControl (asm version). Thanks to Y.X.B. for report.

[-] Fixed: pressing Tab key in edit control now moves focus to another control only, but if (new) style eoWantTab is used in create edit control, this key inserts "tab" character to a text instead.

[-] Fixed: ExtractFileName, ExtractFilePath, ExtractFilaNameWOExt, ExtractFileExt. Thanks to Y.X.B. for report.

[*] All attempts to made KOL compatible with Delphi2 failed now. Since this, Delphi3, Delphi4 and Delphi5 are supported only. Current version (and new features) was tested for Win95, Win98, WinNT4SP5, Win2000).


KOL 0.24 (05-Sep-00)

[-] Some fixes for TBitmap (mainly ASM version, and pf16bit format).

[-] Fixed: fsBold style for Font (asm version).

[-] Fixed: DoubleBuffered temporarily disabled due some problems in using it under Win9x. For LabelEffect, it is changed to work correctly without DoubleBuffered (but with some flicks possible). So, GradientPanel and GradientPanelEx are both working properly (small fix made for GradientPanelEx - asm version to provide working without DoubleBuffered as well).

[+] New object TMediaPlayer (non-visual). It is more compact than TMediaPlayer in VCL, but even more powerful (though it is non-visual, so control bar with buttons is not provided). Tested for WAV, MID, RMI, AVI (including AVI with sound), CD audio tracks, MP3 sound files (under Win2000), MPG (video and sound - under Win2000).


[+] Several functions to work easy with registry:
  • RegKeyOpen( BaseKey:HKey, SubKey: String ): HKey
  • RegKeyGetDw( Key: HKey; ValueName: String ): DWORD
  • RegKeyGetStr( Key: HKey; ValueName: String ): String
  • RegKeySetDw( Key: HKey; ValueName: String; Value: DWORD ): Boolean
  • RegKeySetStr( Key: HKey; ValueName: String; Value: String ): Boolean
  • RegKeyClose( Key: HKey )


KOL 0.23 (30-Aug-00)
[+] TBitmap finished (methods to draw with stretching, transparent, to convert to monochrome mask and others implemented). Another constructor added: NewDIBBitmap( width, height, pixelformat ): PBitmap. RotateRight and RotateLeft (and several other) methods added to rotate DIB bitmap 90 degree right or left (these are supporting all possible pixel formats, so code rather big). Properties DIBPixels[ ] and Pixels[ ] to access certain pixels, method CopyRect to copy part of bitmap to another bitmap object without Canvas, methods FlipVertical and FlipHorizontal and other.

[+] TIcon ported from XCL (originally, ZIcon). Several methods to load from resource and from another executable added.

[-] Fixed: asm version of TControl.GetCanvas

[+] TBitmap translated to BASM.

[+] Another gradient filled panel added: NewGradientPanelEx( Color1, Color2, Style: (gsHorizontal, gsVertical, gsRectangle, gsElliptic), Layout: (glTopLeft, glTop, glTopRight, glLeft, glCenter, glRight, glBottomLeft, glBottom, glBottomRight) ): PControl. Idea by Vladimir Stojiljkovic, and implemented with assistance of him (thanks a lot).


KOL 0.22 (19-Aug-00)
[*] TStrList is improved a lot for fast working with huge texts and compiled to BASM. Also it is tested and a couple of doubt pieces of code  (may be bugs) rewritten.


[+] TBitmap object added. Some of methods still not implemented (see source), but drawing of bitmap as well as drawing onto bitmap (using its Canvas property) are provided. Also DIB's supported well, including changing PixelFormat and HandleType and access to bitmap pixels directly using ScanLine[ ] property - like for TBitmap in VCL. Loading and saving from/to file or stream are ready too. Other advanced features (scaling, transparency, rotating, etc.) will be provided later.


KOL 0.21 (13-Aug-00)

[+] Compatibility with Delphi2 provided.

[-] Changing TControl's property Font subproperties fixed.

[+] Property FontWeight added for font (object TGraphicTool).


[+] TThread ported from XCL, and now it uses only API calls and has method Synchronize.

[+] TDirChange ported from XCL (was ZFileChange, by Tim Slusher). And now it works fine in Windows9x too (with WatchSubtree = True).

[-] AnsiCompareStrNoCase, _AnsiCompareStrNoCase functions fixed (did not work in Windows9x). Consequensly, TDirList.Sort now works correctly in Win9x.

[+] Added: method TControl.AddDirList( filemask, attrs ) specially for list box control - to add directory list to a view for one Perform message operation.

[+] Added: TControl.ShowModal method (to show form modal).

[-] Fixed: working of accelerators of current form when applet button window is used.

[-] Fixed: asm version of mouse events handling. (And improved a bit).

[+-] TStrList methods translated to BASM. Fixed: freeing memory when destroyed. Improved: working with huge lists much faster now.

[+] For OnClick in toolbar, it is now possible to know if it was made by right mouse button (property RightClick).

[-] Small fix in xHelpGen (Pascal code highlighting - reserved word 'then'). Comments added for TIniFile and some other objects.


KOL 0.20 (8-Aug-00)

[-] TStrList.SaveToFile fixed. (SetEndOfFile call added to truncate file). Also, Write method changed by the same way for 'WriteFileStream'. Made notes about 'ReadWriteFileStream', that it is necessary to set its new stream Size programmatically (to provide truncating it, if necessary).

[+] Method Clear added to TControl to provide different clear procedures for every visual object (e.g., for label, button, etc. it clears Caption =Text, for aggregate controls like listbox, listview, toolbar it removes all items etc.)

[+] Some improvements for toolbar:

  • Read/write property TBButtonImage[ BtnID ] added for toolbar to allow obtaining / changing button image index.
  • Added property TBButtonWidth[ BtnID ]. If set once, button stops from further autosizing. (Now all buttons are initially created with TBSTYLE_AUTOSIZE).
  • Property TBButtonText[ BtnID ] became read/write.
  • When toolbar is created with caNone aligning style, it is not autosizing when form is resized, and is not aligning automatically too.
  • Option tboNoDivider added to list of available toolbar options.
  • TBButtonAtPos function returns now command ID = 0 for all separators, and new method TBBtnIdxAtPos return true index of button, even of separator.
  • TBDeleteBtnByIdx( Idx ) procedure added to allow to delete separator buttons, which have no its own command ID (and since could not be delete using TBDeleteButton( BtnID ) ).
  • All toolbar related methods are translated to basm, with economy of several hundreds bytes.

[-] Fixed: comments about separators in toolbar. It is necessary to pass any integer in place of bitmap image index correspondent to separator to assign other image indexes correctly.

[+] Help Generator application (initially created for XCL) is adapted to KOL.
xHelpGen.exe version 1.5 is available for download now. (For those of readers, who don't know: run it in KOL directory, and it will create about 350K of documentation about KOL in  html format. Docs are generated on base of {* } comments, placed in interface part of KOL.PAS, so with every new version of KOL, You instantly will be provided with the most fresh and complete documentation.)

[+] Some comments are added / fixed in source to be used with (announced above) Help Generator.


KOL 0.19 (2-Aug-00)

[~] First about transparency. As You could see, some of controls (ListBox, ListView, Combobox, Editbox) - are not friendly for this property. It is not possible to provide full transparency support for such controls without owner-drawing. This contradicts with main idea of KOL - using of control's ability to draw itself without inserting of additional code to a program. So, I decide to provide transparency only for several basic controls (see TestKOL3 sample).

[+] TOpenSaveDialog object ported from XCL, with a couple of changes. Now it remember new selected FilterIndex if Execute was successful. Also fixed allocating memory for osAllowMultiSelect option. Also assembler version is provided for TOpenSaveDialog.Execute (474 bytes smaller).

[+] TOpenDirDialog object ported from XCL, and with very essencial complements: it is now possible to change its InitialPath (property). It is also possible to center it on screen (property CenterOnScreen: Boolean), set OnSelChanged event where to enable/disable OK button and/or change status text in responce to selecting another directory in a dialog by user. Additional code, needed to provide such capabilities, is included into executable only in case, when properties CenterOnScreen / OnSelChanged are set in a project. Assembler version is provided as well.

[-] Fixed small bug in TMenu.ParentItem which caused to insert hidden earlier menu item to the end of menu (wrong, certainly, but without further consequences).

[+] Another common control is implemented - toolbar. Constructor: NewToolbar( parent, align: { caLeft, caTop, caRight, caBottom }, options: set of [ tboTextRight, tboFlat, tboTransparent, tboWrapable ], Bitmap, Buttons: array of PChar; BtnImgIdxArray: array of Integer ): PControl; Properties, Events, Methods (in TControl):
   procedure TBAddBitmap( Bitmap ),
   function TBInsertButtons( Idx2InsertBefore, Buttons: array of PChar, BtnImgIdxArray: array of integer): Integer
   function TBAddButtons( Buttons, BtnImgIdxArray ): Integer
   TBButtonCount (read-only),
   function TBItem2Index(Item),
   function TBIndex2Item(Idx),
   TBButtonEnabled[ Item ],
   TBButtonVisible[ Item ],
   TBButtonChecked[ Item ],
   TBButtonMarked[ Item ],
   TBButtonPressed[ Item ],
   TBButtonText[ Item ] (read-only),
   TBButtonRect[ Item ] (read-only),
   function TBButtonAtPos(X,Y): integer (returns Item)
   TBSetTooltips( Item1st, Tooltips: array of PChar ),
   OnTBDropDown event (= OnDropDown event)
   OnTBClick event (= OnClick event ), in both events CurItem, CurIndex properties can be used to determine which button is clicked.
   Toolbar is tested with a very wide set of different options and modes, see TestKOL3 demo project.

[+] Added OnDropDown event (the same for combobox and drop-down buttons of toolbar), and OnCloseUp event (for combobox).

[+] Added properties ProgressColor and ProgressBkColor for progressbar control (implemented in TControl object).
Added constructor NewProgressbarEx( parent, options: set of [ pboVertical, pboSmooth ] ): PControl, which allows to create progressbar with additional (two) styles.

[-] ListView.Items[ ] property fixed for columns > 0 under Windows < 2000.

[-] TObj.fRefCount initialization fixed for Delphi3 (as a result, image list maintainance is fixed for TObj, and projects with List view instances are exiting normally when compiled in Delphi3).


KOL 0.18 (21-Jul-00)

[*] TMenu object translated to BASM (~1,5K smaller) and its implementation moved to

[+] TImageList object ported from XCL XImageList class.

[+] Another common control is implemented: list view control. It can also (partially) replace grid controls in lvsDetail view style (at least it is looking very similar to a table with a header in that mode, with strings in cells).
   Constructor: NewListView( parent, style:{ lvsIcon, lvsSmallIcon, lsvList, lvsDetail, lvsDetailNoHeader}, options: set of [ lvoIconLeft, lvoAutoArrange, lvoButton, lvoEditLabel, lvoNoLabelWrap, lvoNoScroll, lvoNoSortHeader, lvoHideSel, lvoMultiselect, lvoSortAscending,lvoSortDescending, lvoGridLines, lvoSubItemImages, lvoCheckBoxes, lvoTrackSelect, lvoHeaderDragDrop, lvoRowSelect, lvoOneClickActivate, lvoTwoClickActivate, lvoFlatsb, lvoRegional, lvoInfoTip, lvoUnderlineHot, lvoMultiWorkares ]; ImageListSmall, ImageListBig, ImageListState: PImageList ): PControl
   Following properties and methods specific for list view added to TControl:
   ImageListSmall, ImageListBig, ImageListState: PImageList
   LVStyle: { lvsIcon, lvsSmallIcon, lsvList, lvsDetail, lvsDetailNoHeader}
   LVOptions: ... see above
   LVTextColor, LVTextBkColor, LVBkColor: TColor
   LVColCount (read only), LVCount (=Count)
   procedure LVColAdd( text, align, width )
   procedure LVColInsert( idx, text, align, width )
   procedure LVColDelete( idx )
   procedure LVAdd( text, imgidx, state, stateimg, overlayimg, data )
   procedure LVInsert( row, imgidx, state, stateimg, overlayimg, data )
   procedure LVSetItem( row, col, imgidx, state, stateimg, overlayimg, data )
   LVItems[ Row, Col ]: string
   OnEndEditLVItem: function( Sender, Row, Col, NewText ): boolean
and others.


[*] Method Perform( msgcode, wParam, lParam ) added to TControl. Calls to SendMessage are replaced with call to Perform where it is possible.
   Directive index is used to unite some property handling procedures and functions.
   Methods Tabulate and TabulateEx translated to BASM. Now Tabulate it is very cheap - only about  270 bytes in implementation (if used).
   Several other tricks used to optimize assembler version of code. All these changes made executable smaller about up to 1,5K.


KOL 0.17 (15-Jul-00)

[-] Working with negative filters (^filemask) fixed in TDirList (NewDirListEx).
[*] TDirList translated to Basm (Pascal part also improved and well optimized). Finally, TDirList implementation moved to

[*] SortData also translated to BASM. 272 bytes smaller and... seems to be working yet. :-)

[+] ProgressBar added into TControl. Constructor: NewProgressbar( parent ): PControl. Two special properties: Progress and MaxProgress.

[+] StatusBar added into TControl - not as a separate control (though a control is created internally for it), but instead its properties are accessible from owner form object (this is because in KOL form can have only single StatusBar aligned to bottom edge of one). There are no additional code added to executable unless following properties and methods of form object (TControl) are accessed and changed:
   property StatusText[ Idx ]: PChar
   property SimpleStatusText: PChar
   procedure RemoveStatus
   function StatusPanelCount: Integer
   property StatusPanelRightX[ Idx ]: Integer
   property StatusWindow: HWND (read only)
Additionally, StatusBar is not considering as a part of client area of form, and form accurately resized when status bar is added or removed. See also comments in source - these are sufficiently detailed.

[+] New type of control - gradient fill panel. Constructor: NewGradientPanel( Parent; Color1, Color2 ): PControl. (And also two special properties Color1 and Color2 for TControl, which can be sometimes of those type of panel). Looking especially cool with setting to True new property TControl.Transparent: Boolean (inheritable by child controls and uses DoubleBuffered drawing, introduced earlier). This feature is carefully tested in all versions of Windows (95, 98, NT, 2K). And DoubleBuffered is improved - it now prevents also some kind of flickering in static controls too.

[-] Num2Bytes function fixed for Delphi3 ("thanks" to Inprise Inc. for improving _TRUNC function in D4,D5).

[+] TMenu object - ported from XCL with some changes. The main difference is that it is now totally compatible with Delphi3 (and other changes in KOL are also checked to be compatible with Delphi3 again).
   Constructors: NewMenu( AParent: PControl; FirstCmd: Integer; Template: array of PChar; aOnMenuItem: procedure( Sender; Item ) of object ): PMenu
   NewMenuEx( AParent, FirstCmd, Template, aOnItems: array of TOnMenuItem ): PMenu
   TMenu object can play role of main menu or popup menu depending on kind of parent control and creation order (only first menu of form become its main menu, all others - popup).
   Template is organized like in XCL menu. E.g. [ '&File', '(', '&New', '&Open', '&Save', 'Save &as...', '-', 'E&xit', ')', '&View', '(' ... ]. But radioitems (with leading '+!' or '-!') and items defined with leading '+' or '-' (check items) are checked/unchecked automatically when clicked. Additional method AutoPopup allows to display popup menu automatically (when its owner control receives WM_CONTEXTMENU message). Additionally, it is possible to change other menu item data, such as checkmark bitmap (unchecked only: ItemBitmap[ ]: HBitmap), text (ItemText[ ]: string), enabled state (ItemEnabled[ ]: boolean), shortcut accelerator keys (ItemAccelerator[ ]: TMenuAccelerator) and even menu item visibility (which implemented in a pair of methods and simulates changing of visibility by removing and restoring menu items: ItemVisible[ ]: boolean) - using usual properties. See other details in source.


KOL 0.16 (11-Jul-00)

[*] ResizeParent... methods are changed again. These ones now change size first time without conditions, second and other times (for the same parent) - only to increase its size. It is not necessary now to set initial size of parent control to be small, and therefore You can now call correspondent resizer several times (for several children) to provide fitting to parent client area for all of these child controls.

[+] Support of "geometric" pen added to TGraphicTool (property GeometricPen: Boolean). There are no additional code, if geometric pen not used. Additional properties to adjust geometric pen: PenBrushStyle:TBrushStyle, PenBrushBitmap:HBitmap, PenEndCap:{pecRound, pecSquare, pecFlat}, PenJoin:{pjBevel,pjMiter,pjRound}.


[+] TTrayIcon object ported from XCL XTrayIcon. (With optimizing and translating to BASM).

[+] JustOne and JustOneNotify functions ported from XCL with small changes:
parameter Wnd: PControl added to link to main form or applet window and release mutex when application is finished,
special object to receive notification from another instance (JustOneNotify) is not created, only regular routines are used. All four routines needed to implement JustOne and JustOneNotify are optimized and translated to BASM.

[+] Several more routines from are optimized and translated to BASM (Hex2Int, Int2Ths, Num2Bytes, Str2Int, TrimLeft, TrimRight, Trim, CopyTail, DeleteTail, IndexOfChar, IndexOfCharsMin, IndexOfStr, Parse, StrPCopy, StrEq, AnsiEq, StrIn, StrSatisfy).

[+] SortData routine ported from XCL.


[+] TStrList object ported from XCL with some changes. Method Sort is new native method of TStrList.

[+] TDirList object ported from XCL ZDirList class. Constructor: NewDirList( path, filemask, attrmask ): PDirList
Can be sorted using array of rules (like in XCL).


KOL 0.15 (7-Jul-00)

[*] ResizeParentRight and ResizeParentBottom (and ResizeParent too) changed to resize only for increasing size of parent control. If form can be smaller, then by default, just set initial size of form sufficiently small (e.g. calling SetSize(100,20) for form immediately following creating it). These changes allow easy resize form to fit all right / bottom controls, even not justified (having different right / bottom coordinates).

[-] Small bug with CreateVisible property fixed. For application having applet button, which is set to invisible, form is normally showing when Run procedure is called. Also StayOnTop method is not now creating window if it is still not created.

[*] Small change in LabelEffect implementation: shadow color now is calculated as mixed between font color and clBlack, not cl3DDkShadow.

[+] TCanvas more optimized and totaly translated to assembler. The same for TGraphicTool. And implementation of these both objects moved to module.

[+] DoubleBuffered painting improved: it is possible now to use control's Canvas regadless of is control painting through buffer or not. The only disadvantage is that if DoubleBuffered is set in program, some metods from TCanvas are referenced and included into executable (even if canvases are not actually used in project).
   Implementation of label effect is changed correspondantly to this change (it does not check if it is DoubleBuffered and does not create temp canvas if yes, native Canvas is used always).

[-] OnMouse... events fixed for form (handler call moved to common WndProc method from particular WndProcCtrl, but as earlier, code is added only if properties OnMouse... are changed in program). Also, assembler version fixed (separate bug was found) and improved a bit.


KOL 0.14 (5-Jul-00)

[+] dynwndmsg.pas unit is removed from KOL package (both procedures from it are moved to kol.pas, though these are not used now - and possibly will not be used in future too).

[+] File and directory utility routines are ported to KOL from XCL. Some names of functions are changed, code is optimized and in most cases translated to built-in assembler. Declarations are placed directly in interface section of kol.pas, and implementation is located in file

[+] Date/time routines are ported from XCL similar that it is done for file / directory ones. Please remember, that TDateTime type in KOL is counting days from 01-01-0001 A.D., not from 01-12-1899 (like in VCL). Implemetations are located in file.

[*] MsgOK / MsgBox routines can now work without Applet variable assigned or forms created (i.e., outside of Run procedure). In that case defaut displaying title for message box is: 'Error'. This increased size of code onto 4 bytes.

[+] Streams are implemented for KOL (by another way, than in XCL). Both main types of stream - memory stream and file stream are incapsulated into a single object type TStream. Instead of using technique of virtual methods, dynamic pointers to procedures are applied, filled in in "constructors":
  • NewMemoryStream: PStream
  • NewReadFileStream( filename: string ): PStream
  • NewWriteFileStream( filename ): PStream
  • NewReadWriteFileStream( filename ): PStream

     Also two useful global functions added: Stream2Stream (optimized for case when at least one from destination and source is memory stream) and Resource2Stream.

[+] TIniFile object type added to work with ini-files. It is implemented using API functions Get/WritePrivateProfile.... Implementation is different when in XCL. Instead of passing value as var parameter, procedures are converted to functions, and additional parameter Value is playing role of default value for reading and a role of written value for writing - depending on current Mode. Like in XCL, the same functions are used to read and write (depending on current Mode property value), but in KOL it is possible to pass read only properties or assign read value to properties more easy (in XCL, in such cases assignments to temporary variables were needed). "Constructor": OpenIniFile( filepath ): PIniFile. Basic methods: ValueInteger, ValueString, ValueBoolean and ValueData.


[+] TextAlign and VerticalAlign properties are added to TControl. First one is applicable to buttons, labels, panels (with caption), edit boxes, thereas second only to buttons (but 'labeleffect' also supports it - see below).


[+] NewPaintbox constructor is added and TControl.OnPaint( sender, dc ) event (applicable only to paint boxes). It is possible in OnPaint handler to use passed DC with low level API drawing functions, without integrating canvas objects.

[+] TCanvas object type ported from XCL XCanvas, but with some serious changes. First, it does not create now internal font, brush, pen objects until its correspondent properties Font, Brush, Pen are accessed. This allows to compiler to be more "smart" when linking code. Second, some optimizations and translating to built-in assembler made. Finally, using of canvas increases size of exe onto only 1,5-2,5K now. Special constructor NewCanvas( DC: HDC ): PCanvas made to simplify painting onto memory bitmaps.


[+] Support for rotated fonts like in XCL is implemented (but anyway, special control is needed to apply it using owner-drawing). Procedure to support text area calculation for rotated fonts is included into executable only if font's Orientation property is changed.

[+] Property DoubleBuffered: Boolean added to TControl. This property is inherited by child controls from its parent at the creation so it is sufficient to set DoubleBuffered to True for form to apply double buffered drawing (through memory bitmap) for all its children. If DoubleBuffered is set to True for "label effect" present above it is painting without flicks.


[+] NewLabelEffect( AParent, Caption, ShadowDeep:SmallInt ): PControl - creates owner-drawn label with 3D-effects, which supports rotated text (using its Font.Orientation property) as well as VerticalAlign property is also applicable to it). It is looking cool and requires only 1,5-2K of additional code, but... flickable and slow.

[+] TTimer object ported from XCL. Constructor: NewTimer( Interval ): PTimer.


KOL 0.13 (29-Jun-00)

[!] KOL moved to a new site. There are no banners here, no advertisments at all, and speed seems to be good. And, design of page is changed a bit too. So, welcome. And thanks to Kostya Nosov, who found this place ( for us.

[*] Units organization is changed a bit. Total KOL library now contains a single unit kol.pas, and to make it smaller, different parts of it are moved to separate inc-files, inclided using compiler directive $I. E.g., declarations of global functions from utls.pas are moved to interface part of kol.pas, and its implemetation is now located in

[+] Keyboard handling added. The most of code are linked only if (new) properties (events) OnKeyDown, OnKeyUp, OnChar are changed in project.

[+] Tabulation between controls using keyboard added. To avoid permanent including of code, responsible for tabulation, I had to implement this by calling TControl's method Tabulate or TabulateEx. And, if your application has several different forms, it is possible to call such method for applet (created with NewApplet) - to provide tabulating in all forms of applet.
   Tabulate is more easy and light. It considers keys Tab, Right, Down, PgDn as a command to tabulate onto next (in creation order) control (which is enabled and can be focused), and keys Shift+Tab, Left, Up, PgUp - to tabulate backward. TabulateEx allows to tabulate between controls using arrow keys more smart. At first, it tries to find nearest (enabled and focusable) control in given direction.
   Correspondent property Tabstop also added, which allows to decide if control can be focused (and tabulated). Assigning False to property Tabstop of a button (NewButton), makes button similar to speed-button in VCL.
   At the same time, with new property LookTabKeys it is possible to adjust set of keys, available to use as tabulating keys for each control. E.g., edit box (NewEditbox) has only key Tab (or Tab and Up/Dn, PgUp/PgDn - if editbox is not multiline).
   Additionally tabulating can be performed programmatically calling GotoControl method of form (NewForm) or any its child control.

[+] Further translation of some methods to bult-in assembler made.

[-] Behavior of functions GetItem, SetItem fixed - especially for indeces outbounded list items /edit lines diapason.

[-] Initialization of fileds of object by zeroes in Delphi3 fixed (forced by calling FillChar in TObj.Init).

[+] Property CurIndex added (similar to ItemIndex in VCL, for listbox and combobox it shows/changes number of current line in a list, and for editbox it shows/changes current character position in text.


KOL 0.12 (25-Jun-00)
[+] It is continuing constructing of base set of controls. Added some new constructors:
  • NewEditbox( parent, options ) - to create either single line edit box (like TEdit in VCL), or multiline one (similar to TMemo)
  • NewListbox( parent, options )
  • NewCombobox( parent, options )

[+] And some new properties and methods are added to TControl definition, such as:

  • Items[ Idx ]: string - to access list, combo list items or lines of miltiline edit control
  • Count - to obtain number of items in a list (combo list, memo)
  • Item2Pos( ItemIdx ): integer / Pos2Item( Pos ): integer - to translate line number to character position and otherwise - in multiline edit box (i.e. in memo)
  • ItemSelected[ Idx ]: boolean - to get know, if an item of list is selected (or is current in combo list), and to set its selection status on or off (for combolist, it is possible only to make it selected by assigning True)
  • SelStart / SelLength - to read / write selection start position and selection length (usually - for edit box, but SelStart also applicable to list box, created with option loMultiselect)
  • Add( string ) / Insert( Idx, string ) / Delete( Idx ) - obvious operations to work with list, as well as with multiline editbox too

[+] Also some attendant events added:

  • OnEnter
  • OnLeave
  • OnChange

Other improvements:

  • [+] New property Ctl3D is introduced (True by default). When TControl object is created, it is inheriting it from its parent (but not directly, instead internal flag is used, because some visual controls are looking good without Ctl3D, and at the same time it is desirable to make possible to populate this property onto children for those ones too, e.g. - it is true for panel). Since this, edit box, list box are having now 3D-border by default.
  • [+] New "through" method (function) Shift( dx, dy ) added. Convenient at the call of constructor to shift top/left coordinates of control immediately after calling methods PlaceDown, PlaceRight, PlaceUnder.

Total balance. Sample TestKOL2, enclosed in archive, has all designed already controls on a form, but its executable size in minimal case is about 16,5K.


KOL 0.11 (22-Jun-00)

In new version:

  • [+] Form now is created hidden by default (to avoid flickering at the moment of appearing it on screen). And in that mode it is showing automatically later (when Run is called, e.g., or in responce to normal CreateWindow call). If it is really (???) necessary to create form window not hidden, set property CreateVisible to True.
  • [+] New property StayOnTop. Can have sence not only for forms, but for child controls too.
  • [+] New: check box. Is created using "constructor" NewCheckbox( parent, 'caption' ) and implemented by minimum of code. Also, new property Checked introduced to TControl (has a sence for check boxes, radio boxes, and some other buttons, for last - to determine 'pushed down' state).
  • [+] New: radio box. Constructor: NewRadioBox( parent, 'caption' ). Grouping is implemented very easy - all alternative radio boxes must be on the same parent. And first created is checked initially. Any window control can be a parent.
  • [+] New: group box. Constructor: NewGroupBox( parent, 'caption' ). New field added (to TControl): fClientTop to correct ClientRect returned by system incorrectly.
  • [-] Several small bugs are fixed (e.g., asm-version of GetCaption), several more optimizations made in built-in assembler code.


KOL 0.1 (20-Jun-00)


New parallel project named KOL - Key Objects Library - is started. It is based on experience aquired during working under XCL first, and some other similar ideas. Main purpose is the same - to create smaller programs using great Delphi environment (IDE editor, debugger, and... help system, primarely win32.hlp). Main differences are ideoligic.
   First: there are no 'classes' at all, instead poor 'objects' are used. These have smaller virtual method tables, allow more smarter smart linking, and... sufficiently power.
   Second: instead of creating ramified tree of cla... - sorry, objects, all (maybe, almost all) controls will be present in a single object type PControl = ^TControl. Such object will be able to play desired role (form, applet, button, edit box and so on) depending on way how it is constructed. (***I call here 'constructor' but mean some global function such as NewButton, which creates and returns as result pointer to a new TControl object - of type PControl). In result, all controls will be of the same type PControl, all checking of type "A is X..." are eliminating, all bloating virtual methods inheriting are eliminating, all type converting ( "A as X..." ) are eliminating and so on. To extend functionality of the object in desired direction, well known (in Delphi) mechanism of internal 'events' (i.e. of pointers to methods) is used - instead of inheriting new descendant objects and overriding its virtual methods. This allows to compiler (Delphi) to be smarter in linking and makes code smaller.
   Third: more advanced technology (in comparison with XCL) of smart linking additional code is used as far as possible to attach some code, required by application. E.g., mouse handling procedure will be included into executable only if program changes one of events OnMouseDown, OnMouseUp, OnMouseMove, OnMouseDblClk, OnMouseWheel. And it is not necessary to call special procedure for this (like UseStdMouse in XCL). This is also done by the same way for Font and for OnClick event now too.
   Fourth: more efforts will be voted to use native MFC controls provided by API (buttons, labels, combos etc.) instead of hard working under self-developed graphic controls (coming Windows 2000 seems to be less bootlenecked with GDI or USER resources, so there are no more needs to economy its so hard).
   Fifth: instead of storing source in numerous units I will try to place as much in one as possible (like in ACL). This will economy (a bit, yes - but we are greedy...) size of program at the expence of smaller initialization / finalization tables and code.
   Sixth: the most of code is translated to built-in assembler - to economy code and to make programs faster too.

What about XCL: it is still present here, and XCL can be used to create small programs quickly - as earlier. The most of XCL ideas will migrate to KOL (with correspondent changes, certainly). And if time will allow it, some useful changes will be made in XCL code too on base of experience from KOL (such as translating some procedures to built-in assembler, other optimizations, etc.)

   Today the first release of KOL is present (v0.1). Now KOL consists of two units objs and utls. Objs contains definitions of base object TObj and descending from TObj objects TList, TGraphicTool and TControl.
   TObj has Free method, which allows to release objects safely (like TObject.Free in VCL). Since operators "as" and "is" are not applicable to poor objects, a method AncestorOfObject is added here to replace "is" class-aware operator where it is needed (and simple type cast can be used instead of "as"). Additionally, methods RefInc and RefDec are defined to allow locking of an object in memory (to prevent its destroying between two [nested] calls RefInc and RefDec).
   TList is implementing fast list of elements (similar to TList in VCL or ZList in XCL).
   TGraphicTool is incapsulating GDI objects, such as font, brush or pen and replaces XFont, XBrush, XPen from XCL (or TFont, TBrush, TPen from VCL). Depending on how it is constructed, it is playing role of desired type of object (using constructors***(see note above) NewFont, NewBrush, NewPen). I can be proud, that all these objects are not included into final executable code (excluding several small procedures), if your program does not access Font, Brush  properties of TControl and does not create such objects (of type TGraphicTool) by itself.
   TControl is intended to be any control, or form, or applet - all in one. Its role also is depending on constructor. Now three "construcors" are defined: NewForm, NewApplet, NewButton, NewLabel, NewPanel. It is already possible to create small application with form and several buttons on it with size of executable about 14,5K without compression (note: number is given with applying system dcu's replacement, published on this page 10-Jun-2000, and all numbers later will be given so too).
   Utls unit now is converted from XStrUtils (XCL) with changing of some functions code (and applying built-in assembler in some of them). Later other utilities will be moved here (file, date, windows, etc.)
   A small sample project is provided with an archive, containing KOL. Open it in IDE and experiment under it.

   And now, good news for folks. From here, I am starting to publish last news in Russian too (these will not be posted in common newsletter, but if such suggestion will be greeting, I can create separate mailing list for Russians). And, if anybody could provide me with translation of news to other languages - in form of reference to your site or by sending me translated news release every time it is announced - please contact me (in English or Russian, please).



See latest news here

XCL: (C) 1999-2000 by Vladimir Kladov
KOL: (C) 2000 by Vladimir Kladov

[KOL&MCK Home]