C++Builderでフォームをパネルにドッキングする

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メソッド

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください