TPlatformService (XE3 以降)

TPlatformServices はアプリケーションが動作しているプラットフォームで利用可能なサービスを判断するために使用できるクラスです。各種サービスを定義するインターフェイスを利用し、プラットフォーム固有の機能や情報を取得する事ができます。

プラットフォーム固有の情報を得たい場合、API を使ってプラットフォーム依存するコードを記述してしまう前に、欲しい情報が TPlatformServices で問い合わせできないかどうかを確認してみるといいと思います。TPlatformServices で利用可能なインターフェイスには以下のものがあります。

インターフェイス ユニットスコープ DocWiki
(ja)
DocWiki
(en)
IFMXAdvertisingService (XE6 以降) FMX.Advertising [DocWiki][DocWiki]
IFMXAdvertisingTestModeService (XE6 以降)FMX.Advertising [DocWiki][DocWiki]
IFMXFullScreenWindowService FMX.Forms [DocWiki][DocWiki]
IFMXWindowBorderService FMX.Forms [DocWiki][DocWiki]
IFMXWindowService FMX.Forms [DocWiki][DocWiki]
IFMXInAppPurchaseService (XE6 以降) FMX.InAppPurchase [DocWiki][DocWiki]
ILoupeService FMX.MagnifierGlass [DocWiki][DocWiki]
IFMXAudioManagerService (XE4 以降) FMX.MediaLibrary [DocWiki][DocWiki]
IFMXCameraService (XE4 以降) FMX.MediaLibrary [DocWiki][DocWiki]
IFMXImageManagerService (XE4 以降) FMX.MediaLibrary [DocWiki][DocWiki]
IFMXShareSheetActionsService (XE4 以降) FMX.MediaLibrary [DocWiki][DocWiki]
IFMXTakenAudioService (XE4 以降) FMX.MediaLibrary [DocWiki][DocWiki]
IFMXTakenImageService (XE4 以降) FMX.MediaLibrary [DocWiki][DocWiki]
IFMXVideoManagerService (XE4 以降) FMX.MediaLibrary [DocWiki][DocWiki]
IFMXMenuService FMX.Menus [DocWiki][DocWiki]
IFMXNotificationCenter FMX.Notification [DocWiki][DocWiki]
IFMXPhoneDialerService FMX.PhoneDialer [DocWiki][DocWiki]
IFMXPickerService FMX.Pickers [DocWiki][DocWiki]
IFMXApplicationEventService (XE4 以降) FMX.Platform [DocWiki][DocWiki]
IFMXApplicationService FMX.Platform [DocWiki][DocWiki]
IFMXCanvasService FMX.Platform [DocWiki][DocWiki]
IFMXClipboardService FMX.Platform [DocWiki][DocWiki]
IFMXContextService FMX.Platform [DocWiki][DocWiki]
IFMXDefaultMetricsService (XE4 以降) FMX.Platform [DocWiki][DocWiki]
IFMXDefaultPropertyValueService (XE4 以降)FMX.Platform [DocWiki][DocWiki]
IFMXDeviceService FMX.Platform [DocWiki][DocWiki]
IFMXDialogService FMX.Platform [DocWiki][DocWiki]
IFMXDragDropService FMX.Platform [DocWiki][DocWiki]
IFMXGestureRecognizersService (XE5 以降) FMX.Platform [DocWiki][DocWiki]
IFMXHideAppService FMX.Platform [DocWiki][DocWiki]
IFMXImageGeneratorService (XE4 以降) (XE6 で廃止) FMX.Platform [DocWiki][DocWiki]
IFMXListingService FMX.Platform [DocWiki][DocWiki]
IFMXLocaleService FMX.Platform [DocWiki][DocWiki]
IFMXLoggingService FMX.Platform [DocWiki][DocWiki]
IFMXRenderingSetupService (XE6 以降) FMX.Platform [DocWiki][DocWiki]
IFMXScreenService FMX.Platform [DocWiki][DocWiki]
IFMXStyleHiResService (XE5 で廃止) FMX.Platform [DocWiki][DocWiki]
IFMXStyleService FMX.Platform [DocWiki][DocWiki]
IFMXSystemFontService FMX.Platform [DocWiki][DocWiki]
IFMXSystemInformationService (XE4 以降) FMX.Platform [DocWiki][DocWiki]
IFMXTextEditingService FMX.Platform [DocWiki][DocWiki]
IFMXTextService FMX.Platform [DocWiki][DocWiki]
IFMXSpellCheckerService (XE4 以降) FMX.SpellChecker [DocWiki][DocWiki]
IFMXCursorService FMX.Types [DocWiki][DocWiki]
IFMXMouseService FMX.Types [DocWiki][DocWiki]
IFMXTimerService FMX.Types [DocWiki][DocWiki]
IFMXVirtualKeyboardService FMX.VirtualKeyboard
(XE3 では FMX.Platform)
[DocWiki][DocWiki]
IFMXVirtualKeyboardToolbarService (XE4 以降) FMX.VirtualKeyboard[DocWiki][DocWiki]
IFMXWBService (XE4 以降) FMX.WebBrowser[DocWiki][DocWiki]

