ピッカーを使用して選択コントロールのプラットフォーム固有の動作と外見を実現する

提供: Appmethod Topics
移動先: 案内検索

FireMonkey アプリケーションの設計 への移動


FireMonkey には、異なるプラットフォームにおけるネイティブな外見と動作を備えた選択コントロールを実現するプラットフォーム固有のエンジンとなるピッカーが定義されています。

たとえば、Windows と Mac OS X には、以下のような日付選択用の標準デスクトップ カレンダー コントロールが用意されています。

日付選択用のカレンダー コントロール

一方、iOS および Android には、以下のような日付選択用のプラットフォーム固有のコントロールが用意されています。

iOS Android
日付選択用の回転ホイール FMX Android DateTimePicker.png

また、Android および iOS 向けに時刻ピッカーがサポートされています。

iOS Android
Time Picker iOS.png Time Picker Android.png

FireMonkey フレームワークでは、ピッカーを使用して日付選択コントロールのプラットフォーム固有の外見と動作を提供できます。

ピッカー エンジンの重要な部分は FMX.Pickers ユニットに宣言されています。Pickers ユニットには、いわゆるプラットフォーム サービスを実現する IFMXPickerService インターフェイスが宣言されています(「FireMonkey プラットフォーム サービス」を参照)。また、Pickers ユニットでは以下の 2 つのピッカーを提供しています。

  • 日時ピッカー: 日付の選択をサポートしているプラットフォーム固有のコントロール。TCustomDateTimePicker 型。
  • リスト ピッカー: ドロップダウン リストからの文字列の選択をサポートしているプラットフォーム固有のコントロール。TCustomListPicker 型。

これらのピッカーは、IFMXPickerService サービスを使って異なるプラットフォーム上で作動させることができます。

IFMXPickerService サービスを使用する手順は以下のとおりです。

  1. 現在のプラットフォームで IFMXPickerService プラットフォーム サービスがサポートされているかどうかを確認し、IFMXPickerService サービス オブジェクトを指す PickerService ポインタを取得します。
  2. CreateDateTimePicker メソッドを使って TCustomDateTimePicker のインスタンスを作成するか、CreateListPicker メソッドを使って TCustomListPicker ピッカーのインスタンスを作成します。


Object Pascal の場合:

     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.CreateFMX.ListBox.TCustomComboBox.Create のコードを参照してください。
  1. 作成した TCustomDateTimePicker クラスまたは TCustomListPicker クラスのオブジェクトの Show メソッドを呼び出し、適切なパラメータやイベント ハンドラをオブジェクトに設定して、必要なピッカーを表示します。以下に例を示します。

Object Pascal の場合:

      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.DropDownFMX.ListBox.TCustomComboBox.DropDown のコードを参照してください。

これらのピッカーでは、対応するコントロール要素のプラットフォーム固有の動作を実現します。たとえば、Windows 8FMX.ListBox.TComboBox では、以下のように、選択された要素を中心にしてドロップダウン リストが表示されます。

要素を中心に表示された日付選択用リスト

要素を中心に表示する日付選択用リストを Metropolis UI(Windows 8)アプリケーション用に実装する手順は以下のとおりです。

  1. [FireMonkey Metropolis UI アプリケーション]を作成します。
  2. [ツール パレット]から TComboBox を追加します。
  3. フォーム デザイナで、その TComboBox を選択します。
  4. [オブジェクト インスペクタ]FMX.ListBox.TComboBox.DropDownKind プロパティを Native に設定します。
  5. Windows 8 の場合は、FMX.Styles.TStyleDescription プロパティで [METROPOLISUI] プラットフォームが指定されていなければなりません。そのためには以下の手順を実施します。
    1. [構造]ペインで StyleBook1 項目をダブルクリックした後、styleDescription.TStyleDescription プロパティを選択します。
    2. [オブジェクト インスペクタ]では、このスタイルの実装先となり得るプラットフォームが PlatformTarget プロパティに定義されています。PlatformTarget[METROPOLISUI] プラットフォームが含まれていることを確認します。
      [METROPOLISUI] プラットフォームを指定しない場合、データ選択コントロールは、選択した要素の中心に合わせない標準の(Windows や Mac OS X の)ドロップダウン リストとして機能します。

関連項目