【发布时间】:2021-11-08 08:21:16
【问题描述】:
Delphi 设法让TLabel 存在于 FMX 和 VCL 中。那么,除了一个用于VCL,一个用于FMX之外,如何创建两个同名的组件?
是的,我知道我可以使用ifdefs 并每次都重新编译库。但这并不是完全干净的代码。
【问题讨论】:
标签: delphi components firemonkey vcl
Delphi 设法让TLabel 存在于 FMX 和 VCL 中。那么,除了一个用于VCL,一个用于FMX之外,如何创建两个同名的组件?
是的,我知道我可以使用ifdefs 并每次都重新编译库。但这并不是完全干净的代码。
【问题讨论】:
标签: delphi components firemonkey vcl
在不同的Unit Scopes 中实现您的两个组件,这些组件正是为此目的而创建的。
例如,在Vcl.MyUnit.pas 中为VCL 实现TMyComponent,在FMX.MyUnit.pas 中为FMX 实现TMyComponent。
然后,要在任何其他单元中使用TMyComponent,您可以:
使用{$IFDEF}s 在uses 子句中有条件地指定Vcl.MyUnit 或FMX.MyUnit。
为 VCL 和 FMX 创建单独的项目,其中 VCL 项目在其 Unit Scope Names compiler setting 中指定 Vcl,而 FMX 项目指定 FMX,然后您可以在 uses 子句中仅使用 MyUnit。
另见Adding Unit Scope Names for Your Own Components。
作为参考,VCL 的 TLabel 在 Vcl.StdCtrls 单元范围内,FMX 的 TLabel 在 FMX.StdCtrls 单元范围内。
【讨论】: