C++Builderでフォームをパネルにドッキングする方法。
Formを追加します。(追加したフォームをForm2とします。)
Form2にボタンを2つとTApplicationEventsを配置します。
Form2のプロパティを編集します
DragKind dkDock
DragMode dmAutomatic
Form2のコンストラクタを編集します。
フォームに色をつけて判別しやすくします。
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
Color = Random(0xFFFFFF);
}
Form2のOnCloseイベントを追加します。
フォームを閉じた時にメモリを解放します。
void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action)
{
Action = caFree;
}
閉じるボタンのクリックイベントを追加します。
閉じるボタンを押すとフォームを閉じるようにします。
void __fastcall TForm2::Button1Click(TObject *Sender)
{
Close();
}
ドッキング解除ボタンのクリックイベントを追加します。
閉じるボタンを押すとフォームを閉じるようにします。
void __fastcall TForm2::Button2Click(TObject *Sender)
{
ManualFloat(Rect(0, 0, Width, Height));
}
TApplicationEventsのOnIdleイベントを追加します。
ドッキング中のみドッキング解除ボタンを表示するようにします。
void __fastcall TForm2::ApplicationEvents1Idle(TObject *Sender, bool &Done)
{
Button2->Visible = !Floating;
}
Form1にボタンとパネルを配置します。
Panel1のDockSiteプロパティをtrueにします。
Form1のボタンのクリックイベントを追加します。
フォーム作成ボタンを押すとForm2を作成します。
void __fastcall TForm1::Button1Click(TObject *Sender)
{
(new TForm2(Application))->Show();
}
プログラムを実行します。
フォーム作成ボタンを押すと、フォームが作られます。
パネルをフォームの上に移動すると、パネルにドッキングします。
パネル上には、複数のフォームをドッキングできます。
閉じるボタンを押すと、フォームを閉じます。
ドッキング解除ボタンを押すと、ドッキングが解除されます。
TPanelの代わりにTPageControlを使うこともできます。
フォームをドッキングすると、新しいタブが追加されます。
ドッキングした状態でフォームを表示するには、ManualDockメソッドを使用します。
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TForm2* form = new TForm2(Application);
form->ManualDock(PageControl1);
form->Show();
}
■まとめ
ドッキングする側のフォームのプロパティ
DragKind dkDock
DragMode dmAutomatic
ドッキングされる側のTPanelやTPageControlのプロパティ
DockSite true
ドッキングを解除する
ManualFloatメソッド
ドッキングする
ManualDockメソッド