1】

image

procedure TForm1.TreeViewDragDrop(Sender, Source: TObject; X, Y: Integer);
var
  TargetNode, DragNode: TTreeNode;
begin
  TargetNode := TreeView.GetNodeAt(X, Y);
  DragNode := TreeView.Selected;

  if (TargetNode <> nil) and (DragNode <> nil) and (DragNode <> TargetNode) then
  begin
    // 防止将节点拖到自己的子节点下
    if (TargetNode.Parent <> DragNode) and
       (DragNode.Parent <> TargetNode) and
       (TargetNode <> DragNode.Parent) then
    begin
      DragNode.MoveTo(TargetNode, naAddChild);
    end;
  end;
end;

procedure TForm1.TreeViewDragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
      Accept := Source = TreeView;
end;