• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:さすがボーランド!!あまりの高機能ぶりに天ぱる俺。Delphi:DockSiteってなんぞや?)

DelphiのDockSiteについての質問

このQ&Aのポイント
  • DelphiのDockSiteについての質問です。DockSiteは、被ドッキングコントロールの側でドッキングするコントロールを選ぶことができるのでしょうか?
  • また、ドッキングしたパネルをユーザーが消すことができるのですが、これを防ぐ方法はありますか?ドッキングされたときのアクションや離したときのアクションをどこに記述すれば良いのかも分からないです。
  • さらに、コントロールを消した後に再表示した時に、ドッキングされた状態か否かを選択することはできるのでしょうか?お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • crosis
  • ベストアンサー率66% (14/21)
回答No.1

私もドッキングについては、苦手なので何とも言えないので私のやってる方法ですが、、、 『パネル1にパネル2をドッキング』の例で書きますと、、、 >被ドッキングコントロールの側でドッキングするコントロールを選ぶことはできるのでしょうか?  被ドッキングコントロールというのを、例でパネル1と解釈すると、、 パネル1のOnDockOverで、 Accept := Source.Control.Name <> 'Panel2'; としておけば、Panel2のドッキングは防げます。 もっと細かく制御したければ、if文で、if (Source.Control.Name = '') then ~ else if ~ としていけば、ドッキングさせるコントロールは制御できます。 >ドッキングしたあとにパネル2の右上に×印 これは、、、ドッキングする(??)えっと、、、説明しにくい。。。DockSiteがtrueになっている側。つまり、例では、パネル1のUseDockManagerをfalseに設定すれば無くなります。ただし、その場合、ドッキングするフォームの状態をドッキング後にどうするかを自分でソースを書く必要があります。その場合、パネル2側のOnEndDockに私は書いてます。ドッキングしているかどうかは、target = nil かどうかで判別できます。 >コントロールを消したあと、再表示したあとドッキングされた状態か否かを選択 なにを言いたいのかよく分からないのですが、ドッキングされているかどうかについては、ManualFloatとManualDockでコントロールできます。 浮かせたければ、ManualDock(nil)とか、ManualFloat(Rect(0,0,100,100))とか、、、ドッキング状態にしたければ、ManulDock('Panel1')とかってします。 こんなんでいいでしょうか。私もあまり得意ではないので、、、

mario33
質問者

お礼

回答ありがとうございます。詳しい解説参考になります。

関連するQ&A