CEF4Delphi 应用程序字体大小在加载 CEF 后减小

CEF4Delphi Application font size decreased after CEF is loaded

提问人:Wolf Raider 提问时间:11/16/2023 最后编辑:Wolf Raider 更新时间:11/17/2023 访问量:66

问:

我有一个非常奇怪的行为。加载 CEF 库后,WHOLE 应用程序中的所有字体都会减少。它发生在我从版本 96 迁移到最新版本的 CEF (117.2.5) 之后。

它是用Delphi 2007编写和编译的Windows 32位应用程序。 该应用程序很复杂,它有很多动态加载的库 (BPL)。

最奇怪的是,这仅发生在某些机器(Win10 Enterprise N 和 Win10 Professional 64 位)上。他们都没有安装Delphi IDE,所以我无法调试它。

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;

我是否加载任何网页都无关紧要。

任何想法,发生了什么,为什么?

CEF4德尔福

评论

0赞 Philip J. Rayment 11/16/2023
您是否尝试过在 CEF4Delphi 网站上问这个问题?

答:

1赞 Salvador Díaz Fau 11/17/2023 #1

CEF 在最新版本中对此存在一些问题,因为 Chromium 在未设置时会设置 Windows 进程 DPI 感知。

  • 要么添加一个清单,其中包含 DPI 感知的一些值...:
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
      <asmv3:application>
        <asmv3:windowsSettings>
          <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">false</dpiAware>
          <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">unaware</dpiAwareness>
        </asmv3:windowsSettings>
      </asmv3:application>
    </assembly>
    
  • ...或在加载 CEF 之前调用值为 PROCESS_DPI_UNAWARE(即 0)的 SetProcessDpiAwareness()。

有关详细信息,请阅读以下问题:

评论

0赞 Wolf Raider 11/21/2023
谢谢。似乎添加清单解决了问题。