TPlatformServices による基本的な問い合わせ方

TPlatformServices を使った基本的な問い合わせ方は以下のようになります。

uses
  ..., <ユニットスコープ>;

var
  Service<インターフェイス>;
begin
  if TPlatformServices.Current.SupportsPlatformService(<インターフェイス>, IInterface(Service)) then
    begin
      // サポート時の処理
      // Service.~ のようにしてメソッドを呼び出し、必要な情報を得る
    end
  else
    begin
      // 未サポート時の処理
    end;  
end;

uPlatformService (TPlatformService)

最初からサービスが利用可能だと判明している場合には以下のユニットの TPlatformService (TPlatformServices ではない事に注意) を使えば少しだけ短く、かつ簡潔に記述できます。
(参考: And the prize for ugliest API goes to… - [Delphi Haven])

unit uPlatformService;

interface

uses
  FMX.Platform;

type
  TPlatformService = record
    class function Available<IntfType: IInterface>(out Service: IntfType): Boolean; static;
    class function Get<IntfType: IInterface>: IntfType; static;
  end;

implementation

uses
  System.TypInfo;

class function TPlatformService.Available<IntfType>(out Service: IntfType): Boolean;
var
  Guid: TGUID;
begin
  Guid := PTypeInfo(TypeInfo(IntfType)).TypeData.Guid;
  Result := TPlatformServices.Current.SupportsPlatformService(Guid, IInterface(Service));
end;

class function TPlatformService.Get<IntfType>: IntfType;
var
  Guid: TGUID;
begin
  Guid := PTypeInfo(TypeInfo(IntfType)).TypeData.Guid;
  Result := IntfType(TPlatformServices.Current.GetPlatformService(Guid));
end;

end.

TPlatformService.Get() メソッドを使えば簡潔に記述可能です。メソッドの戻り値が変数 retに返ります。別途、インターフェイス用の変数を定義する必要はありません。

uses
  ..., <ユニットスコープ>;

var
  ret<メソッドが返す型>;
begin
  ret := TPlatformService.Get<<インターフェイス>>.メソッド;
  // 処理
end;

サービスが利用可能か事前に問い合わせを行う場合には TPlatformService を使っても TPlatformServices を使っても掛かる手間に大した違いはありません。普通はコード補完で入力するでしょうからね…キャストが一つ減るくらいです。

uses
  ..., <ユニットスコープ>;

var
  Service<インターフェイス>;
