Skip over navigation

Delphi Version Features

This page contains an incomplete list of which features were introduced in which versions of Delphi1.

If you have any additions or corrections please create an issue on GitHub (GitHub account required).

Jump to:

0..9   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O   P   Q   R   S   T   U   V   W   X   Y   Z

Feature Version
& operator for treating keywords as identifiers Delphi 2006
{$ALIGN} compiler directive can take additional parameter 16 to set 16 byte alignment6 Delphi XE
{$CODEALIGN} compiler directive6 Delphi XE
{$EXCESSPRECISION} compiler directive for 64 bit compilers only6 Delphi XE2
{$EXTERNALSYM} compiler directive6 Delphi 4
{$HIGHCHARUNICODE} compiler directive6 Delphi 2009
{$IF} & {$IFEND} compiler directives6 Delphi 6
{$IFEND} compiler directive no longer required to close {$IF} statements: {$ENDIF} can now be used instead.2 Delphi XE4
{$LEGACYIFEND} compiler directive2 Delphi XE5
{$LIBPREFIX}, {$LIBSUFFIX} & {$LIBVERSION} compiler directives6 Delphi 6
{$MESSAGE} compiler directive Delphi 6
{$POINTERMATH} directive Delphi 2009
{$TEXTBLOCK} directive to determine how line breaks are treated in multiline strings. Delphi 12
{$METHODINFO} compiler directive6 Delphi 2006
{$NODEFINE} compiler directive6 Delphi 4
{$POINTERMATH} compiler directive Delphi 2009
{$REGION} & {$ENDREGION} compiler directives6 Delphi 2005
{$STRONGLINKTYPES} compiler directive6 Delphi XE
{$TEXTBLOCK} compiler directive to determine how line breaks are treated in multiline strings. Delphi 12
{$WARN} compiler directive Delphi 7
{$WRITEABLECONST} compiler directive default value changes from ON to OFF. Delphi 6
[ref] attribute6 Delphi XE3
0..9
32 bit compiler & support for Windows 957 Delphi 2
64 bit binary versions of the Delphi 32 and 64 bit compilers Delphi 12.2
64 bit compiler Delphi XE2
A
Abstract classes Delphi 2006
Actions & action lists Delphi 4
Android 32 bit compiler & support7 Delphi XE5
Android 64 bit compiler6 Delphi 10.4
Anonymous methods / closures Delphi 2009
AnsiString replaces ShortString as the default string type6,7. Delphi 2
Atomic intrinsic functions AtomicExchange, AtomicIncrement, AtomicCmpExchange & AtomicDecrement6 Delphi XE3
Attributes Delphi 2010
B
Binary integer literals, e.g. %100101 Delphi 11
Build groups7 Delphi XE
C
class constructors / destructors Delphi 2010
Class data (class var) Delphi 2006
Class helpers Delphi 2005
Class helpers and record helpers can no longer access private data of the related class or record6 Delphi 10.1
Class properties Delphi 2005
Currency type6 Delphi 2
Custom managed records Delphi 10.4
D
Default intrinsic compiler routine (undocumented) that gets the default value of a given type.6 Delphi 2009
Default parameters in functions, procedures & methods6 Delphi 4
delayed keyword (for loading of DLLs) Delphi 2010
dependency directive (for specifying the dependencies of an external library)6,10 Delphi XE4
deprecated directive Delphi 6
deprecated directive with comment Delphi 2009
DirectX 10 support7 Delphi XE3
DirectoryExists function moved to SysUtils unit from FileCtrl Delphi 6
Digit separators in integer and floating point literals: e.g. 1_000_000 Delphi 11
dispid directive6 Delphi 3
dispinterface keyword6 Delphi 3
Docking, Anchors & Constraints in forms7 Delphi 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 DI, DJ & DK are all dynamic integer arrays. See also Dynamic array intrinsic routines. Delphi XE7
Dynamic array intrinsic routines. The Concat, Insert & Delete compiler intrinsic routines now operate on dynamic arrays. See also Dynamic array concatenation and addition extensions. Delphi XE7
Dynamic arrays Delphi 4
E
EncodePath, EncodeAuth, EncodeQuery & EncodeForm functions Delphi 10.1
EOSError (instead of EWin32Error) Delphi 6
ExcludeTrailingPathDelimiter function Delphi 6
Exit with result parameter Delphi 2009
experimental hinting directive6 Delphi 6
Extended type changes size depending upon the hardware and operating system5 Delphi XE2
F
FastMM memory manager7 Delphi 2006
Final methods Delphi 2006
FireMonkey cross platform framework (FMX)7 Delphi XE2
FireMonkey cross platform framework v2 (FM2) Delphi XE3
FixedInt & FixedUInt types - 32 bit signed & unsigned integers respectively across all platforms Delphi XE8
Floating point number comparison routines added to Math unit3 Delphi 6
Focus mode in IDE editor8 Delphi 12.2
for .. in loops Delphi 2005
Form inheritence7 Delphi 2
Frames Delphi 5
Function inlining Delphi 2005
G
Generics Delphi 2009
GetCompilerVersion & GetRTLVersion routines to get compiler & RTL versions as 16 bit unsigned integers with major version in the high byte and minor version in the low byte. Delphi 12
GetTypeKind intrinsic compiler function (undocumented)6 Delphi XE7
H
HasWeakRef intrinsic compiler function (undocumented)6 Delphi XE7
Hash (System.Hash) unit Delphi XE8
I
IInterface Delphi 6
implements keyword for properties6 Delphi 4
IncludeTrailingPathDelim function Delphi 6
Inline variable declarations: e.g. for var I: Integer := 0 to 9 do or, with type inference, for var I := 0 to 9 do Delphi 10.3
inline keyword Delphi 2005
Inner exceptions Delphi 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, Int16 & Int32 types Delphi 2009
Int64 type Delphi 4
interface keyword extended to introduce an interface type definition Delphi 3
Interface to object casting Delphi 2010
iOS 32 bit compiler & support reintroduced6,7,9 Delphi XE4
iOS 64 bit compiler6 Delphi XE8
IOUtils unit Delphi 2010
IsConstValue intrinsic compiler function (undocumented)6 Delphi XE7
IsManagedType intrinsic compiler function (undocumented)6 Delphi XE7
IUnknown (COM based interfaces)7 Delphi 3
L
library directive Delphi 6
Linux compiler for server applications Delphi 10.2
Linux client platform support added via 3rd party FMXLinux library.8 Delphi 10.3.1
Live bindings for VCL & FMX7 Delphi XE2
Long string literal support: string literals can now be longer than 255 characters. Delphi 12
LongInt & LongWord type sizes become platform dependent: 32 bit on 32 bit platforms, 64 bit on 64 bit platforms. Delphi XE8
LongWord type Delphi 4
M
MacOS ARM 64 bit compiler6,8 Delphi 11
macOS 32 bit compiler7 Delphi XE2
macOS 64 bit compiler6 Delphi 10.4
Margins and Padding properties on TControl Delphi 2006
MariaDB support added8 Delphi 10.2
Markdown support in IDE8 Delphi 11.2
Metropolis UI for Windows 8 back to XP7 Windows XE3
Mobile form designer7 Delphi XE4
MSBuild & build events7 Delphi 2007
Multiline string literals, delimited by triple quotes (''') Delphi 12
MySQL support7 Delphi 2006
N
Namespaces [more info]. See also: Unit scope names. Delphi 2005
NaN number comparisons supported Delphi 12
NativeInt & NativeUInt types Delphi 74
NativeInt & NativeUInt types become weak references. They can no longer be used as separate types. Delphi 12
Nested constants within classes / records Delphi 2005
Nested types within classes Delphi 2005
O
OLE automation7 Delphi 2
Operator overloading on records Delphi 2006
out parameters & keyword6 Delphi 3
overload directive Delphi 4
Overloading for functions, procedures and methods6,7 Delphi 4
P
package keyword and change to install components in packages6 Delphi 3
Parallel library in RTL6 Delphi XE7
platform directive Delphi 6
Pointer type size becomes platform dependent: 32 bit on 32 bit platforms, 64 bit on 64 bit platforms. Delphi XE2
R
RaiseLastOSError procedure Delphi 6
real type changes from 8 bytes in size to 6 bytes and becomes an alias for Double. The Real48 is introduced as a 6 byte replacement for the old real. Delphi 4.
Record Helpers for built in types6 Delphi XE3
Record helpers for TDateTime and Currency types. Delphi 11
Records with methods (aka enhanced methods or advanced records) Delphi 2006
register calling convention6 Delphi 2
Regular expression library7 Delphi XE
resourcestring statement Delphi 3
REST services components7 Delphi XE5
RTTI enhancements Delphi 2010
S
SafeLoadLibrary function Delphi 5
Scoped enumerators (must have type name prefix) Delphi 2009
Sealed classes Delphi 2006
Sensor support for VCL & FMX7 Delphi XE3
Skia integration Delphi 12
Smart Code Insight with embedded AI Delphi 12.2
Split editor views in IDE8 Delphi 12
static methods and properties7 Delphi 2005
stdcall calling convetion6 Delphi 2
strict private and strict protected visibility specifiers Delphi 2005
string type is UnicodeString Delphi 2009
StrUtils unit Delphi 6
T
TApplication.MainFormOnTaskbar property Delphi 2007
TArray type in System unit. Delphi 2010
TBytes alias for array of Byte Delphi 2007
Text format form files Delphi 5
TForm.ShowInTaskbar property Delphi 12
TForm.ShowInTaskbar property Delphi 12
TFormatSettings and overloaded format and conversion routines that use it Delphi 7
threadvar keyword and threading support6 Delphi 2
TNoRefCountObject non-reference-counted IInterface implementation Delphi 11
TOrderedDictionary - a sorted generic dictionary class. Delphi 12.2
TObject.Equals virtual method Delphi 2009
TObject.GetHashCode virtual method Delphi 2009
TObject.ToString virtual method Delphi 2009
TObject.UnitName method Delphi 2009
Touch & gesture support Delphi 2010
TPair<TKey,TValue> record Delphi 2009
TParallelArray - a class to enable running of some operations in parallel threads. Delphi 12.2
TProc<T1,...>, TFunc<T1,...> & TPredicate<T> Delphi 2010
TRegistry supports access flags Delphi 6
TRegistry.OpenKeyReadOnly method Delphi 4
TryStrToXXXX routines added to SysUtils Delphi 6
TStream supports 64 bit size and seek offsets Delphi 6
TStringList.Create(OwnsObjects: Boolean) constructor overload Delphi 2009
Typed constants can no longer be assigned values by default. The {$J+} compiler directive must be used to restore previous behaviour6. Delphi 6
Types unit Delphi 6
U
UInt8, UInt16 & UInt32 types Delphi 2009
UInt64 type Delphi 7
Unicode identifier names Delphi 2005
Unicode source files Delphi 2005
Unicode support (inc Windows API) Delphi 2009
UnicodeString type Delphi 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 files Delphi 2005
UTF8Decode and UTF8Encode routines Delphi 6
UTF8String type Delphi 6
V
Variants unit Delphi 6
VCL styles Delphi XE2
W
WebStencils - scriptable text-processing engine. Delphi 12.2
WideString type6 Delphi 3
Windows 7 & 8.1 styles8 Delphi XE6
Windows 10 styles8 Delphi 10
Windows Vista support (glass & themes)7 Delphi 2007
Windows XP themes7 Delphi 7
X
XML support7 Delphi 5
XMLDoc documentation Delphi 2005
Z
Zip file support added with new TZipFile class Delphi XE2

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.
  4. NativeInt and NativeUInt were introduced as 64 bit signed / unsigned integers respectively with Delphi 7. Delphi 2009 redefined them as 32 bit and Delphi XE2 made them either 32 or 64 bit depending on the operating system's native integer size. Source: twm's blog.
  5. See the Embarcadero DocWiki for the Extended type for a full explanation.
  6. Source: First answer to StackOverflow question about Delphi features & versions.
  7. Source: David I's presentation: Delphi Innovations from Delphi 1 through Delphi XE5.
  8. Source: Delphi Master Release List.
  9. iOS support was originally added in Delphi XE2, removed in XE3 and reintroduced in XE46.
  10. The dependency directive was not documented until Delphi XE86.