如何让VCL和FMX组件拥有相同的名称?

4

Delphi成功让TLabelFMXVCL中存在。那么,我该如何创建两个组件,它们的名称相同,只是一个是为VCL而设计的,另一个是为FMX而设计的?

是的,我知道可以使用ifdef并每次重新编译库。但这并不是优秀的代码。

1个回答

12
在不同的单元作用域中实现两个组件,这是为此目的创建的。
例如,在Vcl.MyUnit.pas中为VCL实现TMyComponent,在FMX.MyUnit.pas中为FMX实现TMyComponent
然后,要在任何其他单元中使用TMyComponent,可以选择:
  • 使用{$IFDEF}条件性地在uses子句中指定Vcl.MyUnitFMX.MyUnit

  • 为VCL和FMX创建单独的项目,其中VCL项目在其Unit Scope Names编译器设置中指定Vcl,FMX项目指定FMX,然后您可以在uses子句中仅使用MyUnit

还要查看为自己的组件添加单元作用域名称
参考资料:VCL的TLabel位于Vcl.StdCtrls单元作用域中,而FMX的TLabel位于FMX.StdCtrls单元作用域中。

昨天我已经想到了关键是要使用命名空间。但这才是正确的答案。 - Rohit Gupta
@RohitGupta 命名空间和单元作用域类似,但用于稍微不同的目的。 - Remy Lebeau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接