RTLVersion Constant, solusi conditional defines yang lebih baik

Pada setiap perkembangan versi delphi tentunya terdapat fitur-fitur baru yang ada kalanya tidak kompatibel dengan versi sebelumnya.
Pada saat tertentu kita perlu membuat aplikasi menggunakan Turbo Delphi 2006 namun disaat yang lain kita ingin aplikasi tersebut dapat juga di compile menggunakan Delphi 7.

Sebagai contoh, pada project Delphi 2007 keatas ada property Application.MainFormOnTaskbar, yang mana akan terjadi error bila dicompile menggunakan Delphi 2006 kebawah.

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(...., ....);
  Application.Run;
end.

Perbedaan lain adalah type variable PChar, yang pada pada delphi yang unicode (Delphi 2009 keatas) adalah sama dengan WideChar sementara pada Delphi versi sebelumnya PChar sama dengan AnsiChar.

Untuk dapat membuat aplikasi yang dapat dikompilasi dengan berbagai macam versi delphi solusinya kita dapat menggunakan Conditional Define.

Condition Define yang banyak dipakai menggunakan {$IFDEF VERxxx} seperti contoh berikut ini

{$IFDEF VER210}
{$DEFINE D2010}
{$DEFINE D2009}
{$DEFINE D2007}
{$DEFINE D2006}
{$DEFINE D2005}
{$DEFINE DELPHI6UP}
{$DEFINE DELPHI7UP}
{$WARN UNIT_PLATFORM OFF}
{$WARN SYMBOL_PLATFORM OFF}
{$DEFINE SPLASH}
{$ENDIF}

{$IFDEF VER200}
{$DEFINE D2009}
{$DEFINE D2007}
{$DEFINE D2006}
{$DEFINE D2005}
{$DEFINE DELPHI6UP}
{$DEFINE DELPHI7UP}
{$WARN UNIT_PLATFORM OFF}
{$WARN SYMBOL_PLATFORM OFF}
{$DEFINE SPLASH}
{$ENDIF}

{$IFDEF VER185}
{$DEFINE D2007}
{$DEFINE D2006}
{$DEFINE D2005}
{$DEFINE DELPHI6UP}
{$DEFINE DELPHI7UP}
{$WARN UNIT_PLATFORM OFF}
{$WARN SYMBOL_PLATFORM OFF}
{$DEFINE SPLASH}
{$ENDIF}

{$IFDEF VER180}
{$DEFINE D2006}
{$DEFINE D2005}
{$DEFINE DELPHI6UP}
{$DEFINE DELPHI7UP}
{$WARN UNIT_PLATFORM OFF}
{$WARN SYMBOL_PLATFORM OFF}
{$DEFINE SPLASH}
{$ENDIF}

{$IFDEF VER170}
{$DEFINE D2005}
{$DEFINE DELPHI6UP}
{$DEFINE DELPHI7UP}
{$WARN UNIT_PLATFORM OFF}
{$WARN SYMBOL_PLATFORM OFF}
{$DEFINE SPLASH}
{$ENDIF}

{$IFDEF VER150}
{$DEFINE COMPILER7}
{$IFDEF BCB}
{$DEFINE BCB7}
{$DEFINE BCB}
{$DEFINE DELPHI6UP}
{$ELSE}
{$DEFINE DELPHI7}
{$DEFINE DELPHI}
{$DEFINE DELPHI6UP}
{$DEFINE DELPHI7UP}
{$ENDIF}
{$WARN UNIT_PLATFORM OFF}
{$WARN SYMBOL_PLATFORM OFF}
{$ENDIF}

Kelemahan dari cara diatas adalah bila kita menggunakan Delphi diatas Delphi 2010, compiler akan menganggap kita menggunakan Delphi 7 kebawah, tentunya hal ini akan berakibat yg tidak kita harapkan.
Solusi terbaik kita dapat menggunakan Konstanta RTLVersion.
Pada contoh berikut akan menghasilkan kode yang berbeda jika dicompile menggunakan Delphi dibawah Delphi 2006.

procedure TForm1.Button1Click(Sender: TObject);
begin
{$IF RTLVersion>=18}
ShowMessage('Anda menggunakan Delphi 2006 keatas');
{$ELSE}
ShowMessage('Upgrade Delphi anda untuk mendukung versi baru');
{$IFEND}
end;

Contoh lain

{$R *.res}

begin
  Application.Initialize;
{$IF RTLVersion>=18.5}
  Application.MainFormOnTaskbar := True;
{$IFEND}
  Application.CreateForm(...., ....);
  Application.Run;
end.

Berikut ini daftar kontanta masing-masing versi Delphi.

VERxxx RTLVersion Delphi Version
VER140 14 Delphi 6
VER150 15 Delphi 7
VER160 16 Delphi 8, BDS 2.0
VER170 17 Delphi 2005, Delphi 9, BDS 3.0
VER180 18 Turbo Delphi, Delphi 2006, Delphi 10, BDS 4.0
VER185 18.5 Delphi 2007, Delphi 11, BDS 5.0
VER200 20 Delphi 2009, Delphi 12, BDS 6.0
VER210 21 Delphi 2010, delphi 13, RAD 7.0
VER220 22 Delphi XE, Delphi 14, RAD 8.0
VER230 23 Delphi XE2, Delphi 15, RAD 9.0
VER240 24 Delphi XE3, Delphi 16, RAD 10.0

Semoga bermanfaat.

Leave a Reply

Your email address will not be published.