Showing posts with label Delphi code modernization. Show all posts
Showing posts with label Delphi code modernization. Show all posts

Undeclared identifier error: SListIndexError

CodeGear Delphi 2007, 2009
The SListIndexError is a constant string declared in Delphi 4 in the unit Consts.
SListIndexError since Delphi 6 is in the unit RTLConsts.
The first and the most competent method is to resort to conditional compilation directives:
{$IF CompilerVersion >= 14.0} // Delphi 6 and higher RTLConsts {$ELSE} Consts {$IFEND}
The second remedy:
The construction Error(SListIndexError, Index) may be replaced by Error('List Index out of bounds (%d)', Index)

The ANSI function to Ansi-fy

CodeGear Delphi 2007, 2009

The ANSI function to Ansi-fy.
This table is not a divine revelation, but my personal reference book.


Ansi-fy Wide Char, Unicode Units
const C = '...'; const C: AnsiString = '...';
CompareText AnsiCompareText CompareText SysUtils; AnsiStrings
CompareStr AnsiCompareStr CompareStr SysUtils; AnsiStrings
FindWindow FindWindowA FindWindowW
(in Delphi Versions >= 2009 the same as FindWindowW)
GetDiskFreeSpace GetDiskFreeSpaceA GetDiskFreeSpace
(in Delphi Versions >= 2009 calls GetDiskFreeSpaceW)
Windows
GetTempPath GetTempPathA GetTempPath
(in Delphi Versions >= 2009 calls GetTempPathW)
Windows
LowerCase AnsiLowerCase LowerCase SysUtils or AnsiStrings (Delphi 2009+)
ShellExecute ShellExecuteA ShellExecuteW
(in Delphi Versions >= 2009 the same as ShellExecute)
ShellApi
ShellExecute ShellExecuteA ShellExecuteW
(in Delphi Versions >= 2009 the same as ShellExecute)
ShellApi
ShellExecuteInfo ShellExecuteInfoA ShellExecuteInfoW
(in Delphi Versions >= 2009 the same as ShellExecuteInfo)
SHGetPathFromIDList SHGetPathFromIDListA SHGetPathFromIDList
(in Delphi Versions >= 2009 calls SHGetPathFromIDListW)
ShlObj
StrAlloc AnsiStrAlloc in Delphi Versions >= 2009 StrAlloc calls WideStrAlloc SysUtils
UpperCase AnsiUpperCase UpperCase SysUtils or AnsiStrings (Delphi 2009+)

This article will not be complete, some text was removed intentionally. If you are unable to apply this, please contact for paid consultation.
Данная статья не будет полной, часть текста была удалена намеренно. Если вам не удалось применить, обращайтесь за платной консультацией.

Differences and Migration Implications from Delphi 2007 to Delphi 2009

CodeGear Delphi 2007, 2009
Official Unicode support was added in Delphi 2009 with code name Tiburón.

In Delphi Versions <= 2007, string was an alias for AnsiString (a single-byte character string type).
In Delphi Versions >= 2009, this changed, and string became an alias for UnicodeString (a multi-byte, UTF-16 character string type), while AnsiString remained available as a type for 8-bit character data.

The change was a major shift to include full Unicode support and has significant implications for the legacy code written in Delphi <= 2007 that is being migrated to Delphi 2009 or later.

Key Differences and Migration Implications

In Delphi 2007 and older (ANSI) Length() returns number of bytes, in Delphi 2009 and newer (Unicode) returns number of characters (elements).

String Alias:
  • Delphi 2007 and earlier: String = AnsiString. The data was 8-bit and its interpretation (code page) was generally linked to the operating system's regional settings.
  • Delphi 2009 and later: String = UnicodeString. The data is 16-bit (WideChar), typically using UTF-16 encoding, allowing for a broad range of characters.
Character Types:
  • Delphi 2007: Char = AnsiChar (8-bit).
  • Delphi 2009: Char = WideChar (16-bit).
Type / Function Delphi 7, 2007 Delphi 2009, XE
byte byte byte (no change)
String AnsiString UnicodeString
Char AnsiChar WideChar
PChar PAnsiChar PWideChar
SizeOf(Char) 1 byte 2 bytes

