25 Years of Delphi

History of my relationships with Delphi started in the middle of 1998. I was familiar with Turbo / Borland Pascal already, because it was the primary programming language at my school’s programming classes. We even created our own primitive graphical UI framework for DOS while we were creating a learning assessment application as a graduate test. Yes, it was heavily inspired by Turbo Vision 🙂

Still, I was astonished when a friend of mine showed me Delphi 3. He did drop some buttons and edits on a form, hit F9 and wow! a working Windows app! In a couple of minutes a simple database client app was running too and it was an instant hit. The same day I bought a heavyweight Russian translation of “Mastering Delphi” by Marco Cantu and landed my first job as a database developer somewhat a month later. An incredible career jump in a country suffering heavily from devastating crisis.

I can’t say that our relationships were perfect ever since 🙂 Obviously there were ups and downs, and I’m not particularly happy with the direction our beloved IDE and programming language are moving, but still Delphi played a significant role in my career and personal life as well.

Delphi splash screens collected into a single GIF (created in GIFExplainer)
Delphi Helpinator

Delphi Components That I Use In Helpinator

Unfortunately Delphi community is very quiet nowadays, the most loud voices are the voices of criticism, and authors of excellent components do not get the praise that they deserve. In this post I will try to give the proper credit to components that I use in Helpinator.

TRichView (commercial) – an excellent rich editor component. Comes with a set of actions, that you can use to create a rich editor with just a few lines of code. There are also add-on components for XML input/output, a bunch of spellchecker integrations and etc. The product forum contains answers to almost all questions possible and the author is very responsive to requests.

NextGrid (commercial) – a neat grid component that I like a lot. Not overbloated with features like other grid components from large vendors, just does what it has to do for the money. Has “grid” and “slide” layouts, with the latter each line is like a card. There are also specialized column types, like for showing images, HTML and etc.

SimpleGraph (free) – a killer free component from Kambiz R. Khojasteh that allows to create a diagram editor. Very easy to use like other projects of Kambiz, the code itself is pure genius.

PrintPreview (free) – another great free component from Kambiz that allows to create custom print previews.

JVCL & JCL (free) – actually needs no introduction, a fundamental work of Delphi community, covering all aspects of app development, that will live as long as Delphi lives on.

SynPDF and SynGDIPlus (free) – another work of coding genius, Arnaud Bouchez, that did an unimaginable amount of work with mORMot and infrastructure around it. Seriously, if there’s a Hall of Fame for Delphi devs, Arnaud should lead it, along with Kambiz and Angus Johnson.

Delphi LiteHelp

LiteHelp For Delphi

LiteHelp is a lightweight portable context-sensitive help system for Windows desktop apps. You can read more about it in this post:

I also created a Delphi unit that allows to integrate LiteHelp into the context-sensitive help of Delphi VCL. It works pretty much the same way HTMLHelpViewer.pas works – just include it into your uses list and provide path to the folder where the help is located using Application.HelpFile. Also you will need to place LiteHelpViewer.exe in the same folder with your main executable. Now Delphi will run LiteHelpViewer.exe and browse to ContextID automatically. You can also locate keywords, execute search and switch languages using commands shown in the Delphi demo included into Delphi distributions that you can download from this link:

Here are some code samples

Sample No 1: LiteHelpViewer in your “uses” list:

unit uMain;


  LiteHelpViewer, Winapi.Windows, Winapi.Messages, System.SysUtils,
  System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

  TForm1 = class(TForm)

Sample No 2: Setting path to the help folder in the project source:

program LiteHelpViewerDemo;

  uMain in 'uMain.pas' {Form1};

{$R *.res}

  Application.MainFormOnTaskbar := True;
  // It's important to provide full path to the folder with LiteHelp files
  Application.HelpFile := IncludeTrailingBackSlash(ExtractFileDir(Application.Exename)) + 'help';
  Application.CreateForm(TForm1, Form1);

Sample No3: Executing some important help system commands:

// Open Table of Contents
procedure TForm1.btnOpenTableOfContentsClick(Sender: TObject);

// Execute search for a term in edtSearch TEdit
procedure TForm1.btnSearchClick(Sender: TObject);
  IHelpSystem3(Application.HelpSystem).ShowSearch(Trim(edtSearch.Text), Application.HelpFile);

// Locate keyword from edtKeyword TEdit
procedure TForm1.btnGoToKeywordClick(Sender: TObject);
  IHelpSystem3(Application.HelpSystem).ShowIndex(Trim(edtKeyword.Text), Application.HelpFile);