2017-06-28 6 views
1

は、以下の画像をご参照ください:これはDelphi Dockingで可能ですか、カスタムドラッグアンドドロップが必要ですか?

  • パネル1とPanel2はドッキング可能です。
  • 右側のパネルはドックサイトです。
  • panel1とpanel2を1つずつ右のパネルにドラッグすると、デフォルトのドッキングがどのように機能するのか知っています。

enter image description here

私の質問:ドッキングパネルは、その高さを保持し、右側のパネルの全幅を占めるようには私がドッキングプレビュー四角形と、最終的なドッキング四角形をコントロールすることはできますか?言い換えれば、最初のパネルをドッキングするときに、それが独自の高さで右のパネルの上部に位置するスナップインタイプのエフェクトを作成できますか?その後、2番目のパネルがドッキングされると、その下にそれ自身の高さでスナップインされますか?

私はドッキングの代わりに独自のドラッグアンドドロップを使用して、ドラッグアンドドロップスナップを適所に行う必要があると考えます。ドラッグアンドドロップで自分のコードを実行しなければならない優れたターゲットプレビュー矩形機能のために、ドッキングを使いたいと思っていました。ここで

答えて

1

は、あなたの一例である。この

procedure TForm3.ScrollBox1DockDrop(Sender: TObject; Source: TDragDockObject; X, 
    Y: Integer); 
begin 
    //Change the dropped component (source) Align property to alTop to achieve top 
    //alignment of docked control 
    Source.Control.Align := alTop; 
end; 

procedure TForm3.ScrollBox1UnDock(Sender: TObject; Client: TControl; 
    NewTarget: TWinControl; var Allow: Boolean); 
begin 
    //Reset Align property to alNone to revert undocked control to original size 
    //NOTE: Changing Source.DocRect like in OnDockOver event below will also change 
    //original size of the control. So when undocked it will no longer have same 
    //dimensions as it did before docking 

    Client.Align := alNone; 
end; 

//Here we can manipulate the size of DockRect to get better preview of docked component. 
//NOTE: Changing Source.DocRect like in OnDockOver event below will also change 
//original size of the control. So when undocked it will no longer have same 
//dimensions as it did before docking 
procedure TForm3.ScrollBox1DockOver(Sender: TObject; Source: TDragDockObject; X, 
    Y: Integer; State: TDragState; var Accept: Boolean); 
var 
    ARect: TRect; 
begin 
    Accept := Source.Control is TPanel; 
    if Accept then 
    begin 
    ARect.TopLeft := (Sender as TScrollBox).ClientToScreen(Point(0,Y)); 
    ARect.BottomRight := (Sender as TScrollBox).ClientToScreen(Point((Sender as TScrollBox).ClientWidth, Source.Control.Height+Y)); 
    Source.DockRect := ARect; 
    end; 
end; 

また、あなたは、いくつかのサードパーティのコンポーネントのための提案

How do I make dockable forms like the IDE's without the very slow freezing movement of the dockable form?

+0

など、ドッキングの詳細については、この質問を点検したいと思うかもしれないが、ありがとうござい達成することができます!プレビュー矩形は完全に機能しましたが、右パネルのUseDockManagerをFalseに設定するまで、DockOverを動作させることはできませんでした。 – user173399

+0

詳細な調査のために、IDockManagerインターフェイスなどを使用して、ドッキングマネージャをカスタマイズするサンプルコードはありますか? – user173399

+0

残念ながら、ドッキングマネージャをカスタマイズするための例はわかりません。おそらく、あなたはいくつかのオープンソースドッキングコンポーネントを見つけることができます。 – SilverWarior

関連する問題