如果您将其拖放到 Delphi XE2 中的表单上TImageList
,它将uses
自动添加到模块中Vcl.ImgList
。如果您在 Delphi 11 上执行相同操作,那么。将会被添加System.ImageList
。我希望该项目能够在任何版本上进行编译。具体来说,现在我可以这样做:
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
{$IFDEF VER350}
System.ImageList,
{$IFEND}
Vcl.ImgList;
但是后来我硬连线到 Delphi 11。使用这个我将其修复为:
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
{$IF CompilerVersion > 23.0}
System.ImageList,
{$IFEND}
Vcl.ImgList;
(现在我可以澄清,从哪个版本开始我需要包含这个模块uses
)
但是现在当我尝试编译 Delphi 11 时,它会自动添加另一个System.ImageList
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
{$IF CompilerVersion > 23.0}
System.ImageList,
{$IFEND}
Vcl.ImgList, System.ImageList;
并拒绝编译并出现错误
[dcc32 错误] Unit1.pas(14): E2004 标识符重新声明:“System.ImageList”
此外,该条件本身{$IF CompilerVersion > 23.0}
在可执行代码中完美运行。我专门创建了一个单独的代码
procedure TForm1.Button1Click(Sender: TObject);
begin
{$IF CompilerVersion > 23.0}
ShowMessage('CompilerVersion > 23.0');
{$ELSE}
ShowMessage('CompilerVersion <= 23.0');
{$IFEND}
end;
它也可以在 XE2 中运行
编译器版本 <= 23.0
11点
编译器版本 > 23.0
我还能如何创建通用条件编译检查版本或以某种方式摆脱这个错误?