フォームのドッキング
Delphi4以上ではフォームを他のフォーム(フォーム内のコントロールを含む)にドッキングできるようになりました。単純なドッキングだけならプロパティの設定だけで可能です。
フォームをドッキングできるようにするには
次の様にプロパティを設定すると自動でドッキング可能になります。
ドッキングするフォームのプロパティ
DockSiteとUseDockManagerプロパティをTrueにする。
ドッキングされるフォーム(またはコントロール)のプロパティ
DragKindをdkDockにする。
DragModeをdmAutomaticにする。
ドッキングサンプル
2つのフォーム(Form1,Form2)を作り、Form2をForm1のPanel1またはPanel2にドッキングできるようにした例です。ドッキングが成功するとForm2の表示文字列が変わるようにしました。なお、Form2のVisibleプロパティは設計時にTrueにしておく必要があります(そうしないと表示されません)。
Form1のコード
unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; type TForm1 = class(TForm) Panel1: TPanel; Panel2: TPanel; procedure Panel2UnDock(Sender: TObject; Client: TControl; NewTarget: TWinControl; var Allow: Boolean); procedure Panel2DockDrop(Sender: TObject; Source: TDragDockObject; X, Y: Integer); procedure Panel1DockDrop(Sender: TObject; Source: TDragDockObject; X, Y: Integer); procedure Panel1UnDock(Sender: TObject; Client: TControl; NewTarget: TWinControl; var Allow: Boolean); private { Private 宣言 } public { Public 宣言 } end; var Form1: TForm1; implementation uses Unit2; {$R *.DFM} procedure TForm1.Panel2DockDrop(Sender: TObject; Source: TDragDockObject; X, Y: Integer); begin Form2.Label1.Caption := '取り外しができます。'; end; procedure TForm1.Panel2UnDock(Sender: TObject; Client: TControl; NewTarget: TWinControl; var Allow: Boolean); begin Form2.Label1.Caption := 'Form1にドッキングしてください!'; end; procedure TForm1.Panel1DockDrop(Sender: TObject; Source: TDragDockObject; X, Y: Integer); begin Form2.Label1.Caption := '取り外しができます。'; end; procedure TForm1.Panel1UnDock(Sender: TObject; Client: TControl; NewTarget: TWinControl; var Allow: Boolean); begin Form2.Label1.Caption := 'Form1にドッキングしてください!'; end; end. |
Form2のコード
(特に新たなコードを記述する必要はありません) |
図1 ドッキング前
図2 Form2をForm1のPanel2にドッキング
図3 Form2をForm1のPanel1にドッキング