KOL is an acronym for the Key Objects Library and is a VCL replacement for Delphi that enables the programmer to write Windows executables that are typically between 10-20 times smaller than its VCL equivalent.
KOL was designed by Vladimir Kladov.


All material on this page is either written or translated to KOL by Thaddy de Koning.
Almost everything is freeware but some is subject to the license(s) of the original materials, either GPL, LGPL or MPL.
KOL 2.10 and FPC 2.0.0 instructions on how to use
Alex Gregory's beautiful Delphi Forum in the English language.

I am now the moderator of the KOL sections and I use it to publish lots of tips and tricks and some articles. Go and have a look! If you have a good KOL tip, do not hesitate, publish it on the forum!

kolntcputime On request: my KOL port of ShorterPath Software's CPUTime Unit.
It measures the CPU time in percentage of the current process or thread.
kolsqlite3static.zip This is a very early BETA! version of a statically linked SQLite library for KOL.

It is based on the version available here.

Albert Drent, who created a full set of VCL components
and 
Gianpaolo Avallone, who provided the initial .obj files

I made several changes, though, mainly to do with memorymenagement stubs and possible linker errors. I also included a very basic KOL object with more Delphi like style naming conventions. By no means finished. Expect that soon.

analyseacm.zip A small tool to check what ACM subsystems (drivers) you have installed and what capabilities are supported

Based on some code in the Delphi Magazine 85

kolacmwaveplayer.zip This is a waveplayer component that also can play MP3 files through the ACM codec, if it is installed on your system. Demo included.

at http://www.looprecorder.de/tut_l3codec.php is a good tutorial on how to obtain and install the proper codec, even without having to install the full mediaplayer 10.

 

kolrbcontrols1_51.zip

These controls are not written by me but by Aleksandr Rabotyagov

I include them because they are not easily available, but are very good.

A beta of  KOL sourcecode for the Skype API There's also a much simpler example on Blue Aura and on  the delphimaster forum, both under the KOL section.
Kol Gauges Much improved updated version of the gauge control I made for Deniss.

This version has proper min/max support and optional anti aliasing using three optional types of oversampling.

Version 1.52:

ECM has written the mirror for MCK!...and fixed some bugs.

 KOL 2.10 for Freepascal 2.0.0

Note that as of version 2.10, kol.pas in PAS_VERSION mode is fully Freepascal 2 compatible. Vladimir Kladov incorporated the patches that were necessary into the official kol distribution. This download is only for convienience. Please note that kol still needs the support package ppdelphi.zip. This is also included but can also be downloaded separately here

A complete, ready to use package including kol.pas 2.10 and 5 examples for experiencing the power of KOL with Freepascal 2.0.0

Apart from a full kol 2.10 install for Freepascal 2.0.0 it contains:

1. a simple empty form

2. a WIN32 whois application

3. an example wordpad like application

4. an example of how HSL and RGB colors interact.

5. an object oriented example of how to draw polylines.

6. an xml demo with a simple but powerful reusable OO xml library

All examples except the first contain reusable objects for your own programs! The good news is, that they are exactly or almost exactly the same as found on this page for Delphi. The bad news: well, there seems to be a problem on some machines where the executables work, but exit with a memory leak. Sometimes it happens, sometimes it doesn't. I am still investigating this.

Please report if it doesn't work, but also report if the executables DO work. It will help me a lot in debugging. I run only AMD machines at home (an older athlon 1300 and a 64)

Please read this first, and modify fpc.cfg as explained.

  If you want to read about programming, algo's or just want to be amused, visit http://www.boyet.com/. Simply because.
I decided to create - unofficial - email support for KOL related questions.

If you mail to kol@chello.nl,  me and some other bravehearts that use KOL will try to answer you as soon as possible. Please note that you must allow for about two  days to get a reply.

You may put your question in English, French, Russian, Dutch or German. All answers will be in English. Apart from russian, which I am still learning (because of Kol) I can read fluently in these languages, so don't be modest, write what you want and how you want to express yourself.

