VCL 和 FMX 组件如何同名?

Posted

技术标签:

【中文标题】VCL 和 FMX 组件如何同名?【英文标题】:How to have the same name for VCL and FMX components? 【发布时间】:2021-11-08 08:21:16 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

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

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

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

使用$IFDEFs 在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 单元范围内。

【讨论】:

昨天我发现关键是使用命名空间。但这是正确的答案 @RohitGupta 命名空间和单元范围相似,但用途略有不同。

以上是关于VCL 和 FMX 组件如何同名?的主要内容,如果未能解决你的问题,请参考以下文章

delphi VCL组件同名继承

如何在 FMX 组件中加载资源

如何使用TBitmap的功能为FireMonkey和VCL工作?

如何在控制台应用程序中使用 vcl 组件?

如何“扫描”当前安装的 VCL 组件的完整列表

DELPHI (VCL及FMX[Firemonkey])启动时的欢迎窗口实现代码