AFsoft WebSite(エーエフソフト・ウェブサイト)
 

オペレーティング・システムについて

プログラミングについて
ホームページについて
キャドについて
電子カタログについて
書籍・雑誌
イベント
リンク集
DelphiXE3 [FMX]ポップアップ(Popup) 2013/10/09
 
前頁で[Standard]内の「TreeView」(ツリービュー)について書きましたので次は、同じく[Standard]内の「Popup」(ポップアップ)です。Delphi2010・VCLアプリケーションには無いと思われます。
 
 


(ヘルプより)
DragWithParent
TPopup を親と一緒にドラッグするかどうかを示します。
DragWithParent が True に設定されている場合、TPopup は、親がドラッグ&ドロップ操作の対象となっている際に、一緒にドラッグされます。デフォルト値は False です。
たとえば、コンボボックスの TPopup は、親と一緒にドラッグされます。
StaysOpen
コントロールがフォーカスからはずれた際に、そのTPopupを閉じるかどうかを示します。
StaysOpenが True の場合、TPopupは、マウスやキーボードイベントが TPopupのウィンドウ外で発生しても、閉じられません。デフォルトでは、TPopupは、フォーカスがなくなった時点で閉じられます。StaysOpenのデフォルト値は、False です。
HorizontalOffset
ターゲットの開始点とTPopup の整列点との間の、水平距離を設定および取得します。
ターゲットの開始点と整列点を設定するには、
 PlacementTarget、
 Placement、
 PlacementRectangle
の各プロパティを使用します。
Placementが次の値のいずれのかの場合、HorizontalOffset の効果はなくなります:
 plAbsolute、plMouse、
 plMouseCenter。
VerticalOffset
ターゲットの開始点と TPopupの整列点との間の、垂直距離を設定および取得します。
ターゲットの開始点と整列点を設定するには、
 PlacementTarget、
 Placement、
 PlacementRectangle
の各プロパティを使用します。
Placementが次の値のいずれのかの場合、VerticalOffset の効果はなくなります:
 plAbsolute、plMouse、
 plMouseCenter。
Placement
TPopupの方向を取得および設定します。
plBottom, plTop,
plLeft, plRight,
plCenter, plBottomCenter,
plTopCenter, plLeftCenter,
plRightCenter, plAbsolute,
plMouse, plMouseCenter
PlacementRectangle
TPopupが位置するところに相対して、四角形要素を取得または設定します。
 Placement、
 PlacementTarget、
 PlacementRectangle
を使用すると、ターゲットの開始点および TPopup整列点を設定することができます。
PlacementTarget
TPopupが位置するところに相対して、ターゲットを取得または設定します。
PlacementTargetが設定されておらず、TPopupに親がある場合、TPopupは、その親に相対して配置されます。
PlacementTarget および Parentが設定されていない場合は、TPopupは、メインウィンドウに相対して配置されます。
 Placement、
 PlacementTarget、
 PlacementRectangle
を使用すると、ターゲットの開始点および TPopup整列点を設定することができます。
 
(ヘルプより)
TPopup は、ポップアップウィンドウを提供します。
 
TPopup を使用すると、一時ウィンドウにコンテンツを表示することができます。デフォルトでは、TPopup のコンテンツは空です。任意の数のオブジェクトを TPopup のコンテンツに追加することができます:
 ・コントロールを TPopup のコンテンツに追加するには、
  コントロールの Parentプロパティを設定するか、
  TPopup を所有者にしてコントロールを作成します。
 ・TPopup の子にアクセスするには、
  ChildrenCount や Children プロパティを使用します。
 
TPopup の位置を操作するには、次のプロパティを使用します:
 ・PlacementRectangle
 ・PlacementTarget
 ・HorizontalOffset
 ・VerticalOffset
 ・Placement
 
