Unable to load project in Delphi 2007. Only one top level element is allowed in an XML document

Unable to load project in Delphi 2007. Only one top level element is allowed in an XML document
Loading the project .dproj file created in a newer Delphi that older Delphi 2007 version can cause such an error:
"Only one top level element is allowed in an XML document"

There is the requirement for XML document to have exactly one root element.
The error informs that ".dproj file" which is the document in XML format does not adhere to this requirement and thus malformed.
Perhaps, the .dproj file has been corrupted.
The most expedient way to solve this issue is to remove the .dproj file, launch the correspondent .dpr file and let the IDE regenerate one.
If the matter is with dpk file, the way to solve is to create an empty package and import the files in.

FMSoft uniGUI components tryout

FMSoft uniGUI components version - Professional 1.90.0.1552 were tested in Embarcadero Delphi 11.3 Update 3 and Embarcadero Delphi 10.4.1 Update 1.

Embarcadero Delphi 11 Update 3

Argument out of range while using TuniDBGrid and TuniDBVerticalGrid

Two components: UniDBGrid (class TuniDBGrid) and UniDBVerticalGrid (class TuniDBVerticalGrid) showed erratic behavior in Embarcadero Delphi 11 environment. Both of them gave out error “Argument out of range” after placing om form. The mouse became trapped inside the form and it was difficult to release.

Several other components from some Categories: uniGUI Standard: UniCheckBox, UniGridPivotExcelExporter, UniStringGrid, UniFieldSet, UniFieldContainer, uniGUI Additional: UniBitBtn, UniDBEdit, uniGUI Data Controls: UniDBNumberEdit, UniDBMemo, UniDBHTMLMemo, UniDBNavigator, UniDBListBox, UniDBImage were tested and looks like they worked as expected.


Embarcadero Delphi 10.4 Update 1

FMSoft uniGUI standalone server working with TuniDBGrid and TuniDBVerticalGrid

Either UniDBGrid or UniDBVerticalGrid did not generate any errors and were workable in Embarcadero Delphi 10.4.1 environment.

An interesting fact: if the project is created, these components are placed on the form and everything is saved in the Delphi 10.4.1 environment, then these components and the project is workable if opened in Delphi 11.3.



Argument out of range Details:

