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

时间:2011-12-27 09:52:50

标签: delphi compilation vcl delphi-xe2 firemonkey

我有一个VCL应用程序和非常孤立的VCL代码。我想在Mac OSX支持中包含Fire Monkey表单。

我计划使用大量的IFDEF来确定我应该使用VCL构建Windows还是使用FireMonkey构建Mac OSX。

不幸的是,如果应用程序是VCL应用程序,则无法从项目管理器添加MacOS平台。

有没有办法以某种方式破解这个?也许手动调整.dpr和.dproj文件?

3 个答案:

答案 0 :(得分:4)

反过来做什么呢?

  • 以FireMonkey应用程序开始
  • 添加OS X平台目标
  • IFDEF,以便您可以在VCL或FireMonkey之间进行选择

对于1表单项目来说,这并不难,然后添加当前VCL dpr中的所有现有内容。

这实际上可能会让你能够弄清楚VCL和FireMonkey的.dpr和.dproj是如何不同的(我尝试了一次,但是短期内做的太多了,所以我把它搁置了以后研究)。

注意:

将IFDEF放入DPR文件时要非常小心。 Delphi IDE拥有DPR文件,并将删除IFDEFS,例如,当您添加新表单或更改某些项目属性时。

答案 1 :(得分: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 ...

答案 2 :(得分:1)

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

n-tier体系结构确实有意义,而IMHO完整的RAD方法适用于原型设计,但在创建可维护的应用程序时有一些严重的缺点,还有其他功能。

使用Delphi XE2的标准方法是仅使用FireMonkey表单和UI。因此,交叉编译将变得容易。就维护而言,这确实很有意义:一旦设置了FireMonkey代码和表单,就可以通过重新编译将它们部署在多个平台上。不要忘记Linux可能会在不久的将来成为目标(DXScene已经准备好Linux和Android)。使用表单转换器可以帮助您使用FireMonkey而不是VCL来获取代码。

如果您只需要一些适用于Mac OS X的简单表格,并期望更复杂的Windows应用程序(这可能是一个想法,取决于营销目标),您可以创建纯粹的FireMonkey“轻量级”应用程序。但我不建议使用很多条件定义。使用适当的FireMonkey平台创建一个多样化的项目。然后在VCL项目和FireMonkey项目中共享所有非VCL单元。您不需要对此模式进行条件定义。