尽管 Embarcadero 并未正式支持它,但有许多示例表明您可以在 VCL 应用程序中包含 FMX 表单,例如MonkeyMixer和 this SO question 。 然而,当我创建一个只有一个空的 VCL 表单和一个空的 FMX 表单的测试应用程序时,我遇到了两个问题:
- 任务栏中有两个应用程序图标(显然一个用于 TApplication 的每个实例,即 VCL 和 FMX)
- 当我关闭应用程序时(当它在 FMX.Forms.FinalizeForms 中调用 TStyleManager.UnInitialize 时),它崩溃了。
我怎样才能做到这一点?
我需要这种组合,因为我们希望我们的应用程序能够在 Windows、Mac OS 和 iOS 上原生运行。因此,在 Windows 上它是一个 VCL 应用程序,而其他操作系统是使用 TMS native 组件的 FMX。我们有一些专为 FMX 制作的大型自定义图形组件,它们也必须在 Windows 上运行。
编辑:
我只看到两种替代解决方案,但我都不喜欢它们:
- 也可以在 Windows 上使用 FMX。我不喜欢用样式化组件代替原生组件的想法。有经验的用户可以轻松区分。
- 维护我们的自定义组件集:VCL 和 FMX 版本。这需要一些工作,而且 FMX 的图形功能比 VCL 好得多。
最佳答案
我需要在 VCL 应用程序内托管 FMX 应用程序以用于显示和培训目的。 FMX 应用程序实际上是 Android 目标,而 VCL 是 Windows“演示程序”。 FMX 托管是使用托管 FMX 主表单的 TFireMonkeyContainer 完成的。是的,它有轻微的皱纹,但效果很好,我相信我们会找到改进的方法。
我的 FMX 主窗体是在运行时创建的,并且仅具有 FMX.Forms 的可见性。然后它被传递给 TFireMonkeyContainer,并在 VCL 应用程序关闭时被它销毁。
关于delphi - 在 XE7 的 VCL 应用程序中使用 FMX 表单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28835803/