创建兼容 VCL 和 FMX 的新组件

Posted

技术标签:

【中文标题】创建兼容 VCL 和 FMX 的新组件【英文标题】:Create a new component compatible with VCL and FMX 【发布时间】:2012-12-16 19:12:45 【问题描述】:

我正在做一些组件,我想让它们兼容 VCL 和 FMX。所以我有一个遵循这种模式的结构:

General_dpk(带有 TCustomMyClass)+ VCL_dpk(带有 TMyClass)+ FMX_dpk(带有 TMyClassFMX)

每个包都有注册其组件的注册程序。在组件面板中出现两个组件(VCL 和 FMX)。如何像其他 Delphi 组件一样仅根据所选项目类型(VCL 或 FMX)显示组件?

谢谢

【问题讨论】:

你有什么样的组件?视觉还是非视觉? @Sir Rufo 他们是非视觉组件 非可视组件与 VCL 或 FMX 无关。为什么要分开?你觉得 TADOConnection 在 VCL 和 FMX 上有什么不同吗? @Sir Rufo 这个组件有一些依赖于框架的属性(比如颜色)(在 VCL 中是 TColor,在 FMX 中是 TAlphaColor)和/或需要一些依赖于框架的库(比如对话框) @Cadetill 如果您的组件正在引用颜色和对话框,那么您的组件并不是真正的非可视组件。考虑重构这些引用或将其分离为运行时和设计时包。 【参考方案1】:

好吧,经过长时间的搜索,我在 Embarcadero 论坛上提问了。在那里,雷米友善地告诉我答案(当你知道时很容易)。问题是您需要像这样在注册过程中调用 GroupDescendentsWith 函数

// para componentes VCL
GroupDescendentsWith(TMyClass, Vcl.Controls.TControl);

// para componentes FMX
GroupDescendentsWith(TMyClassFMX, Fmx.Types.TControl);

Embarcadero 论坛上的答案here

【讨论】:

【参考方案2】:

您可以在此答案的注册过程代码中使用:Delphi XE2: Is there a predefined conditional to identify VCL and FireMonkey? 来检查它是 Firemonkey 还是 VCL 应用程序。

【讨论】:

这有什么帮助?为什么要知道 Delphi IDE 是 VCL 还是 FMX 应用程序?

以上是关于创建兼容 VCL 和 FMX 的新组件的主要内容,如果未能解决你的问题,请参考以下文章

创建一个有声音的 VCL 按钮组件

在 Delphi VCL 中通过组合两个控件(TEdit 和 TTrackBar)创建一个新组件

Delphi FMX组件重影去除子组件

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

delphi VCL组件同名继承

如何在 FMX 组件中加载资源