FireMonkey でのポップアップ フォームの使用

提供: RAD Studio
移動先: 案内検索

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


ポップアップ フォームについて

FireMonkey ではポップアップ フォームをサポートしています。ポップアップ フォームは TCommonCustomForm クラスで定義されます。ポップアップ フォームの最も重要なプロパティは FormStyleParentForm です。

TCommonCustomForm.FormStyle プロパティ

FormStyle プロパティはフォームの動作を定義します。FormStyle の取り得る値は NormalStayOnTopPopup のいずれかです。Normal 値と StayOnTop 値の意味はかなり自明です。Normal は通常のフォームを定義し、StayOnTop は、常にデスクトップの最前面やアプリケーション内の他のすべてのフォームより手前に表示される通常のフォームを定義しています。

VCL には、fsMDIChildfsMDIForm の 2 つの値をさらに持つ同様の TCustomForm.FormStyle プロパティがあることに注意してください。なお、これらの値は、Windows プラットフォームでのみ意味を持つので、FireMonkey では定義されていません。
FormStyleStyleBook プロパティと比較すると、後者はフォームの目に見えるスタイルを定義しています。

Popup オプションは、コンボ リスト コントロールやメニューで使用される特別なポップアップ フォームを定義しています。ポップアップ フォームに特有の動作は次のとおりです。

  • ポップアップ フォームはアクティブになることはできません。この種類のフォームはすべて、TScreen クラス内の特別な PopupForms リストに含まれています。PopupFormCount では、アプリケーションに現在作成されているポップアップ フォームの数を定義しています。
  • モバイル プラットフォームでは、通常のフォームは常にフルスクリーン モードで表示されますが、ポップアップ フォームはデスクトップの一部のみを占めることができます。
  • ポップアップ フォームは、長時間表示されたままになることはありません。ポップアップ フォームの外部でマウスをクリック(または指でタッチパッドをタップ)すると、通常、ポップアップ フォームは閉じます。いくつかのポップアップ フォームを同時に表示することができます。これらのポップアップ フォームは同類関係を持つことができます。

通常、ポップアップ フォームには次のプロパティがあります。

BorderStyle := None; // No visible border (not resizable) 
Transparency := True;  // pop-up form is transparent 

TCommonCustomForm.ParentForm プロパティ

ParentForm プロパティでは、フォーム間の同類関係を定義します。ParentForm の値は、Parent プロパティの変更時に設定されます。Parent がフォームであれば、ParentFormParent と同じ値に設定されます。そうでなければ、ParentForm は、Parent の所属先のフォームと同じ値に設定されます。

ParentForm フォームが変更されるたびに、システムは仮想メソッド DoParentFormChanged を実行します。

FormStyleBorderStyleParentForm のいずれかのプロパティを変更すると、現在のフォーム、フォーム上のすべてのコントロール、現在のフォームのすべての子フォームが強制的に再作成されることに注意してください。そのため、実行時にフォームが画面に既に表示された後でこれらのプロパティのいずれかを変更することはお勧めしません。

TCustomPopupForm クラスの使用

ポップアップ フォームの作成を簡単に行えるように、FireMonkey には特別な TCustomPopupForm クラスが定義されています。TPopup(特に CreatePopupForm)、TComboEditTPopupBoxTMenuBar、その他の類似クラスでは TCustomPopupForm を使用しています。

デフォルトでは、TCustomPopupForm フォームは、背景が透明で(Transparency := True)、フレームがありません(BorderStyle := None)。TCustomPopupForm フォームを閉じると、それは自動的に破棄されます。TCustomPopupForm フォームの作成時に、システムでは、そのフォームを保存した FMX ファイルを検索しません。つまり、TCustomPopupForm クラスは、実行時に使用することを目的とするものです。

TCustomPopupForm フォームでは次のコンストラクタを使用します。

 constructor Create(AOwner: TComponent; AStyleBook: TStyleBook = nil; APlacementTarget: TControl = nil); reintroduce;

ここで、AStyleBook では、フォームで使用されるスタイルを指定し、APlacementTarget では、フォームの表示位置に近いコントロールを指定します。

TCustomPopupForm フォームの重要なプロパティ

TCustomPopupForm フォームは、フレームが表示されず、背景が透明であるため、画面の境界からはみ出しません。フォームの物理座標(PositionHeightWidth)は位置決めには使用されません。TCustomPopupForm フォームの位置決めは、他のプロパティを使って行われます。つまり、PlacementPlacementTargetPlacementRectangleScreenPlacementRectSize です。PositionHeightWidth の各プロパティを明示的に変更してはいけません。

