如何用编译器指令检测Delphi 12 FireMonkey项目是否启用Skia?
在Delphi 12 FireMonkey中通过编译器指令判断Skia启用状态
Delphi 12会在项目启用Skia时自动定义SKIA_ENABLED编译器指令,你可以利用这个指令实现跨项目的Skia代码兼容,具体操作如下:
1. 条件引入Skia单元
在窗体的uses段用条件编译包裹Skia相关单元,确保只有启用Skia的项目才会引入这些单元:
unit MyReusableForm; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs; {$IFDEF SKIA_ENABLED} uses Skia, Skia.FMX; {$ENDIF} type TMyReusableForm = class(TForm) // 控件声明 private public end; implementation {$R *.fmx} end.
2. 条件编译Skia专属代码
对于窗体中依赖Skia的逻辑(比如Skia控件操作、渲染设置等),同样用SKIA_ENABLED指令包裹,避免未启用Skia的项目编译出错:
procedure TMyReusableForm.FormCreate(Sender: TObject); begin {$IFDEF SKIA_ENABLED} // 仅Skia启用时执行的逻辑,例如设置控件使用Skia渲染 SomeControl.RenderOptions := [TRenderOption.Skia]; {$ENDIF} end;
3. 条件声明Skia专属控件
如果窗体中包含Skia专属控件(比如TSkiaPaintBox),需要在控件声明时也加上条件编译:
type TMyReusableForm = class(TForm) {$IFDEF SKIA_ENABLED} SkiaPaintBox1: TSkiaPaintBox; {$ENDIF} Button1: TButton; // 通用控件无需条件编译 private public end;
注意事项
SKIA_ENABLED是Delphi自动管理的指令:当你在项目选项的Application -> Appearance中勾选"Use Skia"时,编译器会自动添加这个定义,无需手动在项目中声明。- 确保所有Skia相关的代码(单元引用、控件、逻辑)都被条件编译包裹,否则未启用Skia的项目会出现编译错误。
内容的提问来源于stack exchange,提问作者Martin Kakhuis
相关产品推荐
相关产品推荐

