是否可以为 Delphi 11 上引入的 .dfm 属性创建编译器指令,例如
{$IFDEF CompilerVersion > 34.0}
PixelsPerInch = 96
{$ENDIF}
所以其他使用 10.4.2 或更低版本的开发人员能够使用相同的单元而不必忽略错误和/或然后提交没有该属性的表单?
尝试按照上面列出的完全相同的方式进行操作,但无法编译,它会在条件行中引发链接器错误。
提前致谢!
是否可以为 Delphi 11 上引入的 .dfm 属性创建编译器指令,例如
{$IFDEF CompilerVersion > 34.0}
PixelsPerInch = 96
{$ENDIF}
所以其他使用 10.4.2 或更低版本的开发人员能够使用相同的单元而不必忽略错误和/或然后提交没有该属性的表单?
尝试按照上面列出的完全相同的方式进行操作,但无法编译,它会在条件行中引发链接器错误。
提前致谢!
一种选择是使用JVCL: JEDI Visual Component Library中包含的DFMCleaner。
DFMCleaner 是一个从 DFM 中删除不受支持的属性的工具。如果您将 dfm 文件保存在某个版本的 Delphi 中并希望在较早的版本中使用它,则其中可能存在一些不受支持的属性,在 Delphi 中打开表单时会产生错误。更糟糕的是,如果 dfm 是设计时包的一部分,Delphi 将安装包而不会出错,但是当您尝试在设计时访问表单时(例如,如果表单由属性编辑器使用),Delphi而是生成一个 AV。
JVCL解压后在\jvcl\devtools\DFMCleaner
还有其他此类实用程序可用。如果您担心它会丢失,您可以在 OnCreate 中的代码周围 $IFDEF 以确保在较新的 Delphi 版本中按照您想要的方式设置属性。
TDataModule.PixelsPerInch implementation:
First...`enter code here`
Search Find in files.... => "= class(TDataModule)"
After... implement each DataModule .pas
private
{ Private declarations }
FPixelsPerInch: Integer;
//
...
//
procedure ReadPixelsPerInch(Reader: TReader);
procedure WritePixelsPerInch(Writer: TWriter);
//
....
protected
procedure DefineProperties(Filer: TFiler); override;
....
public
{ Public declarations }
property PixelsPerInch: Integer read FPixelsPerInch write FPixelsPerInch;
//
...
procedure TDm?????.DefineProperties(Filer: TFiler);
var
Ancestor: TDataModule;
begin
inherited;
Ancestor := TDataModule(Filer.Ancestor);
Filer.DefineProperty('PixelsPerInch', ReadPixelsPerInch, WritePixelsPerInch, True);
end;
procedure TDm?????.ReadPixelsPerInch(Reader: TReader);
begin
FPixelsPerInch := Reader.ReadInteger;
end;
procedure TDm?????.WritePixelsPerInch(Writer: TWriter);
begin
Writer.WriteInteger(FPixelsPerInch);
end;