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

CEF4Delphi应用加载CEF 117.2.5后全局字体缩小问题求助

问题

将CEF版本从96升级至117.2.5后,基于Delphi 2007开发的32位Windows应用在加载CEF库后,整个应用的字体全部缩小。该应用结构复杂,包含大量动态加载的BPL库。

奇怪的是,此问题仅出现在部分未安装Delphi IDE的机器(Win10 Enterprise N和Win10 Professional 64位)上,且无论是否加载网页都会触发。

CEF加载代码如下:

sciezkaRoot := IncludeTrailingPathDelimiter(GetRootPath());
sciezkaBinariow := sciezkaRoot + CHROMIUM_FOLDER_BINARIOW;
sciezkaProcesu := sciezkaRoot + CHROMIUM_FOLDER_KOMUNIKACJA_MARKETINGOWA + CHROMIUM_PROCES_EXE;
try
  if not FileExists(sciezkaProcesu) then
    raise Exception.Create('Brak wymaganego pliku w lokalizacji:' + #13 + sciezkaProcesu);
  uCEFApplication.GlobalCEFApp := TCefApplication.Create();
  with uCEFApplication.GlobalCEFApp do
  begin
    ShowMessageDlg := False;
    MissingBinariesException := True;
    BackgroundColor := ColorToTCefColor(clBtnFace);
    Cache := fKatalogCache;
    EnablePrintPreview := False;
    EnableGPU := False;
    FrameworkDirPath := sciezkaBinariow;
    ResourcesDirPath := sciezkaBinariow;
    LocalesDirPath := sciezkaBinariow + 'locales';
    LocalesRequired := 'pl';
    Locale := 'pl';
    SetCurrentDir := True;
    BrowserSubprocessPath := sciezkaProcesu;
    Result := StartMainProcess();
  end;
except
  on e: Exception do
  begin
    FreeAndNil(uCEFApplication.GlobalCEFApp);
    Result := False;
  end;
end;

成因分析

  • DPI感知设置冲突:CEF 100+版本默认启用系统级DPI感知,而Delphi 2007原生VCL应用默认未声明DPI感知。未安装Delphi IDE的机器没有相关兼容性设置兜底,CEF加载后会强制修改整个进程的DPI感知模式,导致VCL控件字体按高DPI缩放规则被缩小(比如系统DPI为120时,未感知的应用会被系统缩放到96DPI显示效果,字体看起来变小)。
  • 缺失Delphi运行时兼容性配置:安装Delphi IDE的机器会自动添加针对老版本Delphi应用的兼容性注册表项(比如强制DPI不缩放),未安装IDE的机器无此配置,CEF的DPI感知设置直接生效,引发字体缩放异常。
  • CEF初始化的全局设置覆盖:即使未加载网页,CEF在StartMainProcess()阶段就会初始化全局DPI相关钩子和设置,覆盖VCL应用的默认行为。动态加载的BPL库作为进程内共享资源,也会受此全局设置影响,导致整个应用字体统一缩小。

内容的提问来源于stack exchange,提问作者Wolf Raider

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 01:10:09