Delphi XE2:是否有预定义的条件来识别VCL和FireMonkey?
在Delphi XE2中,我们用来
{$ifdef Win32}
{$ifdef Win64}
识别我们所处的平台。
是否有任何预定义的条件可以识别VCL和FMX?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
在Delphi XE2中,我们用来
{$ifdef Win32}
{$ifdef Win64}
识别我们所处的平台。
是否有任何预定义的条件可以识别VCL和FMX?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(6)
尽管没有记录,但您可以在同一个应用程序中使用 VCL 和 Firemonkey。
没有编译器定义。
如果您正在构建需要同时使用 VCL 和 Firemonkey 的东西,我建议将这些单元分开。
一种可能的方法:
在同一单元中混合来自两个不同框架的 UI 代码不是一个好主意。当不需要时,它将链接到其他库。
Although not documented you can have VCL and Firemonkey in the same application.
There is no compiler define.
If you're building something that needs to be both VCL and Firemonkey I would recommend separation of the units.
A possible way:
Mixing UI code from two different frameworks in the same unit is not a good idea. It will link in the other library when it's not needed.
正如其他人所说,没有条件指令来确定您的应用程序是 VCL 还是 FireMonkey。我认为确定您的应用程序是 FireMonkey 还是 VCL 的最可靠方法是使用函数而不是条件指令。
像这样的东西
As others says, there is not a conditional directive to determine if your application is VCL or FireMonkey. I think the most reliable way to determine if your app is FireMonkey or VCL is using a function instead of a conditional directive.
Something like
没有编译器指令,因为从技术上讲,不存在 firemonkey 应用程序或 vcl 应用程序之类的东西。仅使用这些技术的应用程序。
应用程序可以使用 fxm 或 vcl 或两者都使用或两者都不使用(例如控制台应用程序)。
这有点像询问它是否是 SQL 应用程序。当然,您可以以编程方式检查各个表单的祖先,以查看它们继承自哪个框架。
同样,在没有关联形式的单元内,这没有任何意义。
There is no compiler directive because technically there is no such thing as a firemonkey application or a vcl application. Only applications which make use of these technologies.
An application can use fxm or vcl or both or neither (eg. a console app).
This is a bit like asking if it is an SQL application. You can of course programatically check the ancestry of individual forms to see which framework they inherit from.
Again, inside a unit that has no associated form, this has no meaning.
似乎没有专门为 VCL/FireMonkey 定义的编译器。您需要创建自己的。
预定义条件列表可以在文档中找到。
There does not seem to be a compiler define specifically for VCL/FireMonkey. You would need to create your own.
A list of predefined conditionals can be found in the documentation.
Abbrvia 使用这种拆分来支持 VCL 和 CLX:
QAbUnit1.pas:
AbUnit1.pas:
要添加 FireMonkey 支持,我将添加一个如下文件:
< strong>FmxAbUnit1.pas:
,然后对 AbUnit1.pas 进行我需要的任何条件更改。
这不像罗伯特的建议那样是一个很好的干净分割,但优点是所有编辑都发生在单个文件中,并且条件定义是自动处理的,因此不需要出现在项目选项中。谁使用过您的库,只需包含适当的单元即可决定他们想要使用哪一个。您也可以通过命名文件
Fmx.AbUnit1.pas
和Vcl.AbUnit1.pas
来利用单位范围,但我认为 Embarcadero 不鼓励这样做。Abbrevia supports both the VCL and CLX using this kind of split:
QAbUnit1.pas:
AbUnit1.pas:
To add FireMonkey support, I'd add a file like this:
FmxAbUnit1.pas:
and then make whatever conditional changes I need to AbUnit1.pas.
It's not a nice clean split like Robert's suggestion, but the advantage is that all of your editing occurs in a single file, and the conditional define is handled automatically, so it doesn't need to appear in the project options. Who ever uses your library just includes the appropriate unit to decide which one they want to use. You could probably take advantage of unit scoping too, by naming the files
Fmx.AbUnit1.pas
andVcl.AbUnit1.pas
, but I think Embarcadero discourages that.试试这个片段:
它测试是否使用 命名空间 ://docwiki.embarcadero.com/RADStudio/en/IF_directive_(Delphi)" rel="nofollow noreferrer">IF 编译指令
作为FMX 与 VCL 并不相互排斥,可能需要添加以下分支:
Try this snippet:
It tests if corresponding namespace was declared using IF compilation directive
As FMX isn't mutually exclusive with VCL, there may be a need to add following branches: