如何让 VCL 和 FMX 组件重名?
How to have the same name for VCL and FMX components?
Delphi 设法让 TLabel
存在于 FMX 和 VCL 中。那么,我该如何创建两个同名的组件,除了一个用于 VCL 而一个用于 FMX?
是的,我知道我可以使用 ifdef
s 并每次都重新编译库。但这并不是完全干净的代码。
在不同的 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
单元范围内
Delphi 设法让 TLabel
存在于 FMX 和 VCL 中。那么,我该如何创建两个同名的组件,除了一个用于 VCL 而一个用于 FMX?
是的,我知道我可以使用 ifdef
s 并每次都重新编译库。但这并不是完全干净的代码。
在不同的 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
单元范围内