即使Embarcadero并未正式支持它,也有许多示例表明您可以在VCL应用程序中包含FMX表单,例如MonkeyMixer和this SO question。
但是,当我创建一个只有一个空的VCL表单和一个空的FMX表单的测试应用程序时,遇到两个问题:
任务栏中有两个应用程序图标(显然一个用于
TApplication的每个实例(即VCL和FMX)
当我关闭应用程序时(在FMX.Forms.FinalizeForms中调用TStyleManager.UnInitialize时,它会崩溃)。
我该如何工作?
我需要这种组合,因为我们希望我们的应用程序在Windows,Mac OS和iOS上是本地的。因此,在Windows上,它是一个VCL应用程序,而其他操作系统是使用TMS本机组件的FMX。我们有一些为FMX制作的大型自定义图形组件,它们也必须在Windows上运行。
编辑:
我只看到两个替代解决方案,但我都不喜欢:
在Windows上也使用FMX。我不喜欢样式化组件而不是本地组件的想法。有经验的用户可以轻松分辨出差异。
维护我们的自定义组件集:VCL和FMX版本。这将需要一些工作,而且FMX的图形功能比VCL更好。
最佳答案
我需要在VCL应用程序中托管FMX应用程序以用于显示和培训。 FMX应用程序实际上是Android目标,而VCL实际上是Windows“演示程序”。使用托管FMX主窗体的TFireMonkeyContainer完成FMX托管。是的,它有细微的皱纹,但效果不错,我敢肯定,我们会找到一种改善状况的方法。
我的FMX主表单是在运行时创建的,仅具有FMX.Forms的可见性。然后将其传递到TFireMonkeyContainer,并在VCL应用程序关闭时被销毁。