是否可以检索 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
,并查询 LOGPIXELSX
和 LOGPIXELSY
。
DPI对应字体缩放如下:
- 100% = 96 dpi
- 125% = 120 dpi
- 150% = 144 dpi
- 200% = 192 dpi
更多信息,最好参考the MSDN article on DPI-related APIs
尝试更改我的 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
,并查询 LOGPIXELSX
和 LOGPIXELSY
。
DPI对应字体缩放如下:
- 100% = 96 dpi
- 125% = 120 dpi
- 150% = 144 dpi
- 200% = 192 dpi
更多信息,最好参考the MSDN article on DPI-related APIs