TPopup が開いている場合には、親の位置が変わっても自分自身の位置は変わりません。TPopup を親と一緒にドラッグするには、DragWithParent プロパティを True に設定します。
TPopup は、アニメーションおよびグラフィック効果をサポートしています。アニメーション効果およびグラフィック効果は、表示されたウィンドウに対して適用されるもので、TPopup の子それぞれには適用されません。 不透明度効果については、その効果を直接 TPopup の子に設定してください。TPopup の子は、親に適用されたアニメーションや効果を継承しません。
TPopup が明示的にサイズ設定されていない場合は、そのコンテンツによってサイズ調整されます。この場合、コンテンツの表示サイズが大きくなる効果が適用されると、コンテンツの一部が重なることがあります。これを避けるには、TPopup に対してサイズを明示的に設定するか、その境界を BoundsRect、Margins、Padding の各プロパティを使用して設定します。
TPopup を明示的に開閉するには、それぞれ TPopup.IsOpen プロパティを True および False に設定します。(Popup および ClosePopup の使用は推奨されません)
 
いまいちなんだか分かりませんが、ポップアップ的に表示する画面を、フォームを使わずに作って、表示・非表示をしましょう、というようなもののようです。
 
例えば下図のように配置してみます。

ボタン Button1 の下にある点線の四角が、ポップアップ(Popup1)です。ポップアップの中に入れるコンポーネントは、構造ビュー画面で Popup1の中にドラッグして、子になるようにしています。
 
Popup1 の PlacementTargetプロパティは、Button1 にしています。
Placementプロパティは、デフォルト=plBottom のままです。
マウスをButton1の上に移動すると、このポップアップを表示させたいとします。
procedure TForm1.Button1MouseEnter(Sender: TObject);
begin
 Popup1.IsOpen := True ;
end;
としておきます。
この状態で、保存・コンパイル・実行をしてみます。



ポップアップ領域のどこかをマウスクリックすると、ポップアップは消えます。
 
しかし、ポップアップの位置が随分と下へずれてしまいました。画面デザインした状態で表示して欲しいのですが・・・。
例えば、下図のようにデザインをすれば・・・



のようになって、想定通りになるのですが、画面デザイン時にごちゃごちゃしすぎて結構難儀です。それでは、ずらしてデザインした分だけ、HorizontalOffsetプロパティ・VerticalOffsetプロパティで反対側へずらしなおしてみてはどうだろうか?という事で、Positionプロパティの分だけマイナス指定してみました。



位置的にはOKですが、なぜだか、オフセットした分、欠けてしまいました。もうこうなってしまうと意味が分かりません。ClipChildrenプロパティを False にしても同様です。
仕方がありません。ポップアップ Popup1 の Width、Height を、ずらした分だけ大きくしておきます。大きくすれば欠けないでしょう。



思惑通りになりました。
しかしこれは、ひどいパッチ当てです。
実際のところ、どういう風に扱うのがセオリーなのか良く分かりませんけれども、もっと良い方法があるのかもしれません。当面は、ポップアップ領域は左上に配置してオフセットや領域の大きさ等を考えなくても済むようにデザインする、という位しか想像出来ないです。
 
なお、マウスをボタンから離した時にポップアップを閉じたい場合は
procedure TForm1.Button1MouseLeave(Sender: TObject);
begin
 Popup1.IsOpen := False ;
end;
のようにすればいいでしょう。
 
というわけで、正直、使いにくいかなぁという感じです。
 
 
他のコンポーネントと同様、スタイルによって概観は変化します。スタイルブックを追加し、スタイル「Air.Style」を指定した状態です。

保存・コンパイル・実行を行います。



 
 
バッチファイル
BASIC
C言語のお勉強
拡張子な話
DOSプログラム
Delphi
>Delphi入門編
>Delphi2010
>DelphiXE3
▲2013/10/09
 2013/10/09
▼2013/10/10
 
シェアウェア
Script!World
データベース
 
お問い合わせ 
本サイトはリンクフリーです
リンクバナー
(C)Copyright 1999-2015. By AFsoft All Rights Reserved.