代码之家  ›  专栏  ›  技术社区  ›  Anthony Burg

如何在FireMonkey中实现屏幕缩放?

  •  1
  • Anthony Burg  · 技术社区  · 6 年前

    使用C++ Builder V.102.3,我想把正在调整大小的TTAME作为中心。为此,我使用TScreen::WorkArea值。但是,在Windows 10以125%的比例缩放的系统上运行时,由于TForm被放大,代码无法正常工作。如何确定是否发生这种缩放,然后进行相应的调整?FireMonkey有内置的功能吗?我应该注意到,在Windows10中使用缩放比例100%时,TForm::tpposition值似乎无法正常工作—例如,将其设置为ScreenCenter似乎有一个类似的问题,它实际上并没有居中。

    2 回复  |  直到 6 年前
        1
  •  2
  •   Hans    6 年前

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

        2
  •  1
  •   Anthony Burg    6 年前

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