[5B9CA55A]{rtl280.bpl } System.Classes.TCollection.GetItem (Line 6398, "System.Classes.pas" + 1) + $A [528F535A]{vcldb280.bpl} Vcl.DBGrids.TDBGridColumns.GetColumn (Line 1888, "Vcl.DbGrids.pas" + 1) + $4 [528F7C9E]{vcldb280.bpl} Vcl.DBGrids.TCustomDBGrid.DrawCell (Line 3008, "Vcl.DbGrids.pas" + 78) + $B [5ADF307B]{vcl280.bpl } Vcl.Graphics.TCanvas.FontChanged (Line 4346, "Vcl.Graphics.pas" + 4) + $A [5AF7C537]{vcl280.bpl } Vcl.Grids.DrawCells (Line 2421, "Vcl.Grids.pas" + 48) + $12 [5AF7CEE5]{vcl280.bpl } Vcl.Grids.TCustomGrid.Paint (Line 2600, "Vcl.Grids.pas" + 125) + $2F [5C585B2F]{vclactnband280.bpl} Vcl.ActnMenus.CallWindowHook (Line 762, "Vcl.ActnMenus.pas" + 20) + $F [5ADF2D92]{vcl280.bpl } Vcl.Graphics.TCanvas.SetPenPos (Line 4221, "Vcl.Graphics.pas" + 1) + $9 [5AE23A27]{vcl280.bpl } Vcl.Controls.TCustomControl.PaintWindow (Line 14691, "Vcl.Controls.pas" + 6) + $5 [5AE1D3B5]{vcl280.bpl } Vcl.Controls.TWinControl.PaintHandler (Line 10728, "Vcl.Controls.pas" + 4) + $14 [5AE1DBB0]{vcl280.bpl } Vcl.Controls.TWinControl.WMPaint (Line 10931, "Vcl.Controls.pas" + 6) + $5 [5AE239C1]{vcl280.bpl } Vcl.Controls.TCustomControl.WMPaint (Line 14680, "Vcl.Controls.pas" + 2) + $4 [5AE1802E]{vcl280.bpl } Vcl.Controls.TControl.WndProc (Line 7591, "Vcl.Controls.pas" + 91) + $6 [5AE19B02]{vcl280.bpl } Vcl.Controls.TControl.GetStyleName (Line 8627, "Vcl.Controls.pas" + 1) + $8 [5AE19B2E]{vcl280.bpl } Vcl.Controls.TControl.GetStyleName (Line 8631, "Vcl.Controls.pas" + 5) + $7 [5B8D0683]{rtl280.bpl } System.TObject.Dispatch (Line 19228, "System.pas" + 11) + $0 [5AF270E5]{vcl280.bpl } Vcl.Themes.TStyleHook.WndProc (Line 7713, "Vcl.Themes.pas" + 38) + $6 [5AF272C6]{vcl280.bpl } Vcl.Themes.TMouseTrackControlStyleHook.WndProc (Line 7812, "Vcl.Themes.pas" + 1) + $4 [5AF6B410]{vcl280.bpl } Vcl.Forms.TScrollingStyleHook.WndProc (Line 14905, "Vcl.Forms.pas" + 0) + $0 [5AF2690A]{vcl280.bpl } Vcl.Themes.TStyleHook.HandleMessage (Line 7418, "Vcl.Themes.pas" + 20) + $6 [5B04AE92]{vcl280.bpl } Vcl.Styles.TStyleEngine.HandleMessage (Line 3610, "Vcl.Styles.pas" + 22) + $7 [5AF23338]{vcl280.bpl } Vcl.Themes.TStyleManager.HandleMessage (Line 5872, "Vcl.Themes.pas" + 11) + $11 [5AE1B1D3]{vcl280.bpl } Vcl.Controls.TWinControl.DoHandleStyleMessage (Line 9462, "Vcl.Controls.pas" + 0) + $F [5AE1D1F5]{vcl280.bpl } Vcl.Controls.TWinControl.WndProc (Line 10644, "Vcl.Controls.pas" + 170) + $6 [7A97FA59]{uniGUI28Core.bpl} Uniguibaseclasses.TUniGUIBaseControl.VCLWndProc + $19 [5AE1C700]{vcl280.bpl } Vcl.Controls.TWinControl.MainWndProc (Line 10321, "Vcl.Controls.pas" + 3) + $6 [5B9E5C1C]{rtl280.bpl } System.Classes.StdWndProc (Line 18517, "System.Classes.pas" + 8) + $0 [5AF65263]{vcl280.bpl } Vcl.Forms.TApplication.ProcessMessage (Line 11488, "Vcl.Forms.pas" + 23) + $1 [5AF652A6]{vcl280.bpl } Vcl.Forms.TApplication.HandleMessage (Line 11518, "Vcl.Forms.pas" + 1) + $4 [5AF655E5]{vcl280.bpl } Vcl.Forms.TApplication.Run (Line 11657, "Vcl.Forms.pas" + 27) + $3 [002380A2]{bds.exe } bds.bds (Line 227, "" + 16) + $2

ZEOS Library support for the Embarcadero Delphi 11, 12

Github logo
While testing the components made by FMSoft uniGUI with databases, I discovered that two versions of Delphi running simultaneously were fighting over Zeolib packages. So I had to make Zeolib support for Embarcadero Delphi 11.
This addition gives the support for Embarcadero Delphi 11 to ZeosLib, changed the LibSuffix from 270 to 280 for Delphi 11.
Published on Github

