Skip over navigation

Delphi Version Features

This page contains notes about which features were introduced in which versions of Delphi [1].

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} directive [2] 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
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 6 [3]
for .. in loops Delphi 2005
Frames Delphi 5
Function inlining Delphi 2005
Generics Delphi 2009
IInterface Delphi 6
IncludeTrailingPathDelim function Delphi 6
inline keyword Delphi 2005
Inner exceptions Delphi 2009
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
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
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.