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

标签 delphi firemonkey vcl delphi-xe7

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

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

我怎样才能做到这一点?

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

编辑:

我只看到两种替代解决方案,但我都不喜欢它们:

  1. 也可以在 Windows 上使用 FMX。我不喜欢用样式化组件代替原生组件的想法。有经验的用户可以轻松区分。
  2. 维护我们的自定义组件集: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/

相关文章:

delphi - 如何断言给定的方法指针使用 stdcall 调用约定?

ios - Delphi XE2 文件共享和 iOS

delphi - FireMonkey:如何将下一个控件聚焦在vkReturn上?

delphi - InstanceClass.NewInstance 与 InstanceClass.Create

delphi - 了解 Delphi 和 C++ Builder 中的 TBitmap.Scanline

Delphi - 绘制一个 Unicode 字符?

delphi - 泛型会搞乱接口(interface)名称映射吗?

delphi - 在 StringGrid-Delphi 中删除行

android - 使用 Delphi FireMonkey 将 SQLite 数据库部署到 Android

delphi - 在运行时创建自定义标题栏和边框,TMainMenu 起作用