子コントロールのドッキング サイトへのドッキング方式を制御する
コントロールの利用:インデックス への移動
ドッキング サイトは、子コントロールがドッキング サイト上でリリースされると自動的に受け入れます。ほとんどのコントロールでは、最初の子がクライアント領域のサイズに合わせてドッキングされ、2 番めの子がクライアント領域を分離した領域に分割します。この分割が順番に続いていきます。ページ コントロールでは、子を新しいタブ シートにドッキングします(子が別のページ コントロールである場合は、タブ シートでマージ)。
ドッキング サイトで子コントロールのドッキング方式を制限するには、次の 3 つのイベントを使用します。
property OnGetSiteInfo: TGetSiteInfoEvent; TGetSiteInfoEvent = procedure(Sender: TObject; DockClient: TControl; var InfluenceRect: TRect; var CanDock: Boolean) of object;
__property TGetSiteInfoEvent OnGetSiteInfo = {read=FOnGetSiteInfo, write=FOnGetSiteInfo}; typedef void __fastcall (__closure *TGetSiteInfoEvent)(System::TObject* Sender, TControl* DockClient, Windows::TRect &InfluenceRect, const Windows::TPoint &MousePos, bool &CanDock);
OnGetSiteInfo イベントは、ユーザーがドッキング可能な子をコントロール上にドラッグすると、ドッキング サイト側で発生します。このイベントにより、サイトが子として DockClient パラメータで指定されたコントロール(その場合、子がドッキング用であるとみなされなければならない)を受け入れるかどうかを示すことができます。OnGetSiteInfo が発生すると、InfluenceRect がドッキング サイトの画面座標に、CanDock が True に初期化されます。InfluenceRect を変更するとドッキング領域を制限できます。CanDock を False に設定すると、子のドッキングを拒否できます。
property OnDockOver: TDockOverEvent; TDockOverEvent = procedure(Sender: TObject; Source: TDragDockObject; X, Y: Integer; State: TDragState; var Accept: Boolean) of object;
__property TDockOverEvent OnDockOver = {read=FOnDockOver, write=FOnDockOver}; typedef void __fastcall (__closure *TDockOverEvent)(System::TObject* Sender, TDragDockObject* Source, int X, int Y, TDragState State, bool &Accept);
OnDockOver イベントは、ユーザーがドッキング可能な子をコントロール上にドラッグすると、ドッキング サイト側で発生します。これはドラッグ&ドロップ操作の OnDragOver イベントと同様です。このイベントの Accept パラメータを設定して、ドッキングのために子をリリースできることを通知します。ドッキング可能コントロールが OnGetSiteInfo イベント ハンドラで(たとえば、コントロールの種類が違うため)拒否された場合、OnDockOver は起こりません。
property OnDockDrop: TDockDropEvent; TDockDropEvent = procedure(Sender: TObject; Source: TDragDockObject; X, Y: Integer) of object;
__property TDockDropEvent OnDockDrop = {read=FOnDockDrop, write=FOnDockDrop}; typedef void __fastcall (__closure *TDockDropEvent)(System::TObject* Sender, TDragDockObject* Source, int X, int Y);
OnDockDrop イベントは、ユーザーがドッキング可能な子をコントロール上でリリースすると、ドッキング サイト側で発生します。これはドラッグ&ドロップ操作の OnDragDrop イベントと同様です。このイベントを使用して、コントロールを子コントロールとして受け入れるために必要な処理をします。子コントロールへのアクセスは、Source パラメータで指定された TDockObject の Control プロパティを使って取得できます。