On November 14th I had to make Zeolib support for Embarcadero Delphi 12.
This addition gives the support for Embarcadero Delphi 12 to ZeosLib, changed the LibSuffix from 280 to 290 for Delphi 12.
Compile for Windows 32 Target Platform.
Before my code edits, the Delphi 12 Athens compiler gave an error: "E2251 Ambiguous overloaded call to 'Max'"
Published on Github
ZeosLib is Database components for Delphi, FreePascal/Lazarus, Kylix, C++ Builder

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.

Checked in Delphi 7 and Delphi 2007

This component is used in Activity and Authentication Analyzer

The compoment HexEditor is available in My Github Repository

THexEditor v1.16, 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

What Delphi version matches Delphereum for the best

Delphereum Logo
Delphereum is a Delphi interface to the Ethereum, but one must choose proper Delphi version to compile projects in learning.

Unit scope names are prefixes that are prepended to unit names, this feature appeared in Delphi XE2 (VER230). Delpherium uses Unit scope names, for example, web3.eth.
That means Delphi version must be XE2 or higher.
Rudy Velthuis, one of the co-author, writes in comments section in the heads of units "Delphi version XE2 or later".

Well, but in unit web3.json.pas Stefan van As uses inline variable declarations, for instance,
var I := value.EstimatedByteSize;
such syntax appeared only in Delphi 10.3 Rio (VER330)!
Now I have a choice: either to update Delphi to a version higher than 10.2 Tokyo, or try to correct the sources using conditional compile directives, hiding variable declarations inside lines for versions 230-320 and assuming a role of co-author, needless to say if such activity does not require a serious alteration of the sources, which can lead to other errors.
I am newbie in Delphereum, but not newbie in programming, and I foresee the effect of editing someone's code when you are not good at a subject area.
First I will write to the author, Stefan van As, perhaps, his opinion will be useful or decisive.
unit web3.coincap;

In Delphi XE6 System.NetEncoding in Uses clause was not resolved.
In Delphi XE7 appeared.
Again
unit web3.coincap;

There was System.Types.IAsyncResult neither in Delphi XE6 nor in Delphi XE7.
Present in Delphi XE8, and is in Embarcadero Delphi 11 Alexandria for certain.
I decided to refuse from directive {$IFEND}, leaving the only {$ENDIF} and remove the conditional compilation directive {$LEGACYIFEND ON} at the beginning of the units. I only managed to spoil it with my edits in web3.json.
web3.json unit has copyright (c) 2018 of Stefan van As.
The directive {$ENDIF} was introduced in Delphi XE4, but versions earlier than Delphi X4 with {$IFEND} are out for Delpherium, because now I found out, that at least Delphi XE8 is to continue.
Delphi XE8 and THTTPClient
Delphi XE8 and unit web3.http
'THTTPClient' does not contain a member named 'BeginGet'...
'THTTPClient' does not contain a member named 'EndAsyncHttp'...
'THTTPClient' does not contain a member named 'StatusCode'...
In Delphi 10.2 Tokyo there appeared:
functions BeginGet, EndAsyncHTTP and property StatusCode
in THTTPClient, unit System.Net.HttpClientent.
But the Delphi 10.2 Tokyo compiler in gave out the next errors, unit web3.http:
E2250 There is no overloaded version of 'get' that can be called with these arguments
in function call
const response = get(URL, [TNetHeader.Create('Content-Type', 'application/json')], backoff);
Embarcadero Delphi 10.3 Rio brings inline variable declarations and now there is no need to insert compiler directives, where inline variable declarations were.
Units web3.http, web3.coincap, web3.json, web3.sync were replaced with original copies.
But the Delphi 10.3 failed to compile, reported two errors in unit web3.coincap:
[dcc32 Error] E2149 Class does not have a default property
in line:
Result := TAsset.Create(TJsonArray(FJsonValue)[Index]);
Class - TJSONArray.
and
[dcc32 Error] E2010 Incompatible types: 'IAsyncResult' and 'web3.IResult'
in
function assets(const callback: TProc, IError>): IAsyncResult;
Embarcadero Delphi 10.4 complied and launched the project Connecting Delphi to a local (in-memory) blockchain

