如何在FireMonkey中获得屏幕缩放比例?

时间:2018-08-22 22:37:35

标签: delphi firemonkey c++builder

使用C ++ Builder v。10.2.3,我想将正在调整大小的TForm居中。为此,我使用TScreen :: WorkArea值。但是,在Windows 10缩放比例为125%的系统上运行时,随着TForm的放大,代码无法正常工作。如何确定是否正在发生这种缩放,然后进行相应调整? FireMonkey是否有内置功能可以做到这一点?我应该注意的是,在Windows 10中缩放比例> 100%时,TForm :: TPosition值似乎无法正常工作-例如,将其设置为ScreenCenter似乎有一个类似的问题,即实际上并未居中。 / p>

2 个答案:

答案 0 :(得分:2)

此功能将返回屏幕缩放比例,即如果您在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返回的值已经缩放,因此不需要更正。

答案 1 :(得分:1)

汉斯答案的C ++等同于

double GetScreenScale ()
{
    double value = 1.0;
    _di_IFMXScreenService screenService;
    if (TPlatformServices::Current->SupportsPlatformService (__uuidof (IFMXScreenService), &screenService))
        value = screenService->GetScreenScale ();
    return value;
}