是否可以检索 Windows 中的字体缩放?

Is it possible to retrieve the font scaling in Windows?

尝试更改我的 FMX 表单的尺寸以模拟 'FullScreen' 模式,但当用户将其设置缩放得更大时,使用屏幕大小适得其反,因为整个表单变得比屏幕大。

如何检索缩放值以便相应地调整表单大小?

编辑: 这是一个小片段,显示了我对这个问题的意图以及它是如何解决的。谢谢你的时间和帮助。

 procedure TMyForm.ApplyFullScreen;
var
  tmpEscale: Extended;
begin
  BorderStyle := TFmxFormBorderStyle.None;
  Left := 0;
  Top := 0;

  tmpEscala := USER_DEFAULT_SCREEN_DPI / GetDeviceCaps(GetDC(0), LOGPIXELSX);

  Height := Round(Screen.Height * tmpEscala);
  Width := Round(Screen.Width * tmpEscala);
end;

当您调用 EnumDisplaySettings 时,生成的 DEVMODE 结构包含 dmYResolution 字段中的 DPI 设置。请注意,将 NULL 作为设备名称传递给 EnumDisplaySettings 将仅获取一个屏幕的信息,在多显示器系统上,您应该枚举所有显示设备。

您还可以在设备上下文中调用 GetDeviceCaps,并查询 LOGPIXELSXLOGPIXELSY

DPI对应字体缩放如下:

  • 100% = 96 dpi
  • 125% = 120 dpi
  • 150% = 144 dpi
  • 200% = 192 dpi

更多信息,最好参考the MSDN article on DPI-related APIs