【发布时间】:2022-01-01 11:54:09
【问题描述】:
是否可以为 Delphi 11 上引入的 .dfm 属性创建编译器指令,例如
{$IFDEF CompilerVersion > 34.0}
PixelsPerInch = 96
{$ENDIF}
所以其他使用 10.4.2 或更低版本的开发人员能够使用相同的单元而不必忽略错误和/或提交没有该属性的表单?
尝试按照上面列出的确切方式进行操作,但无法编译,它会在条件行引发链接器错误。
提前致谢!
【问题讨论】:
-
IFDEF 不起作用,因为编译器根本不查看 DFM。
-
我经常在 Delphi 11 和更早的版本中打开我的项目,尤其是。我的 Android 项目,我只是“忍受”这些属性被删除和重新添加。 IDE 还要求保存未以任何方式更改的单元。我也忍受着这个。
-
如果您确实需要您的项目支持多个版本,请考虑让 TForm 覆盖虚拟
DefineProperties()以为旧版本提供虚拟属性,然后您可以根据需要对该代码进行 IFDEF。 -
查看文档,问题似乎在于 Delphi 11 中的属性
PixelsPerInch现在被声明为Public而不再是Published。我猜您可以通过在表单定义中创建Published部分然后在其中添加property PixelsPerInch手动将ypur 表单的PixelsPerInch属性可见性更改为Published来解决此问题。这应该确保可以在运行时从 DFM 填充所述属性。但我不确定这是否会对设计时的 Delphi 11 产生任何影响。所以它可能仍然会从 DFM 中删除上述属性 -
在 Embarcadero 质量中心提出这个问题也可能很好,因为将
PixelsPerInch属性从Published更改为Public可见性可能不是故意的。
标签: delphi compiler-directives delphi-11-alexandria