ユニット スコープ名が最初に導入されたとき、ユニットは XE2 で に名前がGraphics
変更されました。Vcl.Graphics
Delphi および C++Builder XE2 の新機能
重要な新しい要件: VCL-FMX-RTL のユニット スコープ名
重要: VCL-FMX-RTL ユニットは、 や などのドット接頭辞の命名規則を使用するようにSystem.Types
なりVcl.Styles
ました。修飾識別子 ( などTypes.IStream
) を使用する既存のコードがある場合は、コンパイルするためにコードの変更が必要になる場合があります。
{$IF}
クロスバージョン VCL コードを記述するためにステートメントを使用する必要はありません。句では、ユニット名を単独uses
で引き続き使用できます。Graphics
uses
Graphics;
XE2+ プロジェクトの [プロジェクト オプション] の [ユニット スコープ名] リストにVclが含まれていることを確認してください (デフォルトで含まれているはずです)。
これは文書化されています (実際、文書ではGraphics
例としてユニットを使用しています):
Delphi コンパイラ プロジェクト オプション | Delphi コンパイラ
Delphi のドット付き名前空間のユニット スコープ名(接頭辞)を指定して、コードおよびuses
節 orで部分修飾名を使用できるようにします#include
。
Delphi ユニットのユニット スコープ名を追加するには、次の 2 つの方法があります。
省略記号ポップアップ ボタンをクリックすると、プロジェクト オプション ページの共通項目および順序付きリスト ダイアログ ボックスで説明されているように、ユニット スコープ名を選択および追加するためのダイアログ ボックスが開きます。
ステートメントを使用する場合{$IF}
、正しい構文は次のとおりです。
uses
{$IF RTLVersion >= 23}Vcl.{$IFEND}Graphics;
または:
uses
{$IF RTLVersion >= 23}Vcl.Graphics{$ELSE}Graphics{$IFEND};
およびのPAnsiChar
バージョンに関しては、非推奨となり、XE4 のユニットに移動されました ( )。例えば:SysUtils.StrLen()
SysUtils.StrCopy()
System.AnsiStrings
RTLVersion=25.0
uses
...
{$IF RTLVersion >= 25}, AnsiStrings{$IFEND}
;
var
Src, Dest: PAnsiChar;
Len: Integer;
begin
Src := ...;
Len := {$IF RTLVersion >= 25}AnsiStrings.{$IFEND}StrLen(Src);
GetMem(Dest, Len * SizeOf(AnsiChar));
{$IF RTLVersion >= 25}AnsiStrings.{$IFEND}StrCopy(Dest, Src);
...
end;
最後に、{$IF}
これは Delphi 6 で導入されたため、Delphi 5 以前をサポートする必要がある場合は、{$IF}
ステートメントを{$IFDEF CONDITIONALEXPRESSIONS}
ブロックでラップする必要があることに注意してください。