在代码中检查当前是否是 FireMonkey(FMX)程序

截止到 XE7 Update 1,Delphi 并没有提供一个条件编译选项来告诉当前程序是否是 FMX 平台的程序,而我们在做跨平台的应用时,许多时候需要知道这一点,那么我们该怎么办?QDAC 3.0 的 QString 单元提供了一个全局变量 IsFMXApp 来帮助用户检测这一点,它实际上是在初始化时,通过检查是否声明了 TFmxObject 类型来确定当前应用程序的类型,代码如下:

【Delphi】

IsFMXApp:=GetClass('TFmxObject')<>nil;

【C++】

IsFMXApp=GetClass(L"TFmxObject");

很简单,就一句代码,这样子就可以在必要时用 IF 语句判断实现条件执行(条件编译暂时做不到):

【Delphi】

if IsFMXApp then
   ... //FireMonkey
else
   ... //VCL

【C++】

if(IsFMXApp)
   ...//FMX
else
   ...//VCL

下面的C++代码将显示当前是 FMX 还是 VCL 程序:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (GetClass("TFmxObject"))
	ShowMessage("FMX");
else
	ShowMessage("VCL");
}

看下效果:

fmxdetect

【补充说明】

1、在 Delphi 中,如果你 uses 了 FMX.Types 单元,那么可以通过下面的条件编译指令来控制。不过话说,你已经包含了 FMX.Types 了,还需要它吗?

{$IF DECLARED(FireMonkeyVersion)}
... FMX 
{$ENDIF}

2、在 C++ Builder 中,程序可以通过检查宏 INC_FMX 来测试当前程序是否是 FMX 应用,它的定义在 fmx.h(感谢麦子仲肥)。说话同上,已经包含了 fmx.h 了,肯定就是 FireMonkey 应用了,还是有点后知后觉。

 

分享到: