在 XE7 的 VCL 应用程序中使用 FMX 表单?

Using FMX forms in a VCL application in XE7?

尽管 Embarcadero 并未正式支持它,但仍有许多示例表明您可以在 VCL 应用程序中包含 FMX 表单,例如MonkeyMixer and this SO question。 但是,当我创建一个只有一个空 VCL 表单和一个空 FMX 表单的测试应用程序时,我遇到了两个问题:

  1. 任务栏中有两个应用程序图标(显然是一个 TApplication 的每个实例,即 VCL 和 FMX)
  2. 当我关闭应用程序时崩溃(当它在 FMX.Forms.FinalizeForms 中调用 TStyleManager.UnInitialize 时)。

我怎样才能使这个工作?

我需要这种组合,因为我们希望我们的应用程序在 Windows、Mac、OS 和 iOS 上原生。因此在 Windows 上它是一个 VCL 应用程序,而其他 OS 是使用 TMS 本机组件的 FMX。我们有一些为 FMX 制作的大型自定义图形组件,它们也必须在 Windows.

上工作

编辑:

我只看到两个替代解决方案,我喜欢其中 none 个:

  1. 也在 Windows 上使用 FMX。我不喜欢样式化组件而不是原生组件的想法。有经验的用户可以轻松区分。
  2. 维护我们的自定义组件集:VCL 和 FMX 版本。这需要一些工作,而且 FMX 的图形功能比 VCL 好得多。

我需要在 VCL 应用程序中托管 FMX 应用程序以用于显示和培训目的。 FMX 应用程序实际上是一个 Android 目标,而 VCL 是一个 Windows 'demonstrator'。 FMX 托管是使用托管 FMX 主窗体的 TFireMonkeyContainer 完成的。是的,它有轻微的皱纹,但它工作正常,我相信我们会找到改进的方法。

我的 FMX 主窗体是在运行时创建的,并且只有 FMX.Forms 的可见性。然后它被传递给 TFireMonkeyContainer 并在 VCL 应用程序关闭时被它销毁。