ピッカーを使用して選択コントロールのプラットフォーム固有の動作と外見を実現する
FireMonkey には、異なるプラットフォームにおけるネイティブな外見と動作を備えた選択コントロールを実現するプラットフォーム固有のエンジンとなるピッカーが定義されています。
たとえば、Windows と OS X には、以下のような日付選択用の標準デスクトップ カレンダー コントロールが用意されています。
一方、iOS および Android には、以下のような日付選択用のプラットフォーム固有のコントロールが用意されています。
iOS | Android |
---|---|
また、Android および iOS 向けに時刻ピッカーがサポートされています。
iOS | Android |
---|---|
FireMonkey フレームワークでは、ピッカーを使用して日付選択コントロールのプラットフォーム固有の外見と動作を提供できます。
ピッカー エンジンの重要な部分は FMX.Pickers ユニットに宣言されています。Pickers ユニットには、いわゆるプラットフォーム サービスを実現する IFMXPickerService インターフェイスが宣言されています(「FireMonkey プラットフォーム サービス」を参照)。また、Pickers ユニットでは以下の 2 つのピッカーを提供しています。
- 日時ピッカー: 日付の選択をサポートしているプラットフォーム固有のコントロール。TCustomDateTimePicker 型。
- リスト ピッカー: ドロップダウン リストからの文字列の選択をサポートしているプラットフォーム固有のコントロール。TCustomListPicker 型。
これらのピッカーは、IFMXPickerService サービスを使って異なるプラットフォーム上で作動させることができます。
IFMXPickerService サービスを使用する手順は以下のとおりです。
- 現在のプラットフォームで IFMXPickerService プラットフォーム サービスがサポートされているかどうかを確認し、IFMXPickerService サービス オブジェクトを指す
PickerService
ポインタを取得します。 - CreateDateTimePicker メソッドを使って TCustomDateTimePicker のインスタンスを作成するか、CreateListPicker メソッドを使って TCustomListPicker ピッカーのインスタンスを作成します。
Delphi の場合:
var
PickerService: IFMXPickerService;
begin
if PlatformServices.Current.SupportsPlatformService(IFMXPickerService, Interface(PickerService))
then
FDateTimePicker := PickerService.CreateDateTimePicker;
... // or
FListPicker := PickerService.CreateListPicker;
C++ の場合:
_di_IFMXPickerService PickerService;
TCustomDateTimePicker* FDateTimePicker;
TCustomListPicker* FListPicker ;
if (TPlatformServices::Current->SupportsPlatformService
(__uuidof(IFMXPickerService))) {
PickerService = TPlatformServices::Current->GetPlatformService
(__uuidof(IFMXPickerService));
FDateTimePicker = PickerService->CreateDateTimePicker();
... //or
FListPicker = PickerService->CreateListPicker();
}
-
- プラットフォーム サービスの使い方の詳細は、「FireMonkey プラットフォーム サービス」を参照してください。その他の例については、FMX.CalendarEdit.TCustomCalendarEdit.Create や FMX.ListBox.TCustomComboBox.Create のコードを参照してください。
- 作成した TCustomDateTimePicker クラスまたは TCustomListPicker クラスのオブジェクトの Show メソッドを呼び出し、適切なパラメータやイベント ハンドラをオブジェクトに設定して、必要なピッカーを表示します。以下に例を示します。
Delphi の場合:
FDateTimePicker: TCustomDateTimePicker;
//...
FDateTimePicker.Date := Date;
FDateTimePicker.FirstDayOfWeek := TCalDayOfWeek.dowMonday;
FDateTimePicker.ShowWeekNumbers := True;
FDateTimePicker.TodayDefault := False;
FDateTimePicker.Show;
C++ の場合:
TCustomDateTimePicker* FDateTimePicker;
//...
FDateTimePicker->Date = Date();
FDateTimePicker->FirstDayOfWeek = TCalDayOfWeek(0);
FDateTimePicker->ShowWeekNumbers = true;
FDateTimePicker->TodayDefault = false;
FDateTimePicker->Show();
-
- その他の例は、FMX.CalendarEdit.Style.TStyledCalendarEdit.DropDown や FMX.ListBox.TCustomComboBox.DropDown のコードを参照してください。
これらのピッカーでは、対応するコントロール要素のプラットフォーム固有の動作を実現します。たとえば、Windows 8 の FMX.ListBox.TComboBox では、以下のように、選択された要素を中心にしてドロップダウン リストが表示されます。
要素を中心に表示する日付選択用リストを Metropolis UI(Windows 8)アプリケーション用に実装する手順は以下のとおりです。
- [FireMonkey Metropolis UI アプリケーション]を作成します。
- [ツール パレット]から TComboBox を追加します。
- フォーム デザイナで、その TComboBox を選択します。
- [オブジェクト インスペクタ]で FMX.ListBox.TComboBox.DropDownKind プロパティを Native に設定します。
- Windows 8 の場合は、FMX.Styles.TStyleDescription プロパティで [METROPOLISUI] プラットフォームが指定されていなければなりません。そのためには以下の手順を実施します。
- [構造]ペインで StyleBook1 項目をダブルクリックした後、styleDescription.TStyleDescription プロパティを選択します。
- [オブジェクト インスペクタ]では、このスタイルの実装先となり得るプラットフォームが PlatformTarget プロパティに定義されています。PlatformTarget に [METROPOLISUI] プラットフォームが含まれていることを確認します。
- [METROPOLISUI] プラットフォームを指定しない場合、データ選択コントロールは、選択した要素の中心に合わせない標準の(Windows や OS X の)ドロップダウン リストとして機能します。