如何在Firemonkey FM3中获得屏幕尺寸?

时间:2013-10-06 19:42:42

标签: delphi firemonkey delphi-xe4 firemonkey-fm3

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

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

导致此编译器错误:

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

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

4 个答案:

答案 0 :(得分:9)

试试这个:

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

答案 1 :(得分: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。

答案 2 :(得分:1)

这是一个稍微更完整/清晰的答案,可以在Android(可能是iOS,没有测试)设备上获得实际的屏幕分辨率(

?

答案 3 :(得分:0)

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

import React, { Component } from 'react';
import styles from './Button.module.css'; // Import css modules stylesheet as styles
import './another-stylesheet.css'; // Import regular stylesheet

class Button extends Component {
  render() {
    // reference as a js object
    return <button className={styles.error}>Error Button</button>;
  }
}

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