TDockTabSetの使い方を説明します。
新しいVCLフォームアプリケーションを作成します。
Form1にTDockTabSetを配置します。
DockTabSet1のAlignを「alTop」に設定します。
タブに登録するためのフォームを2つ作成します。
作成したForm2とForm3のDragKindプロパティを「dkDock」にします。
Form2とForm3のDragModeプロパティを「dmAutomatic」にします。
Form1のOnShowイベントを記述します。
#include "Unit2.h"
#include "Unit3.h"
void __fastcall TForm1::FormShow(TObject *Sender)
{
Form2->Show();
Form3->Show();
//ドッキングする
Form2->ManualDock(DockTabSet1);
Form3->ManualDock(DockTabSet1);
//Form2を表示する
DockTabSet1->ShowDockClient(Form2);
}
以上で完了です。
実行すると、Form2とForm3の表示をTDockTabSetで切り替えることができます。
タブの表示する方向はTabPositionプロパティで設定します。
Form1にTPanelを追加します。
Panel1のAlignを「alLeft」にします。
Panel1のDockSiteを「true」にします。
DockTabSet1のDestinationDockSiteを「Panel1」にします。
Form2のタイトル部分にピンが表示されるようになりました。
ピンをクリックすると、Form2がPanel1にドッキングします。
タブやパネルに表示するフォームがないときは、非表示にするようにします。
Form1にTSplitterを配置します。
Splitter1のAlignを「alLeft」にします。
TMemoを配置します。
Form1にMemo1のAlignを「alClient」にします。
パネルにドッキングしているフォームがなくなると、パネルを非表示にするようにします。
Panel1のOnUnDockイベントに次のコードを記述します。
void __fastcall TForm1::Panel1UnDock(TObject *Sender, TControl *Client, TWinControl *NewTarget,
bool &Allow)
{
//ドッキングしているフォームがなくなったら、パネルを非表示にする
if (Panel1->DockClientCount == 1)
{
Panel1->Width = 0;
Splitter1->Visible = false;
}
}
パネルにフォームをドッキングするとき、パネルを表示するようにします。
Panel1のOnDockDropイベントに次のコードを記述します。
void __fastcall TForm1::Panel1DockDrop(TObject *Sender, TDragDockObject *Source, int X,
int Y)
{
//パネルが非表示の時は表示する
if (Panel1->Width == 0)
{
Panel1->Width = 150;
}
Splitter1->Visible = true;
Splitter1->Left = Panel1->Width;
}
タブがなくなったとき、DockTabSet1を非表示にするようにします。
DockTabSet1のOnTabRemovedイベントに次のコードを記述します。
void __fastcall TForm1::DockTabSet1TabRemoved(TObject *Sender)
{
//タブがなくなったら非表示にする
DockTabSet1->Visible = DockTabSet1->Tabs->Count > 0;
}
タブが追加されたとき、DockTabSet1を表示するようにします。
DockTabSet1のOnDockDropイベントに次のコードを記述します。
void __fastcall TForm1::DockTabSet1DockDrop(TObject *Sender, TDragDockObject *Source,
int X, int Y)
{
//タブを表示する
DockTabSet1->Visible = true;
}
参考にしたページです。