Перетаскивание пунктов в TreeView

Тема в разделе "Delphi", создана пользователем WinHack, 24 ноя 2016.

  1. WinHack
    Этот код использует GetNodeAt, чтобы добавить перемещенный узел как потомок узла в положении мыши, когда отпущена кнопка:

    Код:
    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;