スクリーンサイズを得るには?

VCL の場合だと、Screen 変数の Width とHeight を参照する事でスクリーンサイズを得られましたが、FireMonkey では Screen 変数Size() を使います。

uses
  ..., FMX.Forms;

var
  dSize: TSize;
begin
  dSize := Screen.Size;
  Edit1.Text := IntToStr(dSize.Width);
  Edit2.Text := IntToStr(dSize.Height);
end;

XE3 の場合には TPlatformServicesIFMXScreenService を問い合わせることによって取得できます (XE4 以降でも使えます)。

uses
  ..., FMX.Platform;

procedure TForm1.Button1Click(Sender: TObject);
var
  ScreenService: IFMXScreenService;
  ScreenSize: TPointF;
begin
  if TPlatformServices.Current.SupportsPlatformService(IFMXScreenService, IInterface(ScreenService)) then
    begin
      ScreenSize := ScreenService.GetScreenSize;
      Width  := Trunc(ScreenSize.X);
      Height := Trunc(ScreenSize.Y);
    end;
end;

最初からサービスが利用可能だと判明している場合には TPlatformService のクラスメソッドを使って少し短く、かつ簡潔に記述できます。

uses
  ..., FMX.Platform, uPlatformService;

var
  ScreenSize: TPointF;
begin
  ScreenSize := TPlatformService.Get<IFMXScreenService>.GetScreenSize;
  Width  := Trunc(ScreenSize.X);
  Height := Trunc(ScreenSize.Y);
end;

XE2 の場合には PlatForm 変数の GetScreenSize() メソッドで得る事ができます。

uses
  ..., FMX.Platform;

var
  ScreenSize: TPointF;
begin
  ScreenSize := Platform.GetScreenSize;
  Width  := ScreenSize.X;
  Height := ScreenSize.Y;
end;

※ Platform 変数は XE3 (FM2) 以降では使えません。

See Also:


 BACK