PlacementTarget は、TCustomPopupForm フォームの表示位置の基準となるターゲット コントロールを指します。以後、このようにポップアップ フォームの相対的な位置をターゲット コントロールの近くに決定することを明示するために "接着" という用語を使用します。PlacementTarget が指定された場合、フォームの画面座標は、この PlacementTarget コントロールを基準として相対的に計算されます。

TCustomPopupForm フォームに ParentForm があり、PlacementTarget が設定されていない場合は、親を基準として、TCustomPopupForm フォームの相対的な位置が決定されます。PlacementTargetParentForm がどちらも設定されていない場合は、画面(メイン ウィンドウ)の左上隅を基準として、TCustomPopupForm フォームの相対的な位置が決定されます。

PlacementRectangle では、フォームの接着先となる四角形の座標を定義します。PlacementRectangle の画面座標は、PlacementTarget が指定されている場合は、それを基準として相対的に計算されます。そうでない場合、その画面座標は画面の左上隅を基準として相対的に計算されます。使用されるルールは次のとおりです。

ScreenPlacementRect では、PlacementRectangle プロパティと PlacementTarget プロパティの両方を考慮に入れてポップアップ フォームの接着先となる四角形の画面座標を定義します。

Placement では、ScreenPlacementRect などのプロパティで指定された四角形、画面、マウス(ポインティング デバイス)位置のいずれかを基準として、ポップアップ フォームの相対的な位置がどのように決定されるかを定義します。TPlacement には、Placement の取り得る値が定義されています。通常のデフォルト値は Bottom で、ポップアップ フォームがターゲット四角形の下辺に接着することを指定します。次の図は、TopCenter 値の場合のデモです。

画面上の配置の基準となる四角形

この図で、ScreenPlacementRect[Show popup]ボタンの明るい赤紫色の四角形です。

Padding では、通常のフォームの場合と同様に、フォームのクライアント四角形の境界からのインデントを定義します。フォーム内のすべての子コントロールは、これらのインデントに従って配置されます。デフォルト値は 8 です。これは、(影などの)効果がウィンドウの物理的な境界を横切らないことを指定するのに使用されます。

Size では、現在のポップアップ フォームの作業領域のサイズを定義します。ウィンドウの物理的なサイズを表す四角形(図に赤色の破線の枠で示されているもの)は重要ではありません。Size 四角形は図に緑色の破線の枠で示されているもので、すべてのコントロールの配置の基準となるサイズを指定します。フォームの寸法(ClientWidthClientHeight)は、SizePadding に基づいて自動的に定義されます。PlacementRectangle が定義されていて、PlacementAbsolute である場合、Size は無視されます。

ContentPadding では、ポップアップ フォームのクライアント領域からのインデントを定義します。ポップアップ フォームの接着は、このインデントされた "パディング四角形" の境界に対して行われます。

ScreenContentRect では、ポップアップ フォームの接着先となる "パディング四角形" の画面座標を定義します。

ポップアップ フォームの有用な内容はすべて、この "パディング四角形" の内側に配置されます。いくつかの "装飾的要素"(たとえば、吹き出しパネルの 1 辺に表示される "三角形の突起" など)は、パディング四角形の外側に配置できることに注意してください。これの例を次の図に示します。

三角形の突起

Offset では、ポップアップ フォームのクライアント四角形を基準とする、"パディング四角形" の相対的なオフセットを定義します。フォームの位置を基準とするポップアップ フォームの相対的なずれをピクセル数で定義します。これは、上記で解説したすべての位置決めプロパティを考慮に入れて取得されます。Offset の方向は、Placement の値によって決まります。Offset プロパティは、たとえば、マルチレベル メニューでサブメニューのポップアップ フォームが前のレベルのフォームと重なって配置される場合に使用されます。

ポップアップ フォームのオフセット

DragWithParent は、現在の TCustomPopupForm を表示後にドラッグできるかどうかを指定します。たとえば、DragWithParentTrue であれば、TCustomPopupForm は、自分の親フォームがドラッグ アンド ドロップ操作の対象となる場合、親フォームと一緒にドラッグされます。PlacementMouse または MouseCenter の場合、ポップアップ フォームはマウス カーソルの後について移動します。モバイル デバイスでは、向き(縦/横)を変更した後、ポップアップ フォームは、画面の境界で部分的に見えにくくならないように位置を変更できます。

関連項目