Summing up!
Delphereum with the first example Connecting Delphi to a local (in-memory) blockchain was test in Embarcadero Delphi XE6, Delphi XE7, Delphi XE8, Delphi 10.2 Tokyo, Delphi 10.3 Rio, Delphi 10.4 Sydney, Delphi 11.3 Alexandria.
Delphereum can be compiled and run in Embarcadero Delphi 10.4 Sydney or Delphi 11.3 Alexandria environment.
I got an idea it is wrong for Delphereum to be without a logo and me proposed it.
P.S.
Thanks to my schoolkid son for giving me his old computer for testing.
Github logo
Made the github repositories for source code examples for Ethereum for Delphi Developers (Ethereum programming on Embarcadero Technologies Delphi). All of this was possible due to tutorials of Stefan van As

GitHub Desktop can not be installed on Windows 7

GitHubDesktopSetup-x64.exe - Entry Point Not Found
While installing the GitHub Desktop on Windows 7 the error message is appeared:
"The procedure entry point SetDefaultDilDirectories could not be located in the dynamic link library KERNEL32.dll."
Affected these DLL entry points: "SetDefaultDllDirectories, AddDllDirectory, and RemoveDllDirectory".
The security update KB2533623 is the solution to this problem

Browsing path for Delphereum in Delphi

Delphereum Logo
One of the alternative way to deploy Delphereum sources:
$(BDS)\delphereum; $(BDS)\DelphiBigNumbers\Source; $(BDS)\CryptoLib4Pascal\CryptoLib\src\Interfaces; $(BDS)\CryptoLib4Pascal\CryptoLib\src\Math; $(BDS)\CryptoLib4Pascal\CryptoLib\src\Utils; $(BDS)\CryptoLib4Pascal\CryptoLib\src\Utils\Randoms; $(BDS)\CryptoLib4Pascal\CryptoLib\src\Crypto\Digests; $(BDS)\CryptoLib4Pascal\CryptoLib\src\Asn1\Pkcs; $(BDS)\CryptoLib4Pascal\CryptoLib\src\Asn1; $(BDS)\CryptoLib4Pascal\CryptoLib\src\Utils\Encoders; $(BDS)\CryptoLib4Pascal\CryptoLib\src\Asn1\RossStandart; $(BDS)\CryptoLib4Pascal\CryptoLib\src\Asn1\Oiw; $(BDS)\HashLib4Pascal\src\Interfaces; $(BDS)\HashLib4Pascal\src\Utils; $(BDS)\HashLib4Pascal\src\Base; $(BDS)\HashLib4Pascal\src\KDF; $(BDS)\HashLib4Pascal\src\Nullable; $(BDS)\HashLib4Pascal\src\NullDigest; $(BDS)\HashLib4Pascal\src\Checksum; $(BDS)\HashLib4Pascal\src\Hash32; $(BDS)\HashLib4Pascal\src\Hash64; $(BDS)\HashLib4Pascal\src\Hash128; $(BDS)\HashLib4Pascal\src\Crypto; $(BDS)\HashLib4Pascal\src\Interfaces\IBlake2BParams; $(BDS)\HashLib4Pascal\src\Crypto\Blake2BParams; $(BDS)\HashLib4Pascal\src\Interfaces\IBlake2SParams; $(BDS)\HashLib4Pascal\src\Crypto\Blake2SParams; $(BDS)\CryptoLib4Pascal\CryptoLib\src\Asn1\Nist; $(BDS)\CryptoLib4Pascal\CryptoLib\src\Asn1\Misc; $(BDS)\CryptoLib4Pascal\CryptoLib\src\Asn1\TeleTrust; $(BDS)\CryptoLib4Pascal\CryptoLib\src\Asn1\CryptoPro; $(BDS)\SimpleBaseLib4Pascal\SimpleBaseLib\src\Bases; $(BDS)\SimpleBaseLib4Pascal\SimpleBaseLib\src\Utils; $(BDS)\SimpleBaseLib4Pascal\SimpleBaseLib\src\Interfaces; $(BDS)\CryptoLib4Pascal\CryptoLib\src\Crypto\Prng; $(BDS)\CryptoLib4Pascal\CryptoLib\src\Utils\Rng; $(BDS)\CryptoLib4Pascal\CryptoLib\src\Crypto\Engines; $(BDS)\CryptoLib4Pascal\CryptoLib\src\Crypto\Parameters; $(BDS)\CryptoLib4Pascal\CryptoLib\src\Crypto; $(BDS)\CryptoLib4Pascal\CryptoLib\src\Math\EC; $(BDS)\CryptoLib4Pascal\CryptoLib\src\Crypto\EC; $(BDS)\CryptoLib4Pascal\CryptoLib\src\Asn1\Sec; $(BDS)\CryptoLib4Pascal\CryptoLib\src\Asn1\X9; $(BDS)\CryptoLib4Pascal\CryptoLib\src\Asn1\CryptLib; $(BDS)\CryptoLib4Pascal\CryptoLib\src\Math\Raw; $(BDS)\CryptoLib4Pascal\CryptoLib\src\Math\EC\Multiplier; $(BDS)\CryptoLib4Pascal\CryptoLib\src\Math\EC\Abc; $(BDS)\CryptoLib4Pascal\CryptoLib\src\Math\Field; $(BDS)\CryptoLib4Pascal\CryptoLib\src\Math\EC\Custom\Sec; $(BDS)\CryptoLib4Pascal\CryptoLib\src\Math\EC\Custom\Djb; $(BDS)\CryptoLib4Pascal\CryptoLib\src\Crypto\Signers; $(BDS)\CryptoLib4Pascal\CryptoLib\src\Crypto\Generators; $(BDS)\CryptoLib4Pascal\CryptoLib\src\Crypto\Macs