You can also try to reach me at icq 218989577 to discuss KOL related issues. Only after 19:00 gmt +1.( I use a Miranda clone written in KOL, still alpha.)

Kol simple Coolbar Control A simple KOL coolbar control.

Not everything implemented,

You must create controls you want to add with the form as parent. or use TCoolbar.Addband with a newXXX function.

color spectrum demo Made on request:

Demonstrates how HSV and RGB values interact. Partly based on library code from:

 EFG's computerlab

scale demo KOL controls do not have a scale property.

Here's code that can scale a KOL application very comfortably.

I updated the demo to show you how to automatically handle a screen change using the WM_DISPLAYCHANGE message. The demo does not include BitsPerPixel change support, because I only have TFT's so I couldn't test that.

Rat Alert 2005 The 2005 version of my ever popular Rat Alert Document Alarm.

I won a programming award back in 1989-1990 with the first dos version and have revisited it many times and in many programming languages. This version is fully rewritten to reflect the current version of KOL (2.08) and is much cleaner than the old code. This idea may be 16 years old, the code is brand new!

Maximize your Wave Volume, Put the mouse on your documents,  Activate RatAlert!

kolexregistry A KOL extended registry object that can search, import, export keys and values.

I merged Colin Wilson's extended registry object with my KOL registry code.

kolchart.zip A KOL chart control

Supports 9 types of chart, pies, lines, bars, etc.

Supports clipboard and printing

1.01 Resizebug fixed

Kol ledladder Similar to Kol Indicator, but more sophisticated.
Kol Indicator A KOL indicator control made on request. Good example of 'how to create a KOL control'

Made it optionally stereo on request

kol axscript

This is based on Serhiy Perevoznyk's work and again an authorised translation (although a lot of it is new!)

Active scripting without using msscript.ocx. Built on top of the scripting engine itself. Can use any ms scripting language. Includes a KOL com- wrapper to script KOL controls.Very powerfull. Serhiy included a link to my page, so: look at his brilliant coding:

http://users.chello.be/ws36637/

KOL Scope control Made on request: a scope control
Kol smooth image rotation example On request: A simple example of how to rotate images fast and absolutely smooth using the plgblt API function.

This function is in the windows API since NT4. It is more relevant now, because almost anyone has XP. It doesn't work on W95-Me

KOL dynamic array sort and search unit On request: A unit for very fast sorting and searching dynamic arrays.

Handy for in memory database like applications

KOL GDI mapping modes example Onrequest: A simple CAD like drawing example
tdkfontcombobox.pas Based on code by Boguslaw Brandys, but almost everything changed.
Now much simpler.
Turned into a real KOL TControl.
The original needed an Icon resource,
this one takes icons for truetype, vector and Opentype from "fontex.dll".
which should be present on all systems from win95.
If XP or 2000 then OpenType fonts are supported.  

updated: small change on request to leave onchange handler free for the user. Added wndprocFontcombo.

 kol winapi32

Published with permission from Marcel van Brakel.

1.8 meg download

This is the famous winapi32 by Marcel van Brakel that is at the core of the JCL. This version is modified to work with kol, with or without err.pas.

It can still be used for the VCL too, I modified it faithfully and added two defines in WinDefines.inc:

$DEFINE KOL removes dependencies on sysutils.

$DEFINE USE_ERR enables err.pas for KOL structured exception handling

The latter option is only available if KOL is selected.

Connect to a whois server. Includes demo.

Authorized translation

This is a sniffer component and demo that utilizes the famous WinPcap driver to sniff network traffic independent from the operating system, i.e. winsock.

It includes extensive filtering capabilities. The driver itself can de downloaded from:

http://winpcap.polito.it/

This version is authorised by the original author Umar Sear and it is favorably reviewed by the winpcap team. A link, both to the KOL site as mine,  is included on their pages. I have had some remarks that there are other sniffers around for Delphi that do not need a devicedriver. Those are all based on the rather incomplete winsock2 API and are feature-wise totally inferior to winpcap based sniffing. Examples: you can't detect spoofing attacks with winsock2 based sniffers, you can't resend /redirect packages easily, you can't do remote capture. The neat thing about the winpcap driver is that it is a ring 0 kernel devicedriver and really completely independent from winsock2. If you really want a winsock2 based sniffer, may I cheekily refer to tdknetstat, that i wrote ages ago. It is still available from the official KOL site.

