プロジェクトを XE7 から XE8 に更新しています。当面は XE7 で動作する必要があるため、いくつかの条件が必要です。たとえば、ImageList は単位が変更されたため、Vcl.ImgList は XE8 の Syste.ImageList です。Delphi の両方のバージョンで機能させるには、uses 句を次のようにします。
uses
System.SysUtils, System.Classes, Vcl.Controls
{$IF CompilerVersion >= 29.0}
,System.ImageList
{$else}
,Vcl.ImgList
{$endif}
,cxGraphics;
時々これはうまくいきます。ただし、Delphi は System.Imagelist ユニットがすでに存在していても、条件付きであるにもかかわらず、自動的に再追加することがよくあります。
uses
System.SysUtils, System.Classes, Vcl.Controls
{$IF CompilerVersion >= 29.0}
,System.ImageList
{$else}
,Vcl.ImgList
{$endif}
,cxGraphics, System.ImageList;
これがコンパイルされると、XE8 は文句を言います。
[dcc32 Error] dmImagesU.pas(13): E2004 Identifier redeclared: 'System.ImageList'
a) Delphi がユニットを追加するのはなぜですか? b) 回避策を知っている人はいますか?