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

问题描述 投票:0回答:2

尝试更改 FMX 表单的尺寸以模拟“全屏”模式,但当用户对其设置进行更大的缩放时,使用屏幕尺寸会适得其反,因为整个表单变得比屏幕更大。

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

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

 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;
winapi firemonkey delphi-10.1-berlin
2个回答
1
投票

当您调用

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

您还可以在设备上下文中调用

GetDeviceCaps
,并查询
LOGPIXELSX
LOGPIXELSY

DPI 对应字体缩放如下:

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

有关更多信息,最好参考有关 DPI 相关 API 的 MSDN 文章


0
投票

我使用这样的代码:

function SystemFontSizeScale: Real; // 1.00 = standard 96 DPI
var
  DC : HDC; // WinApi.Windows
begin
  DC     := GETDC(0);
  Result := GetDeviceCaps(DC, LOGPIXELSX) / 96;
  ReleaseDC(0, DC);
end;
© www.soinside.com 2019 - 2024. All rights reserved.