The Boehm garbage collector is a famous and widely used garbage collector that is reasonably efficient and contained in a small dll. Here are KOL interface units for it, based on the work of Barry Kelly and article 21646 on the Borland community site. I also adapted the demo to work with KOL objects. This is not only a GC. It can also be used for debugging purposes.

This Garbage collector supports both simple objects and objects that need finalization.

A small object that allows you to write small but effective FTP clients using the wininet api.

Smallest possible visual client about 18K.

Based on code by Charley Calvert, but translated to KOL, expanded and improved.

I wrote this for Hilde, a great entertainer and friend.

Now includes a manifest file for the ever more popular TeleTubby mode.

View the helpfile

This is a tiny but very powerful guitar chord finder that supports different tunings and piano keyboard feedback. The chords are calculated, not looked up from a database. The chords can be copied to the clipboard for inclusion in documents or for further reference. Also has Midi support.

It includes full sourcecode and a helpfile.

The piano keyboard is a new and original KOL control. It can be used separately and supports playing the piano keyboard from the computer keyboard.

This is the new version of WaveIO 1.04 for KOL and the VCL.

Define KOL to use with KOL. Otherwise, for the VCL the source is identical to the original 1.04 version by TobyBear. It includes a demo wave player exactly like the original by Tobybear too. ( But 38 K instead of 410K)

And this version released on the same day TobyBear released it! (But it was still a lot of work)

dc-dsp

Authorised translation.

exe

This is a translation of a large part or the dc-dsp audio components. The translation is kindly authorised by Milenko Mitrovic. It contains a large number of components to build audiostudios and much more. Here's a small example I did as a demo for Milenko.

updated version to the final official release 1.0.1, added helpfiles

More info can be found at: http://www.dsp-worx.de

A complete Btree system and record manager to build very fast lightweight or even heavyweight databases!

Original code by Julian Bucknall, Delphi magazine 73, 74 and 75

Lorenz and Rossler Oscillators

Comment from Rusell: Cool :)

This module defines the classes TLorenzOsc and TRosslerOsc - low frequency
oscillators suitable for modeling 'analog drift' or other random-but-smooth
processes. Both classes have identical APIs - you could unify the interface
with virtual functions easily. Portable KOL, VCL, Kylix and Freepascal

The Rossler and Lorenz functions are iterated chaotic systems - they trace smooth curves that never repeat the same way twice. Lorenz is "unpitched", having no distinct peaks in its spectrum -- similar to pink noise. Rossler exhibits definite spectral peaks against a noisy broadband background.
I think  this works best by adding a very small amount of the modulated effect to the original soundsource like: sample:=sample + 0.05 *sample * OscillatorOutput. The effect is something like a synth with a cheap unstable transformer or leaky condensors. If you set the rate quite high (~0.2 = cheap 70's casette) it also simulates tape flutter.

Translated from a C++ source by:

Russell Borogove / www.tinygod.com

 

Kol Polyline A set of objects to easily manipulate, resize, move and delete Polylines. Great for drawing applications
Kol Shapes A Kol Shape control:


Pencolor = Color1
BrushColor = Color2  

Possible Shapes are:

stArrowRight,
stArrowLeft,
stArrowUp,
stArrowDown,
stEllipse,
stLineHorz,
stLineVert,
stRectangle,
stRectangleRound,
stTriangleUp,
stTriangleDown,
stTriangleLeft,
stTriangleRight}  

KOL sort functions Some more basics:

BubbleSort
ShakerSort
SelectionSort
InsertionSort
ShellSort, two versions
QuickSort, two versions

consoledemo.zip A demo of how to redirect console input/output. Has some advantages over the KOL support for IORedirect since it can work on a line by line basis
PALfo.pas A Low Frequency Oscillator  based on a lookup table. Since it is LUT based you can easily add more waveforms besides the included triangle, sinus, sawtooth, square and  exponent.

