如何在一个应用程序中同时使用VCL和FMX?

3
我有一个VCL应用程序和相当隔离的VCL代码。我想为Mac OSX支持包括Fire Monkey表单。
我计划使用大量IFDEF来确定是否应该使用VCL构建Windows还是使用FireMonkey构建Mac OSX。
不幸的是,如果应用程序是VCL,则无法从项目管理器中添加MacOS平台。
有没有什么方法可以通过某种方式进行修改?也许手动调整.dpr和.dproj文件?

1
请参见delphi-xe2-possible-to-instantiate-a-firemonkey-form-in-vcl-application。不确定是否可以从同一代码库创建Windows和OSX应用程序。 - LU RD
如果这是你自己的代码(不是第三方的),你可以考虑使用类似MIDA(http://www.midaconverter.com/)的转换器将你的项目从VCL转换为FM。 - philnext
MIDA 在大多数我的 GDI+ 自定义控件和 DevExpress 工具包上都会失败。我只使用标准 VCL 中的 TActionList、TPanel 和 TForm :) 但无论如何,还是谢谢你的提示。 - Gad D Lord
3个回答

5
你可以尝试另一种方式:
  • 从一个FireMonkey应用程序开始
  • 添加OS X平台目标
  • 通过IFDEF选择VCL或FireMonkey
这对于一个单窗体项目来说并不难,然后将你当前的VCL dpr中的所有现有内容添加进去。
这可能会让你能够弄清楚VCL和FireMonkey的.dpr和.dproj之间的区别(我曾经尝试过,但在短期内要做太多了,所以我把它搁置到未来的研究中)。
注意:
在DPR文件中放置IFDEF时要非常小心。Delphi IDE拥有DPR文件,例如当添加新表单或更改某些项目属性时,它将删除IFDEFS。

我接受你的答案,因为它确实有效。我成功地将VCL和FMX表单组合在一个代码库中,并在Windows XP和Mac OSX上运行它们。有关我如何做到这一点的详细信息、示例截图和源代码可在http://mtgs.blogspot.com/2011/12/how-to-create-and-application-which.html上获得。 - Gad D Lord
很高兴能够帮助到你。感谢提供截图。请注意我的上面编辑:对于这些IFDEF要小心。 - Jeroen Wiert Pluimers
1
Delphi IDE拥有DPR文件,并且在您添加新表单或更改某些项目属性时会删除IFDEFS。只是一个小提示。虽然早期的Delphi版本在添加文件时会完全清理.dpr文件中的uses块中的IFDEF,但Delphi XE5版本操作更加温和,不会触及其他单元的IFDEF。 - Aleksey Timohin

3

你尝试过手动编辑dproj文件,在<Platforms>标签中添加OSX32吗?

<Platforms>  
  <Platform value="Win64">True</Platform> 

  <Platform value="OSX32">True</Platform>  

  <Platform value="Win32">True</Platform>  
</Platforms>

你可能已经知道了,但如果你不知道,Simon Stuart的MonkeyMixer插件可以帮助将FMX表单添加到你的项目中。

请注意,我无法测试任何Mac相关内容,目前我仍然100%使用Windows...


我已经接受了Jeroen的答案,因为它带领我找到了一个可行的解决方案(http://mtgs.blogspot.com/2011/12/how-to-create-and-application-which.html)。我也投票支持了你的回复,因为研究dproj可能是一个更容易入手的方法。 - Gad D Lord
+1;我忘记了 MonkeyMixer 的名称,谢谢你提醒我。同时也感谢你找出了 .dproj 设置。 - Jeroen Wiert Pluimers

1

将 VCL 代码与其他代码隔离是一个非常好的迹象。

n-Tier 架构确实有意义,完全 RAD 方法对于原型制作来说很好,但对于创建可维护的应用程序以及添加附加功能存在一些严重缺点。

Delphi XE2 的标准用法是仅使用 FireMonkey 表单和用户界面。因此,交叉编译将变得容易。这在维护性方面是完美合理的:一旦设置了 FireMonkey 代码和表单,您就可以通过重新编译将其部署到多个平台上。而且不要忘记,Linux 可能会成为一个接近的目标(DXScene 已经准备好支持 Linux 和 Android)。使用表单转换器可以帮助您使用 FireMonkey 而不是 VCL 编写代码。

如果您只需要 Mac OS X 的一些简单表单,并期望在 Windows 上创建更复杂的应用程序(这可能是一个想法,取决于市场目标),则可以创建一个纯 FireMonkey“轻量级”应用。但我不建议使用大量条件定义。创建一个多样化的项目,具有适当的 FireMonkey 平台。然后,将所有非 VCL 单位共享在 VCL 项目和 FireMonkey 项目之间。您不需要为此模式使用条件定义。


我知道使用VCL+FMX构建应用程序的优缺点。在我看来,FM还不够成熟且存在许多漏洞,并且缺乏像TMS和DevExpress这样的出色工具包。我想通过提供cxGrid等好用的工具来让我的Windows用户满意,并为我的新Mac用户提供全新的基于2D FM的用户界面。问题不是是否,而是如何强制我的IDE显示“添加Mac OS”到我的平台菜单中。 - Gad D Lord

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接