如何在 FireMonkey 中进行屏幕缩放?
How do I get the screen scaling in FireMonkey?
使用 C++ Builder v. 10.2.3,我想将正在调整大小的 TForm 居中。为此,我使用 TScreen::WorkArea 值。但是,运行 在 Windows 10 缩放比例为 125% 的系统上,代码无法正常工作,因为 TForm 已按比例放大。我如何确定是否发生了这种缩放,然后相应地进行调整? FireMonkey 中是否有内置功能来执行此操作?我应该注意到,在 Windows 10 中缩放 > 100%,TForm::TPosition 值似乎无法正常工作 - 例如,将其设置为 ScreenCenter 似乎有类似的问题,但它不是t 实际上居中。
此函数将 return 屏幕缩放,即如果您在 Windows 上使用 125% 缩放则为 1.25:
function GetScreenScale: Single;
var ScreenService: IFMXScreenService;
begin
Result := 1;
if TPlatformServices.Current.SupportsPlatformService (IFMXScreenService, IInterface(ScreenService)) then
Result := ScreenService.GetScreenScale;
end;
请注意,在 Mac 上,唯一可能的屏幕缩放比例是 1.0(非视网膜)和 2.0(视网膜)。然而,在 Mac 上,由 TScreen 编辑的值 return 已经缩放,因此不需要更正。
汉斯答案的 C++ 等价物是
double GetScreenScale ()
{
double value = 1.0;
_di_IFMXScreenService screenService;
if (TPlatformServices::Current->SupportsPlatformService (__uuidof (IFMXScreenService), &screenService))
value = screenService->GetScreenScale ();
return value;
}
使用 C++ Builder v. 10.2.3,我想将正在调整大小的 TForm 居中。为此,我使用 TScreen::WorkArea 值。但是,运行 在 Windows 10 缩放比例为 125% 的系统上,代码无法正常工作,因为 TForm 已按比例放大。我如何确定是否发生了这种缩放,然后相应地进行调整? FireMonkey 中是否有内置功能来执行此操作?我应该注意到,在 Windows 10 中缩放 > 100%,TForm::TPosition 值似乎无法正常工作 - 例如,将其设置为 ScreenCenter 似乎有类似的问题,但它不是t 实际上居中。
此函数将 return 屏幕缩放,即如果您在 Windows 上使用 125% 缩放则为 1.25:
function GetScreenScale: Single;
var ScreenService: IFMXScreenService;
begin
Result := 1;
if TPlatformServices.Current.SupportsPlatformService (IFMXScreenService, IInterface(ScreenService)) then
Result := ScreenService.GetScreenScale;
end;
请注意,在 Mac 上,唯一可能的屏幕缩放比例是 1.0(非视网膜)和 2.0(视网膜)。然而,在 Mac 上,由 TScreen 编辑的值 return 已经缩放,因此不需要更正。
汉斯答案的 C++ 等价物是
double GetScreenScale ()
{
double value = 1.0;
_di_IFMXScreenService screenService;
if (TPlatformServices::Current->SupportsPlatformService (__uuidof (IFMXScreenService), &screenService))
value = screenService->GetScreenScale ();
return value;
}