Portable code: VCL and KOL

This is a demo and an object that uses a simple thread manager to synchronize between the main application and an arbitrary number of new KOL ManagedThreads. This makes threadhandling really easy! Uses a technique that is independent from the syncro objects below. You almost can not go wrong with this one. This is unique for KOL, I haven't done this for the VCL yet.
Kol Thread Synchronization Primitives function NewSimpleEvent:PEvent;
Function NewEvent(EventAttributes: PSecurityAttributes; ManualReset,
InitialState: Boolean; const Name: string):PEvent;
function NewCriticalSection:PCriticalSection;
function NewSpinLock:PSpinLock;
function NewThreadLogger(aSize:integer = 0):PThreadLogger;
function NewMultiReadExclusiveWriteSynchronizer:PMultiReadExclusiveWriteSynchronizer;  
kolstreams A couple of new KOL streams:

a Buffered stream
a Block stream
a Windowed stream
a Debug stream  

All are true KOL streams (return pStream)

Authorised translation

Control your sound card's mixer. Supports up to 10 soundcards and all available channels. My KOL translation of TAudioMixer control by Vit Kovalcik. Now includes a small demo that controls your default mixer (taskbar). I am happy to anounce that this translation is authorised by the original author, Vit Kovalcik.
A simple sizer control and a grid control to do KOL control manipulation at runtime. Can serve as the basis for a forms designer in KOL.
democtrl.zip This is a small demo control that acts a bit like a trackbar. It shows you how easy it is to write new KOL controls. Uses the recommended way to write new controls. heavily commented. Written in response to a question from one of the english -not russian, sorry my  mistake-  KOL forum visitors.

Pearl Jam

If you want a small (possibly the smallest) stand alone MP3 player that uses very little resources, here it is!

Only ~80 K!, sources available on request and at the KOL site.

I couldn't have written this without the original console application sources by fobmagog available from sourceforge. This is a gpl'd program and not my usual free for all ware.

It does not rely on external dll's: it has its own codec. You can uninstall mediaplayer and it will still work.  This can lead to strange questions, it seems: no this is not a shell, it is a self-contained full featured win32 application.

wave player demo This archive contains a very simple example wave player with Vu meters.
It contains a VCL version that compiles to ~400Kb
and it contains a KOL version that compiles to ~40Kb.

Both versions are functionally identical and
share 90% of the sourcecode.

The KOL version also needs my tdkdsplib.zip
Sometimes When I am developing, I sometimes have an alternative webserver running at the link to the left.
It runs on Tinyweb and I will use it to provide info on what I am working on.
* If it fails, I am not there.
* If there's no content, I feel lazy.
kololere2.zip A replacement for the earlier OleRichEdit control by Alexander Shakaylo. I surfaced the Text Object Model interfaces, that are very powerful.
A demo follows shorly - I've lost it somewhere, I'm ashamed to say-

If you downloaded KolOleRe.zip from the KOL website recently, you already have it. It is now part of the "official release".

 

This is a first beta demo for the TOM interfaces.
It is a sourcecode browser with syntax highlighting for Delphi, C(++), JavaScript, VBScript, etc, etc.
It's not an editor yet, but look at the small number of lines that actually does the highlighting!

Also includes a Ruler object, languages support unit, pascal tokenizer, new actionlist with some nice features. Not crashproof yet. Do not use on larger files. It will parse but can take a long time.
(even kol.pas)
kolconverters.zip MS office converters - like in Wordpad - support for KOL Richedit and OleRichedit controls.
If you have MS office installed you may be able to use a whole host of these format converters.
Word 6, 97-2000, html, WordPerfect, Excel may be supported if there's a converter present.
Note these converters can be buggy. Not my fault, but Microsoft's  

The zipfile also contains a KOL Registry object that mimics the VCL Tregistry component.

