TTreeGetNodeAt (Delphi)
Description
The following code uses GetNodeAt to add a dragged node as a child of the node under the mouse when it is dropped. This example requires a populated TreeView. Also, the TTreeView DragMode property must be set to dmAutomatic, and the TTreeView OnDragOver event handler must be implemented to accept the drop.
Code
procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
AnItem: TTreeNode;
AttachMode: TNodeAttachMode;
HT: THitTests;
begin
if TreeView1.Selected = nil then Exit;
HT := TreeView1.GetHitTestInfoAt(X, Y);
AnItem := TreeView1.GetNodeAt(X, Y);
if (HT - [htOnItem, htOnIcon, htNowhere, htOnIndent] <> HT) then
begin
if (htOnItem in HT) or (htOnIcon in HT) then
AttachMode := naAddChild
else if htNowhere in HT then AttachMode := naAdd
else if htOnIndent in HT then AttachMode := naInsert;
TreeView1.Selected.MoveTo(AnItem, AttachMode);
end;
end;
procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept := Source is TTreeView;
end;
Uses
- Vcl.ComCtrls.TCustomTreeView.GetNodeAt ( fr | de | ja )
- Vcl.ComCtrls.TTreeNode.MoveTo ( fr | de | ja )
- Vcl.ComCtrls.TCustomTreeView.Selected ( fr | de | ja )
- Vcl.ComCtrls.TCustomTreeView.GetHitTestInfoAt ( fr | de | ja )
- Vcl.Controls.TControl.DragMode ( fr | de | ja )
- Vcl.ComCtrls.TNodeAttachMode ( fr | de | ja )
- Vcl.ComCtrls.THitTest ( fr | de | ja )