创建兼容 VCL 和 FMX 的新组件

     2023-02-23     202

关键词:

【中文标题】创建兼容 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 应用程序?

如何使用tbitmap的功能为firemonkey和vcl工作?(代码片段)

...p但在VCL它是VCL.graphics.Tbitmap。他们的界面非常相似,我想创建例如这个功能functionresizeBitmap(constaBitmap:Tbitmap;constw,h:integer);由于resizeBitmap中的代码与Fmx.graphics.TBitmap或VCL.graphics.Tbitmap完全相同,我想使这个功能可用于VCL应用程序和FM... 查看详情

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

】在DelphiVCL中通过组合两个控件(TEdit和TTrackBar)创建一个新组件【英文标题】:Creatinganewcomponentbycombiningtwocontrols(TEditandTTrackBar)inDelphiVCL【发布时间】:2018-01-2502:57:15【问题描述】:我正在为Windows开发一个Delphi10.1VCL应用程序。... 查看详情

midaconverterbasicpatchedforradstudio10.1.2berlin(vcl转换到fmx)

MidaistheonlywaytotrytoconvertyourprojectfromVCLtoFireMonkey.Versionafterversion,Midahasexpandeddramatically,nowsupportsalmostallfeaturesofFireMonkey.ThisversionhasafullsupportforRADStudio10Seattleand 查看详情

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

】创建一个有声音的VCL按钮组件【英文标题】:CreateaVCLButtonComponentwithsound【发布时间】:2016-08-2616:31:20【问题描述】:我正在尝试创建一个自定义VCL组件,该组件可以在单击时播放自定义声音。声音是从资源DLL访问的。问题是... 查看详情

Delphi FMX组件重影去除子组件

...ubcomponents【发布时间】:2014-10-2013:39:24【问题描述】:我创建了一个FMX组件,它是一个按钮数组。这有一个简单的列和行计数属性。数组中的每个按钮本身就是一个组件,当行数或列数发生变化时,我会删除所有按钮并重新创建... 查看详情

玄虚出品delphi教程的前言

VCL是基于系统的,根本在于系统API,FMX是基于绘图的,根本在于渲染引擎 VCL的发展受制于系统,(你在VCL的代码里面可以看到Borland对M$的妥协),而FMX的发展仅仅受制于硬件VCL的性能更高,但是效果相对低下;FMX性能更低,... 查看详情

如何在 FMX 组件中加载资源

】如何在FMX组件中加载资源【英文标题】:HowtoloadresourcesinaFMX-component【发布时间】:2015-07-1000:45:00【问题描述】:我尝试在FMX组件中使用资源,并在尝试读取资源时收到EResNotFound-Error。以下场景:一个FMX-bpl(FmxComponents.bpl)我在我... 查看详情

fmx使用jpg

习惯VCL的做法了,到了FireMonkey里面,好像查不到单独的JPEG单元了,不少朋友就郁闷如何处理JPG了,这么大件事,不可能没有处理方法的,具体就请看代码:usesFMX.Surfaces;procedureTForm1.Button1Click(Sender:TObject);varSurf:TBitmapSurface;Stream:TM... 查看详情

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

】如何在控制台应用程序中使用vcl组件?【英文标题】:Howtousevclcomponentsinconsoleapplications?【发布时间】:2016-06-1811:18:39【问题描述】:虽然我已包含标头vcl.h,但在尝试在控制台应用程序中使用TStringList对象时出现链接器错误。... 查看详情

在 Delphi & C++ Builder 中安装 VCL 组件

】在Delphi&C++Builder中安装VCL组件【英文标题】:InstallingVCLcomponentinDelphi&C++Builder【发布时间】:2013-04-1108:24:24【问题描述】:我在DelphiXE2中创建了一个VCL组件,并希望将其安装在整个RAD工作室(Delphi和C++Builder)中。问题是... 查看详情

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

】如何“扫描”当前安装的VCL组件的完整列表【英文标题】:Howto"scan"thefulllistofcurrently-installedVCLcomponents【发布时间】:2010-10-2006:41:31【问题描述】:对于thisquestion,我仍然没有找到真正令人满意的答案,现在正在考虑推... 查看详情

当需要重新排列组件时,如何防止创建组件的新实例?

】当需要重新排列组件时,如何防止创建组件的新实例?【英文标题】:howtopreventcreatinganewinstanceofacomponentwhentheyneedtoberearranged?【发布时间】:2022-01-1523:14:48【问题描述】:所以在桌面版本上,组件看起来像这样:<divclassName="p... 查看详情

寻找非矩形面板 VCL 组件 [关闭]

】寻找非矩形面板VCL组件[关闭]【英文标题】:Lookingfornon-rectangularpanelVCLcomponent[closed]【发布时间】:2011-01-0411:13:14【问题描述】:有时我想要L形、T形、三角形、多边形……请免费的可重用组件。..【问题讨论】:现在,我们可... 查看详情

delphixe4firemonkey3d程序xp环境下,ttext是字体问题

...瘦客户端,win7来的太大了,谢谢,还有XE4有个问是,我可视化创建组件,在拖动控件的时候,IDE不刷新,使得界面花 查看详情

如何设置线程优先级delphi

...你,希望对你有帮助。delphi的TThread是一个抽象类,可以创建几个独立的线程。类关系TObject在一个多线程的应用程序中创建一个TThread的后子类代表一个线程。每一新子类的TThread对象的实例是一个新的线程。从TThread派生的多线程... 查看详情

带有 --androidx 的新 Flutter 项目出现 AndroidX 不兼容错误

...serror【发布时间】:2020-05-0309:45:55【问题描述】:我正在创建一个新的颤振项目:fluttercreate--androidxproject_name创建的项目显示AndroidX支持。仍然在使用很多插件时, 查看详情

[fmx]在你的跨平台应用中使用剪贴板进行复制粘贴

...iOS、教程 ? 暂无评论 ? swish ?浏览516次VCL中如何使用剪贴板咱就不说了,FMX做为一个新的框架,提供了跨平台的剪贴板支持。FMX对剪贴板的支持来自两个接口:IFMXClipboard 查看详情

.NET 是不是与 Delphi 的 VCL 组件模型等效?

】.NET是不是与Delphi的VCL组件模型等效?【英文标题】:Does.NEThaveanequivalenttoDelphi\'sVCLcomponentmodel?.NET是否与Delphi的VCL组件模型等效?【发布时间】:2011-06-1916:09:10【问题描述】:请原谅“双关语”,但我是一名(长期)Delphi开发... 查看详情