如何让 VCL 和 FMX 组件重名?

How to have the same name for VCL and FMX components?

Delphi 设法让 TLabel 存在于 FMXVCL 中。那么,我该如何创建两个同名的组件,除了一个用于 VCL 而一个用于 FMX?

是的,我知道我可以使用 ifdefs 并每次都重新编译库。但这并不是完全干净的代码。

在不同的 Unit Scopes 中实现您的两个组件,这些组件正是为此目的而创建的。

例如,在Vcl.MyUnit.pas中为VCL实现TMyComponent,在FMX.MyUnit.pas中为FMX实现TMyComponent

然后,要在任何其他单元中使用 TMyComponent,您可以:

  • 使用{$IFDEF}s在uses子句中有条件地指定Vcl.MyUnitFMX.MyUnit

  • 分别为VCL和FMX创建项目,其中VCL项目在其Unit Scope Names compiler setting中指定Vcl,FMX项目指定FMX,然后你可以在 uses 子句中只使用 MyUnit

另见 Adding Unit Scope Names for Your Own Components

供参考,VCL的TLabelVcl.StdCtrls单元范围内,FMX的TLabelFMX.StdCtrls单元范围内