koldetours.zip Intercept *any* standard Win32 or Delphi procedure or function at runtime and replace it with your own.
Based on an article in The Delphi Magazine 101.  This is great fun, but highly technical and can be very dangerous!  
kolrecorder.zip Keyboard macro recorder with small demo.
commm.pas A Delphi memory manager replacement with some very nice side effects.
Makes all memory allocations COM marshalled. Can replace sharemem.  Updated to correct a small typo ($33 should have read $CC)  
kolkeystate.zip Simple control to determine caps, num etc
Supported Dialogs:

function NewComputerNameDialog(AOwner : PControl):PComputernameDialog;
function NewBrowseFolderDialog(AOwner : PControl):PBrowseFolderDialog;
function NewFormatDialog(AOwner: PControl):PFormatDialog;
function NewShellAboutDialog(AOwner: PControl):PShellAboutDialog;overload;
function NewRunDialog(AOwner: PControl):PRunDialog;
function NewDiskFullDialog(AOwner: PControl):PDiskFullDialog;
function NewOutOfMemoryDialog(aOwner:Pcontrol):POutOfMemoryDialog;
function NewOrganizeFavoritesDialog(aOwner:PControl):POrganizeFavoritesDialog;
function NewAppletDialog(aOwner:PControl):PAppletDialog;
function NewControlPanelDialog(aOwner:PControl):PControlPanelDialog;
function NewChangeIconDialog(aOwner:PControl):PChangeIconDialog;
function NewLinkDialog(aOwner:PControl):PNewLinkDialog;
function NewAddHardwareDialog(aOwner:PControl):PAddHardwareDialog;
function NewOpenWithDialog(aOwner:PControl):POpenWithDialog;
function NewExitWindowsDialog(aOwner:Pcontrol):PExitWindowsDialog;  

Also includes several utility routines for shell operations.  

Thanks to Serhiy Perevoznyk for the VCL sources

A very fast pascal tokenizer and a charstream object. Based on code from Julian Bucknall but adapted for KOL and expanded for later versions of Delphi.
kolruler.zip A ruler with glyphs for left and right margin. Intended for use with editors. True KOL TControl, no mck. Measurements in inches, centimeters or pixels.

 

The screenshot is from Dutch Army Knife: a small tool that is still a secret!

kolsearchparser.zip Parses a search phrase based on AND OR NOT operators into a valid SQL query.
Original VCL source by Julian Bucknall (again, still more to come) Delphi magazine 83  

example:

thaddy AND (mess OR website)

becomes:

select * from TABLENAME where ((FIELDNAME like '%thaddy%') and ((FIELDNAME like '%mess%') or (FIELDNAME like '%website%')))

This is a pascal translation of the famous Freeverb freeware reverb in C++ by Jezar.
Written to be highly portable (BCB, VCL, Kylix, KOL, Freepascal)
It sounds exactly the same as Freeverb 3.
Comb en allpass filters optimized in basm.
tdkdsplib

Read the manual

A dsp library to do bitrate conversion, clipping, dithering, limiting, channel reversing, 3d sound and much more.
Fully written from the ground up in BASM. D7 only, due to use of advanced asm instructions.
The library is fast, but also coded with small code in mind! not only for KOL. Full documentation included.
Kol This is realy cool. The site is up for just a couple of hours and someone asked me for the knob control I used below. Shure, it's a new KOL control and shure, it's free. Here it is.

Here are a few links to some very old articles I wrote for the sadly demised, at least not active, best free Delphi Webzine ever:

from October 2001
http://www.undu.com/Articles/010511b.html
This is about KOL, but may be a bit outdated.
I have to review this one.

From November 1999
http://www.undu.com/Articles/991107a.html
A hardcore way to re-use typelibraries.
This works sometimes better than other methods,
because you actually share the binary typelibrary.

From May 1999
http://www.undu.com/Articles/990527c.html
Creates help constants based on your sources.
I still like this small routine. Still usefull too.

These articles do not necessarily have my approval, considering my current knowledge and there are many more of such items of mine on the loose, I am afraid.  
Acknowledgement:

I would like to thank The Delphi Magazine and its authors for providing me with such an abundance of sources to translate to KOL.
Especially the articles by Dave Jewell and Julian Bucknall have given me great pleasure and knowledge over the years.

Thaddy de Konng