6

如何使用 Firemonkey FM³ 获取屏幕尺寸?以下代码:

var
  Size: TPointF;
begin
  Size := FMX.Platform.IFMXScreenService.GetScreenSize;
  ...
end;

导致此编译器错误:

[dcc32 Error] Unit1.pas(46): E2018 Record, object or class type required

我应该如何使用IFMXScreenService界面来获取屏幕尺寸?

4

4 回答 4

10

尝试这个 :

var
  ScreenSize: TSize;
begin
  ScreenSize := Screen.Size;
  Caption := IntToStr(ScreenSize.Width) + '*' + IntToStr(ScreenSize.Height);
end;
于 2013-10-06T20:16:18.280 回答
5

这不是那么简单。

Firemonkey 具有称为分辨率的功能 http://docwiki.embarcadero.com/RADStudio/XE5/en/Working_with_Native_and_Custom_FireMonkey_Styles

这实际上是一个很酷的功能。如果您使用具有视网膜显示的屏幕,那么您在屏幕上绘制的任何内容都会非常小。例如,iPhone 的像素分辨率接近 iPad 1 和 2,但屏幕却大了一倍。

所以在 iPhone 上会

var
  ScreenSize: TSize;
begin
  ScreenSize := Screen.Size;
  Caption := IntToStr(ScreenSize.Width) + '*' + IntToStr(ScreenSize.Height);
end;

看起来像 320x480。和相同的形式。

但是如果你使用使用 FMX.Platform;

procedure ShowScreenSize;
var
  ScreenSvc: IFMXScreenService;
begin
  if TPlatformServices.Current.SupportsPlatformService(IFMXScreenService, IInterface(ScreenSvc)) then
  begin
    ScreenSize := Format('Resolution: %fX%f', [ScreenSvc.GetScreenSize.X, ScreenSvc.GetScreenSize.Y]);
    ShowMessageFmt('Screen.Width = %g, Screen.Height = %g', [ScreenSize.X, ScreenSize.Y]);
  end;
end;

您将获得以像素为单位的实际屏幕分辨率。

这也适用于配备 Retina 显示屏的 Mac。

于 2013-11-24T12:03:35.283 回答
2

这是在Android(可能是iOS,未测试)设备上获得以像素为单位的实际屏幕分辨率的稍微完整/清晰的答案:

var
   clientScreenScale   : Single;
   clientScreenSize    : TSize;
   clientScreenService : IFMXScreenService;
begin
  if TPlatformServices.Current.SupportsPlatformService(IFMXScreenService, IInterface(clientScreenService)) then
  begin
    clientScreenScale   := clientScreenService.GetScreenScale;
  end
  else clientScreenScale   := 1;

  // The display device's width:
  clientScreenSize.CX   := Round(clientScreenService.GetScreenSize.X*clientScreenScale);

  // The display device's height:
  clientScreenSize.CY   := Round(clientScreenService.GetScreenSize.Y*clientScreenScale);
end;
于 2017-12-31T11:10:44.553 回答
2

这是一个不需要按比例乘法的不同解决方案:

var
  aResolution      : JPoint;
begin
  aResolution := TJPoint.Create;
  TAndroidHelper.Display.getRealSize(aResolution);
end;

在 Delphi 10.3 RIO 中运行良好。据我了解,“getRealSize”至少需要 Android 4.2,但由于 Delphi RIO 甚至不支持旧版本的 Android,我不认为这是一个阻碍。

于 2019-05-27T13:45:48.370 回答