Delphereum is a Delphi interface to the Ethereum blockchain that allows for development of native decentralized applications.
$(BDS) is path shortcut which contains the full path to RAD IDE including "Bin" folder. Shortcuts are stored in rsvars.bat.

Web3, Decentralized autonomous organizations, Identity, Ethereum address

Ethereum Logo
Web3 solves these problems by allowing you to control your digital identity with an Ethereum address and ENS profile. Using an Ethereum address provides a single login across platforms that is secure, censorship-resistant, and anonymous.
Quote was taken from Introduction to Web3. ethereum.org
I am tormented by seditious thought: the use of a unique and single address of that Ethereum is not the same "Permanent record", utmost centralization, the authentication token, but created and presented by the very man and by his own will?
Zero-knowledge proofs, however, can simplify authentication for both platforms and users. Once a ZK-proof has been generated using public inputs (e.g., data attesting to the user's membership of the platform) and private inputs (e.g., the user's details), the user can simply present it to authenticate their identity when they need to access the service. This improves the experience for users and frees organizations from the need to store huge amounts of user information.
from Zero-knowledge proofs. ethereum.org

No metadata could be loaded for: BlackfishSQL

Database Explore
Description of the problem is given for Delphi 2007.
Window of "Database Explore"
No metadata could be loaded for: BlackfishSQL
While an attempt to launch the "SQL Window" the Message box with error appeared.

Now is the solution:
While the RAD installation "dataexplore.exe.config" file is stored into the path:
"C:\Users\All Users\{6AF0EFC6-B937-4704-A430-319EB93F4C12}\dbexplr\D3C32C11\E7AAAB64..."
The way with aliases is:
"C:\Documents and Settings\All Users\Application Data..."
The "Database Explore" [dataexplore.exe] turns to the contents of the "Config file" [DataExplore.exe.config] which is in the "C:\Program Files\CodeGear\RAD Studio\5.0\bin" path.
The problem is solved by coping the "Config file" from the directory with "All users" path to the "bin" one!

