ウィンドウをドラッグアンドドックでドッキングする方法を説明します。
プロパティを適切に設定するだけで、簡単にウィンドウのドッキング機能を実現することができます。
ドッキングのターゲットになるウィンドウの設定
ドラッグアンドドック操作のターゲットになるコントロールのDockSiteプロパティを「true」に設定し、UseDockManagerプロパティを「true」に設定します。
ドッキングするウィンドウの設定
ドッキングするウィンドウのDragKindプロパティを「dkDock」に設定し、DragModeプロパティを「dmAutomatic」に設定します。
以上で、ウィンドウをドッキングできるようになりました。
新しいVCLフォームアプリケーションを作成します。
Form1にTPanelを配置します。
Panel1のDockSiteプロパティを「true」にします。
新しいフォームを作成します。
Form2のDragKindプロパティを「dkDock」にします。
Form2のDragModeプロパティを「dmAutomatic」にします。
Form1のOnShowイベントで、Form2を表示するようにを記述します。
#include "Unit2.h"
void __fastcall TForm1::FormShow(TObject *Sender)
{
Form2->Show();
}
以上です。
プログラムを実行すると、Form1のPanel1にForm2をドッキングすることができます。
OnDockOverイベントの引数Acceptにfalseを設定すると、ドラッグされたコントロールをドッキングクライアントとして受け入れません。
void __fastcall TForm1::Panel1DockOver(TObject *Sender, TDragDockObject *Source, int X,
int Y, TDragState State, bool &Accept)
{
//ドラッグされたコントロールがForm2なら受け入れる
Accept = (Source->Control == Form2);
}
ドッキングするフォームのOnStartDockイベントを記述することで、ドラッグアンドドック操作を開始したときに実行される特殊な処理を実装できます。
void __fastcall TForm2::FormStartDock(TObject *Sender, TDragDockObject *&DragObject)
{
DragObject = new TDragDockObjectEx(this);
//ドラッグ四角形を変更する
DragObject->Brush->Color = clAqua;
DragObject->Brush->Style = bsDiagCross;
}