Skip over navigation

Delphi Version Features

This page contains notes about 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).

Feature Version
& operator for treating keywords as identifiers Delphi 2006
{$IFEND} directive no longer required to close {$IF} statements: {$ENDIF} can now be used instead.2 Delphi XE4
{$LEGACYIFEND} directive2 Delphi XE5
{$MESSAGE} directive Delphi 6
{$WARN} directive Delphi 7
64 bit compiler Delphi XE2
Abstract classes Delphi 2006
Anonymous methods / closures Delphi 2009
Attributes Delphi 2010
class constructors / destructors Delphi 2010
Class data (class var) Delphi 2006
Class helpers Delphi 2006
Class properties Delphi 2005
delayed keyword (for loading of DLLs) Delphi 2010
deprecated directive Delphi 6
deprecated directive with comment Delphi 2009
DirectoryExists function moved to SysUtils unit from FileCtrl Delphi 6
Dynamic arrays 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. Delphi XE7
EOSError (instead of EWin32Error) Delphi 6
ExcludeTrailingPathDelimiter function Delphi 6
Exit with result parameter Delphi 2009
Final methods Delphi 2006
Floating point number comparison routines added to Math unit. Delphi 63
for .. in loops Delphi 2005
Frames Delphi 5
Function inlining Delphi 2005
Generics Delphi 2009
IInterface Delphi 6
IncludeTrailingPathDelim function Delphi 6
Inline variable declarations 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 type Delphi 2009
Int16 type Delphi 2009
Int32 type Delphi 2009
Int64 type Delphi 4
Interface to object casting Delphi 2010
library directive Delphi 6
LongWord type Delphi 4
Margins and Padding properties on TControl Delphi 2006
Namespaces [more info]. See also: Unit scope names. Delphi 2005
Nested constants within classes / records Delphi 2005
Nested types within classes Delphi 2005
Operator overloading on records Delphi 2006
Overloading for functions, procedures and methods Delphi 4
platform directive Delphi 6
RaiseLastOSError procedure Delphi 6
Record Helpers for simple types Delphi XE3
Records with methods Delphi 2006
resourcestring statement Delphi 3
RTTI enhancements Delphi 2010
SafeLoadLibrary function Delphi 5
Scoped enumerators (must have type name prefix) Delphi 2009
Sealed classes Delphi 2006
static directive for class methods Delphi 2005
strict private and strict protected visibility specifiers Delphi 2005
string type is UnicodeString Delphi 2009
StrUtils unit Delphi 6
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
TFormatSettings and overloaded format and conversion routines that use it Delphi 7
TObject.Equals virtual method Delphi 2009
TObject.GetHashCode virtual method Delphi 2009
TObject.ToString virtual method Delphi 2009
TObject.UnitName method Delphi 2009
Touch support 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
Types unit Delphi 6
UInt8 type Delphi 2009
UInt16 type Delphi 2009
UInt32 type 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
Variants unit Delphi 6
VCL styles Delphi XE2
XMLDoc documentation Delphi 2005


  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.