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

gcuhipw9  于 2022-11-04  发布在  其他
关注(0)|答案(2)|浏览(200)

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

mum43rcc

mum43rcc1#

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

r1zk6ea1

r1zk6ea12#

Hans的答案的C++等价物是

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

相关问题