【问题标题】:How do I get the screen scaling in FireMonkey?如何在 FireMonkey 中获得屏幕缩放?
【发布时间】:2019-01-29 06:15:03
【问题描述】:

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

【问题讨论】:

  • 这与 Delphi 相关,因为在这方面可能有与 C++ Builder 和 Delphi 相当的功能。

标签: delphi firemonkey c++builder


【解决方案1】:

汉斯答案的 C++ 等价物是

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

【讨论】:

    【解决方案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 返回的值已经缩放,因此不需要更正。

    【讨论】:

    • 太棒了。我将在下面添加 C++ Builder 等效代码。
    • 我使用的是 Delphi 10.3.3。此选项在 Mac os Catalina 上不起作用。当我将 scale 的结果设置为 1 时。在 Retina 显示屏上,它仍然会改变样式和布局。你能告诉我如何解决这个问题
    • 那么无论如何都可以在 Mac os Catalina 上设置屏幕比例
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多