尝试更改 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;
当您调用
EnumDisplaySettings
时,生成的 DEVMODE
结构包含 dmYResolution
字段中的 DPI 设置。请注意,将 NULL
作为设备名称传递给 EnumDisplaySettings
只会获取一个屏幕的信息,在多显示器系统上,您应该枚举所有显示设备。
您还可以在设备上下文中调用
GetDeviceCaps
,并查询 LOGPIXELSX
和 LOGPIXELSY
。
DPI 对应字体缩放如下:
有关更多信息,最好参考有关 DPI 相关 API 的 MSDN 文章
我使用这样的代码:
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;