フォームのドッキング


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にドッキング