begin
  if TPlatformService.Available<<インターフェイス>>(Servicethen
    begin
      // サポート時の処理
      // Service.~ のようにしてメソッドを呼び出し、必要な情報を得る
    end
  else
    begin
      // 未サポート時の処理
    end;
end;

See Also:


IFMXAdvertisingService

広告サービスを定義するインターフェイスです。

See Also:


IFMXAdvertisingTestModeService

広告サービス (テストモード) を定義するインターフェイスです。

See Also:


IFMXFullScreenWindowService

全画面モード管理サービスを定義するインターフェイスです。

See Also:


IFMXWindowBorderService

ウィンドウ境界線サービスを定義するインターフェイスです。

See Also:


IFMXWindowService

ウィンドウ管理サービスを定義するインターフェイスです。

See Also:


IFMXInAppPurchaseService

アプリ内課金サービスを定義するインターフェイスです。


ILoupeService

ルーペ (拡大鏡) サービスを定義するインターフェイスです。

See Also:


IFMXAudioManagerService

オーディオマネージャサービスを定義するインターフェイスです。

See Also:


IFMXCameraService

カメラサービスを定義するインターフェイスです。

See Also:


IFMXImageManagerService

画像マネージャサービスを定義するインターフェイスです。

See Also:


IFMXShareSheetActionsService

シェアシートサービスを定義するインターフェイスです。

See Also:


IFMXTakenAudioService

オーディオファイル取得サービスを定義するインターフェイスです。

See Also:


IFMXTakenImageService

画像ファイル取得サービスを定義するインターフェイスです。

See Also:


IFMXVideoManagerService

ビデオ ファイルマネージャサービスを定義するインターフェイスです。

See Also:


IFMXMenuService

(システム)メニューサービスを定義するインターフェイスです。

See Also:


IFMXNotificationCenter

通知センターサービスを定義するインターフェイスです。

See Also:


IFMXPhoneDialerService

電話ダイヤルサービスを定義するインターフェイスです。

See Also:


IFMXPickerService

ピッカー (選択) コントロールサービスを定義するインターフェイスです。

See Also:


IFMXApplicationEventService

アプリケーションイベント サービスを定義するインターフェイスです。

See Also:


IFMXApplicationService

アプリケーションサービスを定義するインターフェイスです。

See Also:


IFMXCanvasService

キャンバスサービスを定義するインターフェイスです。

See Also:


IFMXClipboardService

クリップボードサービスを定義するインターフェイスです。

See Also:


IFMXContextService

コンテキストサービスを定義するインターフェイスです。

See Also:


IFMXDefaultMetricsService

デフォルト測定基準 (メトリクス) サービスを定義するインターフェイスです。

See Also:


IFMXDefaultPropertyValueService

プラットフォーム固有プロパティ デフォルト値サービスを定義するインターフェイスです。

See Also:


IFMXDeviceService

アプリケーションが動作するデバイスに関するサービスを定義するインターフェイスです。例えば以下のコードを Android 端末で実行すると、タッチ機能の有無と機種名が TMemo に表示されます。

uses
  ..., FMX.Platform;

procedure TForm1.Button1Click(Sender: TObject);
const
  TouchScreen: array [Boolean] of string = ('No''Yes');
var
  DeviceService: IFMXDeviceService;
  Feature: TDeviceFeatures;
begin
  if TPlatformServices.Current.SupportsPlatformService(IFMXDeviceService, IInterface(DeviceService)) then
    begin
      Feature := DeviceService.GetFeatures;
      Memo1.Lines.Add(Format('Touch Screen: %s', [TouchScreen[(TDeviceFeature.HasTouchScreen in Feature)]]));
      Memo1.Lines.Add(DeviceService.GetModel);
    end
  else
    Memo1.Lines.Add('Service is not present.');
end;

See Also:


IFMXDialogService

ダイアログサービスを定義するインターフェイスです。

See Also:


IFMXDragDropService

ドラッグ アンド ドロップサービスを定義するインターフェイスです。

See Also:


IFMXGestureRecognizersService

ジェスチャサービスを定義するインターフェイスです。

See Also:


IFMXHideAppService

アプリケーション非表示サービスを定義するインターフェイスです。

See Also:


IFMXImageGeneratorService

画像ジェネレータ サービスサービスを定義するインターフェイスです。XE6 で廃止されました

See Also:


IFMXListingService

列挙 (リスティング) サービスを定義するインターフェイスです。

See Also:


IFMXLocaleService

ロケールサービスを定義するインターフェイスです。

See Also:


IFMXLoggingService

ログ記録サービスを定義するインターフェイスです。

See Also:


IFMXRenderingSetupService

レンダリングセットアップサービスを定義するインターフェイスです。

See Also:


IFMXScreenService

画面サービスを定義するインターフェイスです。

See Also:


IFMXStyleHiResService

FireMonkey 高解像度スタイルサービスを定義するインターフェイスです。XE5 で廃止されました

See Also:


IFMXStyleService

FireMonkey スタイルサービスを定義するインターフェイスです。

See Also:


IFMXSystemFontService

システムフォントサービスを定義するインターフェイスです。

See Also:


IFMXSystemInformationService

システム情報サービスを定義するインターフェイスです。

See Also:


IFMXTextEditingService

テキスト編集サービスを定義するインターフェイスです。

See Also:


IFMXTextService

テキストサービスを定義するインターフェイスです。

See Also:


IFMXSpellCheckerService

スペルチェッカサービスを定義するインターフェイスです。

See Also:


IFMXCursorService

(マウス) カーソルサービスを定義するインターフェイスです。

See Also:


IFMXMouseService

マウスサービスを定義するインターフェイスです。

See Also:


IFMXTimerService

タイマーサービスを定義するインターフェイスです。

See Also:


IFMXVirtualKeyboardService

仮想キーボードサービスを定義するインターフェイスです。

See Also:


IFMXVirtualKeyboardToolbarService

仮想キーボードツールバーサービスを定義するインターフェイスです。

See Also:


IFMXWBService

Web サービスを定義するインターフェイスです。

See Also:


 BACK