【问题标题】:How to detect screen resolution change in Delphi FireMonkey FMX如何检测 Delphi FireMonkey FMX 中的屏幕分辨率变化
【发布时间】:2020-10-05 23:07:06
【问题描述】:

如何检测 Delphi FireMonkey / FMX 中的屏幕分辨率变化

此 VCL 解决方案已发布 How to detect screen resolution change in Delphi?

该解决方案适用于 VCL,但我正在寻找适用于 FireMonkey 的解决方案。

【问题讨论】:

  • 适用于哪些平台?
  • 如果您只对 Windows 平台感兴趣,那么链接的答案也应该足够好,因为它依赖于拦截操作系统本身以屏幕分辨率更改发送的 Windows 消息。我不确定是否同样适用于其他平台。
  • Windows api 代码无法在 Android 上运行。在 Android 上使用表单的 onresize 方法。
  • @nolaspeaker 你能在安卓设备上调整屏幕分辨率吗?不是所有安卓设备的屏幕分辨率都固定为物理屏幕的屏幕分辨率吗?
  • 是的。但是不同的 Android 设备有不同的屏幕指标,因此您可能需要确定屏幕的高度和宽度以进行控制元素定位,尤其是在设备旋转后。

标签: delphi winapi firemonkey screen-resolution


【解决方案1】:

试试这个代码。首先将 FMX.Platform 添加到 uses:

function ScreenResolutionChanged(old, new: string): Boolean;
begin
  if old <> new then
    Result := True
  else
    Result := False;
end;

function getScreenSize: string;
var
  ScreenSvc: IFMXScreenService;
  ScreenSize: TSize;
begin
  if TPlatformServices.Current.SupportsPlatformService(IFMXScreenService,
    IInterface(ScreenSvc)) then
  begin
    Result := Format('Resolution: %fX%f', [ScreenSvc.GetScreenSize.X,
        ScreenSvc.GetScreenSize.Y]);
  end;
end;

procedure TForm2.Button1Click(Sender: TObject);
var
  oldScreenSize, newScreenSize: string;
begin
  oldScreenSize := getScreenSize;
  Sleep(10000); // Wait 10 Sec
  newScreenSize := getScreenSize;
  if ScreenResolutionChanged(newScreenSize, oldScreenSize) then
    ShowMessage('Screen Resolution Changed ' + #10#13 + oldScreenSize + #10#13 +
      newScreenSize)
  else
    ShowMessage('Screen Resolution NOT Changed ' + #10#13 + oldScreenSize +
      #10#13 + newScreenSize);
end;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-05
    • 1970-01-01
    相关资源
    最近更新 更多