TPlatformService (XE3 以降)
TPlatformServices はアプリケーションが動作しているプラットフォームで利用可能なサービスを判断するために使用できるクラスです。各種サービスを定義するインターフェイスを利用し、プラットフォーム固有の機能や情報を取得する事ができます。
プラットフォーム固有の情報を得たい場合、API を使ってプラットフォーム依存するコードを記述してしまう前に、欲しい情報が TPlatformServices で問い合わせできないかどうかを確認してみるといいと思います。TPlatformServices で利用可能なインターフェイスには以下のものがあります。
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<<インターフェイス>>(Service) then
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: