You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用编译器指令检测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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 14:13:20