Data Handling:
  • Direct assignments between AnsiString and the new UnicodeString in Delphi 2009 involve implicit conversions, which can cause to performance issues or, more importantly, data loss if not handled carefully. The compiler will often issue warnings for these conversions.
  • The internal structure of AnsiString itself changed slightly between versions (e.g., in Delphi 2009, it stores a code page number, which was not present in Delphi 2007's AnsiString), making sharing strings between DLLs compiled with different versions problematic.

Migration pieces of Advice

To migrate code that uses strings between these versions, you generally have preferred approaches:
  1. Explicitly Ansi-fy the Code (Short-term fix): Replace all instances of the generic string, Char, and PChar with their explicit 8-bit equivalents: AnsiString, AnsiChar and PAnsiChar. This retains the old behavior but means your application will not leverage Unicode natively and will still encounter conversion overhead when interacting with the rest of the Unicode VCL/RTL in Delphi 2009.
  2. Resort to Unicode: Update your code to use the native UnicodeString type throughout your application. Use AnsiString only at the boundaries where you interact with legacy data, files, or external APIs that require ANSI encoding (e.g., when saving or loading data from an older database). Use functions like TEncoding.GetString to properly decode data.
  3. The correction isn’t simple recompilation, but to audit every PChar, every SizeOf(Char) assumption, and every place where raw bytes to a file or socket expecting ANSI.// Delphi <= 2007 code — assumes 1 byte per char, breaks silently under Unicode procedure TrimBuffer(var Buf: array of Char; MaxLen: Integer); var P: PChar; begin P := @Buf[0]; Inc(P, MaxLen); // wrong stride Char is 2 bytes P^ := #0; end;
  4. Compiler directives and conditional code if code must support both old and new Delphi versions simultaneously.
    The Version constants are not intuitive but they may lead to mistakes:

    {$IFDEF VER150} // Delphi 7 {$IFDEF VER185} // Delphi 2007 Win32 has VER180 & VER185 {$IFDEF VER200} // Delphi 2009 Tiburon {$IFDEF VER210} // Delphi 2010 Weaver

    Another way to use the UNICODE directive:
    {$IFDEF UNICODE} // Delphi 2009+ logic {$ELSE} // Legacy Delphi logic {$ENDIF}

    Prefer to use CompilerVersion than Version constants
    ...
    If the codebase has already passed one migration, it likely has {$IFDEF} blocks keyed to old version constants. Don’t delete these blindly — audit each one with attention.
    Use code with caution!
  5. Compile and watch Fix Warnings: Pay close attention to "Implicit string cast" warnings. They highlight where the compiler is silently converting between ANSI and Unicode strings, which can cause data loss or unplanned behavior.
  6. Character Buffer Allocations with SetLength and GetMem
    If code allocates memory based on the assumption that 1 character equals 1 byte, it will allocate only half the required memory in Delphi 2009+, leading to buffer overflows.
    Length returns the number of elements in the string or in an array. Length for the strings with 8 bit element types (ANSI, UTF-8) gives the number of bytes since the number of bytes is the same as the number of elements, but the Length for the strings with 16 bit elements (UTF-16) is half the number of bytes because each element has 2 bytes.
    Wrong Code:
    GetMem(Buffer, Length(MyString)); // Allocates half the needed bytes!
    Correct Code
    GetMem(Buffer, Length(MyString) * SizeOf(Char));
  7. File I/O (BlockRead / BlockWrite & TStream) in reading or writing strings directly to files using raw byte streams will now write 2 bytes per character, breaking backwards compatibility with old file formats.
    Fix, if you need to save text files in traditional ANSI/ASCII format, explicitly use AnsiString or pass TEncoding.ANSI (e.g., StringList.LoadFromFile('file.txt', Tencoding.ANSI)) to TStringList.SaveToFile or TStringList.LoadFromFile.

    var LegacyStr: AnsiString; begin LegacyStr := AnsiString(MyUnicodeString); Stream.Write(LegacyStr[1], Length(LegacyStr)); end;

  8. Windows API Calls brings surprises out of (PChar casting)
    Delphi automatically maps Windows API functions to their Unicode (W) variants instead of ANSI (A) variants.
    For example: SetWindowText calls the SetWindowTextW.
    If PAnsiChar is explicitly being passed to an API that now expects PWideChar, the compiler will give error. Types must be updated to PChar to let Delphi handle it natively, or explicitly call SetWindowTextA if the ANSI is used.
  9. CharInSet appeared in Delphi 2009 to avoid warning: "WideChar reduced to byte char in set expressions". Sets in Delphi can contain a maximum of 256 elements.
    Implementation of the CharInSet function analogue for older versions of Delphi 6-2007: function CharInSet(AChar: Char; ASet: TSysCharSet): Boolean; begin Result := AChar in ASet; end;
  10. Pointer math must be reviewed: if a PChar pointer Inc(P) is incremented, it now jumps by 2 bytes instead of 1. If there is manual byte-level parsing, the pointer type must be changed to PByte or PAnsiChar.
  11. If old code used string or AnsiString as binary Data buffers to load raw binary data, encrypted data, or file streams, this will now break because the runtime will try to parse or convert invalid UTF-16 surrogate pairs.
    Change the variable type from string to RawByteString or TBytes (an array of bytes) to fix and completely bypass Unicode conversion logic.
  12. Ensure that database drivers and components are updated to versions that support Unicode data types (TWideStringField instead of TStringField if storing non-ASCII data).

Delphi 2009 has got the unit AnsiStrings.pas appeared in ..\source\Win32\rtl\common.
The ANSI function to Ansi-fy
This article will not be complete, some text was removed intentionally. If you are unable to apply this, please contact for paid consultation.
Данная статья не будет полной, часть текста была удалена намеренно. Если вам не удалось применить, обращайтесь за платной консультацией.

TitleBar - Delphi component which adds many features: AutoHide, SetRegion, border width for form, color for everything, good looking borders, ShowInTaskbar, etc.

TitleBar - Delphi component which adds many features
This is a curiosity component demonstrates, what can be made of Delphi forms and control elements.
This is another note for Delphi code modernization trend
Changes in TTitleBar by Valient Newman in an attempt to revive an old project and to make the component meet the requirements of Delphi 6 and higher.
Corrections were tested in Delphi 2007, 2009 environment. Date last modified by Newman: January 30, 2025
Checked in in Delphi 2007, 2009
Updated January 30, 2025

TTitleBar v2.01

TitleBar - Delphi component which adds many features: AutoHide, SetRegion, border width for form, color for everything, good looking borders, ShowInTaskbar, etc.

The components TTitleBar v2.01 is available in My Github Repository

This component can be freely used and distributed in commercial and private environments. Source code is provided free of charge. The software is provided to you “AS-IS”. As such, there is no guarantee of any support whatsoever.


credits to:
Seth Taylor made this component on February 8, 1999 on Delphi 3

Once upon a time there were Delphi Haters and their list of vendors who stopped supporting Delphi

Cemetery of Delphi Vendors who stopped supporting
I found Delphi Haters' Blog. Vendors who stopped supporting Delphi with date: Saturday, July 24, 2010
The fact is that Delphi/Object Pascal is in 8th position on tiobe.com TOP10 list of programming languages for November 2025 and the fact is encouraging.
There is fresh, the almost exact copy of origin list of vendors who stopped supporting Delphi I made a copy of these lists for myself and deleted the duplicates in them.
As for me, this is not a Delphi Vendors Cemetery, but an expanded window of opportunity and an experience that can be borrowed.

I look for information about them in search engines.

Vendors who went out of business

  • athrasoft.com – Vendor of Athrasoft Plugins
  • cgiexpert.com – Vendor of CGIExpert
  • odbc98.com – Vendor of ODBC98 – reason cited as poor or non-existent sales
  • classicsw.com – Vendor of Classic Component
  • PIMFlashfesoft.com – Vendor of PIMFlash
  • turbopower.com – Vendor of TurboPower Components
  • maxcomponents.net – Vendor of Max Help and Max Components
  • buypin.com – Vendor of B.S. components
  • vistadb.com – Vendor of Apollo database
  • asp-express.com – Vendor of classic ASP components
  • classicworks.com.au – Vendor of Classworks Development VCL
  • defined.net – Vendor of Defined Forms
  • dream-com.com – Vendor of Dream Company
  • crynesoft.com – Vendor of Genesis Component Pack
  • teletech-systems.com – HelpWriter application
  • volgadb.com – Vendor of Volga Database
  • DFS (Delphi Free Stuff)
  • animatedmenus.com – Vendor of Animated Menus – cited Poor sales
  • acctsync.com – Vendor of QuickBooks Components
  • DuckReports – Vendor of Duck Reporting Components
  • BalticSolutions – Vendor of ColorMemo
  • Helping Hands Software – n/a
  • UDC Corp – Vendor of MemoWriter, PowerSpreadsheet
  • IBrightSolutions – Vendor of Simulation Software
  • Unley Software – KeyDB
  • DictaSoft.com, Layout Components
  • CrystalVCL.net, Crystal VCL and other components
  • Cando Framework
  • RHITech.com, Excel Add-in component
  • DScriptVCL.com, Delphi Scripting VCL components
  • CSS-Software.com, CSS Component Suite
  • JB Components/ JB Component Suite
  • CytonResearch.com, VCL Component Packs
  • Codecellerate.com, Drawing Engine,
  • EZCad Soft, EZSoft Engineering
  • ValdSoft, VSLib component package
  • AriseSoft, AriseSoft Shell Component Pack (and others)
  • CoolPaint.com, HTML tokenizer, HTML mini-viewer, Cool Chart
  • ksv.hypermart.net, Handmade VCL Components
  • alphadomino.ru, Gantt Chart components
  • ta4delphi.com, Technical Analysis Charting components
  • praktical.com, Praktical Organic button components
  • maverick.co.uk, Aqua Mac-looking components
  • FlatStyle.de, Flat Style Components
  • SlickTools.com, InfoMatters office components
  • MediaPilot.com, Installation components
  • Intag.de, DxComponent Collection

Vendors who stopped supporting Delphi

  • Softel VDM – Vendor of SftTree, SftBox, SftButton – reason cited as “massive software piracy”
  • AHM Tritron Tools – Vendor of AHM Components
  • adrock.com – Adrock Calendar Components (GPL)
  • tekhnologos.com – Their VCL library is no longer for licensing
  • SweetControls.com – Sweet Controls
  • degisy.com – Degisy Controls

Vendors who stopped supporting one of their Delphi components/ or all of their products

  • MicroOlap.com, Packet Sniffer for Delphi, end of life
  • SciBit.com MySQL Components, end of life
  • KsDev.com, Block Engine, Office VCL (disappeared from their site)
  • lphaAsp.com Alpha Corporation, Alpha Units, Alpha Interceptor (disappeared from their site)
  • Djordje Peric, PDJ Packs (their website is no longer available)
  • CodeBot.com, CodeBot library (no longer available for download)
  • SuiPack.com, KeyDB (formerly from SUIPack)
  • Syntetix.com, Theme Control
  • CoolDev.com (All their Delphi products are now freeware)
  • 9spice.net RapidSolutions, RapidTree, 9Rays Treeview
  • Willmark.ru, WillMark Tree Wizard
  • GeoCities/Stephan Marais – Open Sybase CT-Library Library
  • TekhneLogos.com, PowerCad, supposedly given a non-existent 10% discount on Torry’s
  • Baltsoft.com, ProjectPlus components
  • Tops.com.pl, SMSC Delphi components (cited as “no demand” or “very low response”)
  • Timelesstech.com, all their Delphi components (Lock & Key, Fax components)

DFS EllipsisPanel is Delphi component that can shorten the caption text, replacing it with '...'

TdfsEllipsis Panel Demo
Delphi code modernization trend
Changes in TdfsEllipsisPanel have been made by Valient Newman to make the component meet the requirements of Delphi 2, 2009 and higher.
Checked in 2009
Updated 22 dec 2025

TdfsEllipsisPanel v1.20

DFS EllipsisPanel is Delphi component that can shorten the caption text, replacing it with '...' when it does not fit the available space. Also a generic function that "ellipsifies" a string is provided.

The components TdfsEllipsisPanel v1.20 is available in My Github Repository

This component can be freely used and distributed in commercial and private environments. All DFS source code is provided free of charge. The software is provided to you "AS-IS". As such, there is no guarantee of any support whatsoever. The component throws an Access violation error and its source code can be used as an example for study.



credits to:
Bradley D. Stowers The author of All Delphi Free Stuff (“DFS”)
Copyright 1996, Brad Stowers. All Rights Reserved.

DFS GrabBar - Delphi component, grab bar, or splitter, to allow two windows to be resized simultaneously

TdfsGrabBar Demo
Delphi code modernization trend
Changes in TdfsGrabBar have been made by Valient Newman to make the component meet the requirements of Delphi 2, 2009 and higher.
Checked in 2009
Updated 22 dec 2025

TdfsGrabBar v1.17

DFS GrabBar is a bar that allows two TWinControl components to be resized by dragging it.

The components TdfsGrabBar v1.17 is available in My Github Repository

This component can be freely used and distributed in commercial and private environments. All DFS source code is provided free of charge. The software is provided to you "AS-IS". As such, there is no guarantee of any support whatsoever.



credits to:
Bradley D. Stowers The author of All Delphi Free Stuff (“DFS”)
Copyright 1996, Brad Stowers. All Rights Reserved.

DFS MRUFileList - Delphi component to simplify adding MRU file lists to menus

TMRUFList Demo with RadStudio Delphi 2009 Closed Files list
Delphi code modernization trend
Changes in TdfsMRUFileList have been made by Valient Newman to make the component meet the requirements of Delphi 2, 2009 and higher.
Checked in Delphi 2007, 2009
Updated 21 dec 2025

TdfsMRUFileList v2.68

DFS MRUFileList - Delphi component that greatly simplifies adding MRU file lists to menus.
TMRUFList Demo was made with RadStudio Delphi 2009 Closed Files list in mdFileNameOnly.

The components TdfsMRUFileList v2.68 is available in My Github Repository

This component can be freely used and distributed in commercial and private environments. All DFS source code is provided free of charge. The software is provided to you "AS-IS", and all risks and losses associated with it's use are assumed by you. As such, there is no guarantee of any support whatsoever.



credits to:
Bradley D. Stowers The author of All Delphi Free Stuff (“DFS”)
Copyright 1996, Brad Stowers. All Rights Reserved.

DFS Icon Controls: Icon ComboBox and Icon ListBox caching components for Delphi

TdfsIconComboBox Demo with Delphi 2009 icons
Delphi code modernization
Changes in TdfsIconComboBox and TdfsIconListBox have been made by Valient Newman to make the component meet the requirements of Delphi 2, 2009 and higher.
Checked in Delphi 7 and Delphi 2007, 2009
Updated 18 dec 2025

TdfsIconComboBox and TdfsIconListBox v1.17

The caching Icon ComboBox and Icon ListBox components for Delphi.

A dropdown list style combobox that displays the icons that exist in a given file, and a listbox that displays the icons that exist in a given file, either horizontally or vertically.

TdfsIconListBox Demo with Delphi 2009 icons

Features: Optionally, the control can disable itself when the filename is invalid. Optionally, the control can load icons "on demand." This speeds up the initialization process greatly because all icons do not have to be loaded when the control is created. Many file formats can be read from, including: .EXE, .DLL, .ICO .ICL { PCTools? Icon Library .NIL { Norton Icon Library ListBox can simulate a grid of icons, allowing you to set the number of icons to be displayed in both the X and Y direction. This setting can be changed dynamically.

The components TdfsIconComboBox and TdfsIconListBox v1.17 is available in My Github Repository

This component can be freely used and distributed in commercial and private environments. All DFS source code is provided free of charge. As such, there is no guarantee of any support whatsoever.



credits to:
Bradley D. Stowers The author of All Delphi Free Stuff (“DFS”) Copyright 1996, Brad Stowers. All Rights Reserved.

FWTrayIcon - component for registering class to work with the system tray

FWTrayIcon - component for registering class to work with the system tray demo
Delphi code modernization
Changes in TFWTrayIcon by Valient Newman to make the component meet the requirements of Delphi 2009 and higher.
Checked in Delphi 7 and Delphi 2007, 2009
Updated 18 dec 2025

TFWTrayIcon v1.05

Сomponent for registering class to work with the system tray.

The component TFWTrayIcont v1.05 is available in My Github Repository

The component has realization issues for instance with hint display and the use of this component is on your own risk.

The software is provided as is without any garanties and warranty.
This component can be freely used and distributed in commercial and private environments.



credits to:
Fangorn Wizards Lab Exstension Library
Alexander (Rouse_) Bagel, his GitHub
© Fangorn Wizards Lab 1998 - 2005.

FWHint - component to register class to work with application hints

FWHint - component demo
Delphi code modernization
Changes in TFWHint by Valient Newman to make the component meet the requirements of Delphi 2009 and higher.
Checked in Delphi 7 and Delphi 2007, 2009
Updated 17 dec 2025

TFWHint v1.05

Сomponent for registering class to work with application hints.

The component TFWHint v1.05 is available in My Github Repository

This component can be freely used and distributed in commercial and private environments.



credits to:
Fangorn Wizards Lab Exstension Library
Alexander (Rouse_) Bagel, his GitHub
© Fangorn Wizards Lab 1998 - 2005.

DlgTest is design-time testing of TCommonDialog component descendants

CodeGear Delphi 2007
Delphi legacy code modernization
Corrections brought in DlgTest by Valient Newman to make the component meet the requirements of Delphi 6, when the design-time and runtime code must be separated.
Checked in Delphi 7 and Delphi 2007, 2009
Updated 17 dec 2025
The component DlgTest is available in My Github Repository This component can be freely used and distributed in commercial and private environments.

DlgTest v1.05

Design-time testing of TCommonDialog component descendants.
credits to :
Bradley D. Stowers The author of All Delphi Free Stuff ("DFS")
Copyright 1996, Brad Stowers. All Rights Reserved.

DFS Color Button

Delphi legacy code modernization
Corrections brought in CBtnForm, ColorAEd, DFSClrBn by Valient Newman to make the component meet the requirements of Delphi 2, 2009 and higher, where WinTypes, WinProcs units are absent.
Checked in Delphi 7 and Delphi 2007, 2009
Updated 15 dec 2025

TdfsColorButton v2.62

A Windows 95 and NT 4 style color selection button, which displays a palette of 20 color for fast selection and a button to bring up the color dialog.

This component can be freely used and distributed in commercial and private environments.

The component DFS Color Button is available in My Github Repository



credits to :
Bradley D. Stowers The author of All Delphi Free Stuff ("DFS")
Copyright 1996, Brad Stowers. All Rights Reserved.

Delphi 2007 and Delphi 2009+ difference in string types. Migration

CodeGear Delphi 2007

This is not a divine revelation, but simply semblance of my personal reference.

In Delphi 2007, AnsiString was the default string type used for general-purpose string manipulation.
This means variables declared simply as string were compiled as AnsiString. This changed in Delphi 2009+, where string became an alias for UnicodeString.

AnsiString in Delphi 2007:
  • In Delphi 2007 Char was an 8-bit (1-byte) AnsiChar, while in Delphi 2009+, it became a 16-bit WideChar (UTF-16) by default.
  • Encoding: The interpretation of these bytes depends on the operating system's current active code page (e.g., Windows-1252, or specific locales like code page 936 for simplified Chinese).
  • Length: AnsiString was dynamically allocated and limited only by available memory, unlike the older ShortString that was limited to 255 characters.
The primary distinction in Delphi 2009 and later is the shift to Unicode.
  • Char now represents a 16-bit character, enabling full Unicode support. Char becomes WideChar
  • string is an alias for UnicodeString (UTF-16, 2 bytes per character).
  • AnsiString still exists but is used primarily for backward compatibility or interfacing with non-Unicode systems/APIs.
When moving from Delphi 2007 to Delphi 2009 (or later):
  • AnsiString to UnicodeString: String changes, leading to potential data loss if ANSI data is assigned directly to Unicode strings.
  • Explicit Casts: Use PAnsiChar(myWideString), AnsiString(myUnicodeString) and similar, where needed, and be aware of character mapping.
  • Migration Required: Code using Char, PChar needed updates, especially with assignments between ANSI and Unicode types.
  • If a 1-byte buffer is in need, use RawByteString instead of string or Char. RawByteString is AnsiString with no code page set by default (AnsiString($ffff)).
(e.g., #128 isn't the Euro sign in Unicode).
Delphi and Unicode, Marco Cantù, December 2008

Delphi complaint about the form, "stream error"

CodeGear Delphi 2007, 2009
  1. Rename the .dfm to .txt. Or run $(Delphi)\bin\convert.exe -t Form.txt
  2. Run $(Delphi)\bin\convert.exe Form.txt
  3. Reload Delphi and load the form.
This will convert the form in text into the binary version of .dfm file.

This should be useful:
  • To cure "stream error".
  • When the form from a legacy project behaves erratically.
  • To remove junk and reduce the .dfm file size of the form.
    For example, converting through uploading to text format and back reduced the size of the main form in my project Activity and Authentication Analyzer from 627 KB to 283.
Delphi Form Conversion Utility Copyright (c) Embarcadero Technologies, Inc. Usage: convert.exe [-i] [-s] [-t | -b] <filespec(s) | @filelist> -i Convert files in-place (output overwrites input) -s Recurse subdirectories -t Convert to text -b Convert to binary

SqlitePass support for the Rad Studio Delphi 2007

CodeGear Delphi 2007
This my addition gives the support for Rad Studio Delphi 2007 to SqlitePass and quite possible to Delphi 2005, 2006.
The most significant processing has been made to the file SqlitePassDbo.inc
Published on Github

HexEditor

HexEditor

Simple corrections brought in THexEditor, THexToCanvas by Valient Newman to make the component meet the requirements of Delphi 6 and higher, when the design-time and runtime code must be separated.
Changes published September 6, 2023


Updated 15 dec 2025

Corrections were made to comply with Delphi 2009 requirements.

Checked in Delphi 7 and Delphi 2007, 2009

This component is used in Activity and Authentication Analyzer

The component HexEditor is available in My Github Repository

THexEditor v1.18, THexToCanvas v1.0 Beta 2

THexEditor descends from TCustomGrid, and displays and edits hexadecimal/binary files THexToCanvas is a descendant of TComponent, assign a THexEditor to it, set some properties and you can paint the hex data to a canvas (e.g. printer canvas)

credits to:

John Hamm, john@snapjax.com, http://users.snapjax.com/john/ (s.b. for details)

Christophe LE CORFEC, CLC@khalif.com for his introduction to the EBCDIC format and the nice idea about half byte insert/delete

Philippe Chessa, Philippe_Chessa@compuserve.com for his suggestions about AsText, AsHex and better support for the french keyboard layout

Daniel Jensen, no_comply@usa.net for octal offset display and the INS-key recognition stuff

written by Markus Stephany, mirbir.st@t-online.de, http://home.t-online.de/home/mirbir.st


Переход на новые версии Delphi

F1026 File not found: 'DockForm.dcu'

CodeGear Delphi 2007
Migrating to Delphi 2005/2006/2007/2009/2010 and higher ussues while Delphi code modernization trend.
There is no DockForm.pas in Delphi 2005/2006/2007/2009/2010 sources but you can use it in your application.
DockForm with such a name appeared in Delphi 4/5, with name uDockForm was in Delphi 6/7.
This is a piece of humpbacked advice:
Just add "designide" in Project -> Options -> Packages -> Build with runtime packages.
The design time package with the code in it is needed, add to "require" section.
Such an advice is applied for research only purposes.
First: to run the application on a computer where Delphi is not installed, one will need the copy bpl-file is required.
Second: it is not allowed to deploy any of that code, copyright would be infringed. One should never be recompiling the code in the toolsapi source directory.
Stub unit
Unit can be used as a temporary measure, a palliative while migrating to new versions of Delphi
unit DockForm; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TDockableForm = class(TForm) private
{ Private declarations } public { Public declarations } end; var DockableForm: TDockableForm; implementation {$R *.dfm} end.

Stub DockForm.dfm
object DockableForm: TDockableForm ... ... end
If you see "...", this means the code is incomplete and this is done intentionally.
If you are unable to apply this, please contact for paid consultation.
Вы видите "...", это означает, что код не завершён и сделано это намеренно.
Если вам не удалось применить, обращайтесь за платной консультацией.

Where is Proxies.dcu? Cannot find unit Proxies.pas

Delphi 6 About Dialog

Delphi code modernization trend

While migrating to new versions, Delphi may lack the Proxies file.
This is a common issue while porting components.
If application or expert uses designtime information in Delphi 6 and later, one have to replace

uses DsgnIntf;

with

uses DesignIntf, DesignEditors;

But then one can run into an error message 'Cannot find unit Proxies.pas'
If this occures in a run-time package then one should separate out the design-time items and put them into a design-time package.
Humpbacked advice: one should then add DesignIde.dcp to the requires section of your design-time package.
Such an advice is applied for research only purposes.
To run the application on a computer where Delphi is not installed, one will need to copy bpl-file. One are not allowed to deploy any of that code.

If the [Pascal Fatal Error] ... : F1026 File not found: 'DesignIntf.dcu' message occurs, one must put designide in the section requires in package.


Stub unit

Can be used as a temporary measure, a palliative while migrating to new versions of Delphi

unit Proxies; interface function IsProxyClass(ComponentClass: TClass): Boolean; implementation function IsProxyClass(ComponentClass: TClass): Boolean; begin ... end; end.


If you see "...", this means the code is incomplete and this is done intentionally.
If you are unable to apply this, please contact for assistance.
Вы видите "...", это означает, что код не завершён и сделано это намеренно.
Если вам не удалось применить, обращайтесь за консультацией.
Переход на новые версии Delphi