DELPHIにはコンパイラバージョンが#DEFINEで定義されています。
各VersionのDelphi/C++Builderに対するコンパイラバージョン定義は下記の通り
Delphiバージョン |
定義 |
Delphi1 |
VER80 |
Delphi2 |
VER90 |
Delphi3 |
VER100 |
Delphi4 |
VER120 |
Delphi5 |
VER130 |
Delphi6 |
VER140 |
Kylix |
VER140 |
Delphi7 |
VER150 |
Delphi8 |
VER160 |
Delphi2005 |
VER170 |
BDS2006 |
VER180 |
TurboDelphi |
VER180 |
Delphi2007 |
VER185(VER180) |
Delphi2009 |
VER200 |
Delphi2010 |
VER210 |
Delphi XE |
VER220 |
C++Builderバージョン |
定義 |
C++Builder1 |
VER93 |
C++Builder3 |
VER110 |
C++Builder4 |
VER125 |
C++Builder5 |
VER130 |
C++Builder6 |
VER140 |
BDS2006 |
VER180 |
TurboC++ |
VER180 |
C++Builder2007 |
VER185(VER180) |
C++Builder2009 |
VER200 |
C++Builder2010 |
VER210 |
C++BuilderXE |
VER220 |
だから、例えばソース中に
{$IFDEF VER170}
ShowMessage('Delphi2005です');
{$ENDIF}
と書くことによって、Delphi2005のみメッセージが表示されるようにソースが書けます。
Delphi2007だけは、2006とコンパイラの言語仕様に変更がないためVER180もVER185も定義されています。
Delphiのコンパイラバージョンを調べるプログラムを書いておきます。
program DelphiCompilerVerChk;
uses
SysUtils, Windows;
{$R *.res}
{-------------------------------
// 文字列を追加する関数
機能: StringAdd(S, 'メッセージ')
とすると、改行で区切られてSにメッセージが追加される
StringAdd(S, 'メッセージ' '/')
とすると、『/』で区切られてメッセージが追加される
備考:
履歴: 2009/08/28(金)
作成
//--▼----------------------▽--}
procedure StringAdd(var OriginalText: String;
Const AddText: String; Const Separator: String = #13#10);
var
i: Integer;
LenOriginal, LenSeparator, LenAdd: Integer;
begin
if OriginalText = '' then
begin
OriginalText := AddText;
end else
begin
LenOriginal := Length(OriginalText);
LenSeparator:= Length(Separator);
LenAdd := Length(AddText);
SetLength(OriginalText, LenOriginal + LenSeparator + LenAdd);
for i := 1 to LenSeparator do
begin
OriginalText[LenOriginal + i] := Separator[i];
end;
for i := 1 to LenAdd do
begin
OriginalText[LenOriginal + LenSeparator + i] := AddText[i];
end;
end;
end;
//--△----------------------▲--
var
MsgStr: String;
begin
MsgStr := 'Version不明';
{$IFDEF VER80} MsgStr := 'Delphi1'; {$ENDIF}
{$IFDEF VER90} MsgStr := 'Delphi2'; {$ENDIF}
{$IFDEF VER93} MsgStr := 'C++Builder1'; {$ENDIF}
{$IFDEF VER100} MsgStr := 'Delphi3'; {$ENDIF}
{$IFDEF VER110} MsgStr := 'C++Builder3'; {$ENDIF}
{$IFDEF VER120} MsgStr := 'Delphi4'; {$ENDIF}
{$IFDEF VER125} MsgStr := 'C++Builder4'; {$ENDIF}
{$IFDEF VER130} MsgStr := 'Delphi5'; {$ENDIF}
{$IFDEF VER130} StringAdd(MsgStr, 'C++Builder5'); {$ENDIF}
{$IFDEF VER140} MsgStr := 'Delphi6'; {$ENDIF}
{$IFDEF VER140} StringAdd(MsgStr, 'C++Builder6'); {$ENDIF}
{$IFDEF VER140} StringAdd(MsgStr, 'Kylix/2/3'); {$ENDIF}
{$IFDEF VER150} MsgStr := 'Delphi7'; {$ENDIF}
{$IFDEF VER160} MsgStr := 'Delphi8'; {$ENDIF}
{$IFDEF VER170} MsgStr := 'Delphi2005'; {$ENDIF}
{$IFDEF VER180} MsgStr := 'BDS 2006(Delphi/C++)'; {$ENDIF}
{$IFDEF VER180} StringAdd(MsgStr, 'Turbo Delphi/C++'); {$ENDIF}
{$IFDEF VER185} MsgStr := 'Delphi2007'; {$ENDIF}
{$IFDEF VER185} StringAdd(MsgStr, 'C++Builder2007'); {$ENDIF}
{$IFDEF VER200} MsgStr := 'Delphi2009'; {$ENDIF}
{$IFDEF VER200} StringAdd(MsgStr, 'C++Builder2009'); {$ENDIF}
{$IFDEF VER210} MsgStr := 'Delphi2010'; {$ENDIF}
{$IFDEF VER210} StringAdd(MsgStr, 'C++Builder2010'); {$ENDIF}
{$IFDEF VER220} MsgStr := 'Delphi XE'; {$ENDIF}
{$IFDEF VER220} StringAdd(MsgStr, 'C++Builder XE'); {$ENDIF}
Windows.MessageBox(0,
PChar(MsgStr),
PChar(ExtractFileName(ParamStr(0))), MB_OK);
end.