F1026 File not found: 'DockForm.dcu'

Migrating to Delphi 2005/2006/2007/2009/2010 and higher ussues.
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

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

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.


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.

Delphi Version Features

Feature Version
& operator for treating keywords as identifiersDelphi 2006
{$IFEND} directive no longer required to close {$IF} statements: {$ENDIF} can now be used instead.Delphi XE4
{$LEGACYIFEND} directiveDelphi XE5
{$MESSAGE} directiveDelphi 6
{$WARN} directiveDelphi 7
64 bit compilerDelphi XE2
Abstract classesDelphi 2006
Anonymous methods / closuresDelphi 2009
AttributesDelphi 2010
class constructors / destructorsDelphi 2010
Class data (class var)Delphi 2006
Class helpersDelphi 2006
Class propertiesDelphi 2005
Custom managed recordsDelphi 10.4
delayed keyword (for loading of DLLs)Delphi 2010
deprecated directiveDelphi 6
deprecated directive with commentDelphi 2009
DirectoryExists function moved to SysUtils unit from FileCtrlDelphi 6
Dynamic arraysDelphi 4
Dynamic array concatenation and addition extensions. Dynamic arrays can be initialised by assigning an array constant, as in DI := [1, 2, 3]; and can be concatenated using code like DI := DI + [1, 2, 3]; or DI := DJ + DK, where DIDJ & DK are all dynamic integer arrays.Delphi XE7
EOSError (instead of EWin32Error)Delphi 6
ExcludeTrailingPathDelimiter functionDelphi 6
Exit with result parameterDelphi 2009
Final methodsDelphi 2006
Floating point number comparison routines added to Math unit.Delphi 6
for .. in loopsDelphi 2005
FramesDelphi 5
Function inliningDelphi 2005
GenericsDelphi 2009
IInterfaceDelphi 6
IncludeTrailingPathDelim functionDelphi 6
Inline variable declarationsDelphi 10.3
inline keywordDelphi 2005
Inner exceptionsDelphi 2009
Insert and Delete RTL routines can be used with dynamic arrays in a similar way to how they are used with strings.Delphi XE7
Int8 typeDelphi 2009
Int16 typeDelphi 2009
Int32 typeDelphi 2009
Int64 type Delphi 4
Interface to object castingDelphi 2010
library directiveDelphi 6
LongWord typeDelphi 4
Margins and Padding properties on TControlDelphi 2006
Namespaces [more info]. See also: Unit scope names.Delphi 2005
Nested constants within classes / recordsDelphi 2005
Nested types within classesDelphi 2005
Operator overloading on recordsDelphi 2006
Overloading for functions, procedures and methodsDelphi 4
platform directiveDelphi 6
RaiseLastOSError procedureDelphi 6
Record Helpers for simple typesDelphi XE3
Records with methodsDelphi 2006
resourcestring statementDelphi 3
RTTI enhancementsDelphi 2010
SafeLoadLibrary functionDelphi 5
Scoped enumerators (must have type name prefix)Delphi 2009
Sealed classesDelphi 2006
static directive for class methodsDelphi 2005
strict private and strict protected visibility specifiersDelphi 2005
string type is UnicodeStringDelphi 2009
StrUtils unitDelphi 6
TApplication.MainFormOnTaskbar propertyDelphi 2007
TArray type in System unit.Delphi 2010
TBytes alias for array of ByteDelphi 2007
Text format form filesDelphi 5
TFormatSettings and overloaded format and conversion routines that use itDelphi 7
TObject.Equals virtual methodDelphi 2009
TObject.GetHashCode virtual methodDelphi 2009
TObject.ToString virtual methodDelphi 2009
TObject.UnitName methodDelphi 2009
Touch supportDelphi 2010
TRegistry supports access flagsDelphi 6
TRegistry.OpenKeyReadOnly methodDelphi 4
TryStrToXXXX routines added to SysUtilsDelphi 6
TStream supports 64 bit size and seek offsetsDelphi 6
TStringList.Create(OwnsObjects: Boolean) constructor overloadDelphi 2009
Types unitDelphi 6
UInt8 typeDelphi 2009
UInt16 typeDelphi 2009
UInt32 typeDelphi 2009
UInt64 typeDelphi 7
Unicode identifier namesDelphi 2005
Unicode source filesDelphi 2005
Unicode support (inc Windows API)Delphi 2009
UnicodeString typeDelphi 2009
Unit conversion handling (that's unit as in mm or inches, not unit as in source code unit)Delphi 6
Unit scope names [More info]. See also: Namespaces.Delphi XE2
UTF8 source filesDelphi 2005
UTF8Decode and UTF8Encode routinesDelphi 6
UTF8String typeDelphi 6
Variants unitDelphi 6
PosEx introducedDelphi 7
PosEx became obsolete. Pos got third offset argumentDelphi XE3
Variants unitDelphi 6
VCL stylesDelphi XE2
XMLDoc documentationDelphi 2005
Multiline String LiteralsDelphi 12 Athens

Footnotes

  1. All this information relates to the native Delphi compiler, not the .NET compiler.
  2. From Delphi XE5 the use of the {$IFEND} directive results in a compiler error unless a {$LEGACYIFEND} directive precedes the first {$IFEND} directive or unless the use of legacy {$IFEND} is enabled in project options.
  3. Source: EFG's Computer Lab (defunct website). This source also stated that the Math unit did not change from Delphi 4 to Delphi 5.
Former source: delphiDabbler.com

Embarcadero Delphi 10.4 does not support Windows 7. Delphi 10.3 still does.
RAD Studio 12 offers official support for iOS 17 (for Delphi only), Android 14, and macOS Sonoma. RAD Studio 12 also supports Ubuntu 22 LTS and Windows Server 2022.

Delphi Version Numbers

This version numbers are required for compilation directives. I revised my own components package from Delphi 7 to install in Delphi 2007.
ProductProduct versionOther namesInternal versionPackage versionCompilerVersion constRTLVersion constDefined Symbol
Delphi 12 Athens29BDS 233629036.036.0VER360
Delphi 11 Alexandria28BDS 223528035.035.0VER350
Delphi 10.4 Sydney27BDS 213427034.034.0VER340
Delphi 10.3 Rio26BDS 203326033.033.0VER330
Delphi 10.2 Tokyo25BDS 193225032.032.0VER320
Delphi 10.1 Berlin24BDS 183124031.031.0VER310
Delphi 10 Seattle23BDS 173023030.030.0VER300
Delphi XE822BDS 162922029.029.0VER290
Delphi XE721BDS 152821028.028.0VER280
Delphi XE620BDS 142720027.027.0VER270
Delphi XE519BDS 122619026.026.0VER260
Delphi XE418BDS 112518025.025.0VER250
Delphi XE317BDS 102417024.024.0VER240
Delphi XE2 Pulsar16BDS 923160 & 161 23.023.0VER230
Delphi XE Fulcrum15BDS 82215022.022.0VER220
Delphi 2010 Weaver14BDS 72114021.021.0VER210
Delphi 2009 Tiburon12BDS 62012020.020.0VER200
Delphi 2007 .NET11BDS 51911019.019.0VER190
Delphi 2007 Win3211BDS 518.511018.518.0VER180 & VER185
Delphi 2006 DeXter10BDS 41810018.018.0VER180
Delphi 2005 Diamondback9BDS 3179017.017.0VER170
Delphi 8 Octane (.NET only)8BDS 2168016.016.0VER160
C++ Builder 77?1570?15.0??VER150 & BCB
Delphi 77157015.015.0VER150
C++ Builder 66146014.0?VER140 & BCB
Delphi 66146014.014.0VER140
C++ Builder 5513N/aN/aN/aVER130 & BCB
Delphi 5513N/aN/aN/aVER130
C++ Builder 4412.5N/aN/aN/aVER125 & BCB
Delphi 4412N/aN/aN/aVER120
C++ Builder 3311N/aN/aN/aVER110 & BCB
Delphi 3310N/aN/aN/aVER100
C++ Builder 1N/a9.3N/aN/aN/aVER93 & BCB
Delphi 229N/aN/aN/aVER90
Delphi 118N/aN/aN/aVER80

Use RtlVersion when the code depends on VCL or RTL features and CompilerVersion when it depends on compiler/language features.

Footnote

Delphi XE2 packages are version 160 but five FireMonkey packages at XE2 Update 2 (fmi161.bplfmx161.bplfmxase161.bplfmxdae161.bpl and fmxobj161.bpl) are version 161.

Former Source: delphiDabbler.com

CodeGear Delphi 2007 for Win32: F2039 Could not create output file

CodeGear Delphi 2007 for Win32: F2039 Could not create output file
While installing RX Components Library the next
"[Pascal Fatal Error] rxctl.dpk(111): F2039 Could not create output file 'C:\Program Files (x86)\CodeGear\RAD Studio\5.0\RX\packages\Delphi2007\rxctl.drc'"
message appeared.
The problem solved by giving "Full access" to "Users" to the needed
"C:\Program Files (x86)\CodeGear\RAD Studio\5.0\RX\"
directory.

The similar error appeared in Embarcadero Delphi 11 Alexandria. The solution is also the same.

Embarcadero, RAD Studio Reference, gives the similar recommendation:
F2039 Could not create output file '%s' (Delphi)

Borland.Delphi.Targets was not found

Applied to Delphi 2007/2009, Windows 8.1/10/11
Borland.Delphi.Targets was not found
Error
Unable to load project ... .dproj The imported project "C:\Windows\ Microsoft.NET \F…\Borland.Delphi.Targets" was not found. Confirm that the path in the declaration is correct, and that the file exists on disk.
... .dproj
There are a lot of topics in the Internet containing the error message
The imported project "C:\Windows\Microsoft.NET\Framework64\v2.0.50727\Borland. Delphi.Targets" was not found. Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
RAD keeps the copies of Targets files in the
"C:\ProgramData\{B59CE2E6-B15A-4F23-BD0E-72BF2ADDC3C7}\core\7EFD2DA3\6C948720\"
directory, and they can be copied to
"C:\Windows\Microsoft.NET\Framework\v2.0.50727\"
("C:\Windows\Microsoft.NET\Framework64\v2.0.50727\") /
sometimes to
"C:\Windows\Microsoft.NET\Framework\v4.0.30319"
("C:\Windows\Microsoft.NET\Framework64\v4.0.30319")
if absent.

But error can still exist!
The matter to give "Full control" to "ALL APPLICATION PACKAGES" ("Все пакеты приложений") for the "C:\Windows\Microsoft.NET\" directory.


Note:
"ALL APPLICATION PACKAGES" ("Все пакеты приложений"), appeared with WIN 8.
SID - ALL_APP_PACKAGES
The All Application Packages group is a well-known group with a predefined SID. The group must have specific access to certain locations of the registry and file system for Microsoft Store Apps to function properly.

There is a more clumsy way to fix this error.
Find the line <Import Project="$(MSBuildBinPath)\Borland.Delphi.Targets" /> in project file .dproj. This line is located about at the end of file.
Replace the value "$(MSBuildBinPath)\Borland.Delphi.Targets" with full path to file, for instance: "C:\Windows\Microsoft.NET\Framework\v2.0.50727\Borland.Delphi.Targets"
Note:
Directory "C:\Windows\Microsoft.NET\Framework\v2.0.50727"
stands for .NET Framework, Version 2.0, Visual Studio Version 2005
Directory "C:\Windows\Microsoft.NET\Framework\v4.0.30319"
stands for .NET Framework, Version 4.0/4.5.2, Visual Studio Version 2010/2012