VCL 和 FMX 组件如何同名?
Posted
技术标签:
【中文标题】VCL 和 FMX 组件如何同名?【英文标题】:How to have the same name for VCL and FMX components? 【发布时间】:2021-11-08 08:21:16 【问题描述】:Delphi 设法让TLabel
存在于 FMX 和 VCL 中。那么,除了一个用于VCL,一个用于FMX之外,如何创建两个同名的组件?
是的,我知道我可以使用ifdef
s 并每次都重新编译库。但这并不是完全干净的代码。
【问题讨论】:
【参考方案1】:在不同的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
单元范围内。
【讨论】:
昨天我发现关键是使用命名空间。但这是正确的答案 @RohitGupta 命名空间和单元范围相似,但用途略有不同。以上是关于VCL 和 FMX 组件如何同名?的主要内容,如果未能解决你的问题,请参考以下文章