在DragDrop和DragOver中写代码,并且把DragMode设置为dmAutomatic就可以了。procedure Tmainwin.TreeView1DragDrop(Sender, Source: TObject; X,
  Y: Integer);
var 
  Snode,Tnode : ttreenode;
begin
  if source=treeview1 then
  begin
    Snode:=TreeView1.Selected;
    Tnode:=treeview1.GetNodeAt(x,y);
    if (Tnode<>nil) and (Tnode<>Snode) then
      Snode.MoveTo(Tnode,naAddchildFirst);
    else 
      exit;
  end;
end;procedure Tmainwin.TreeView1DragOver(Sender, Source: TObject; X,
  Y: Integer; State: TDragState; var Accept: Boolean);
var 
  Snode,Tnode:Ttreenode;
begin
  if source=treeview1 then
   begin
     Snode:=treeview1.Selected;
     Tnode:=treeview1.GetNodeAt(x,y);
     if (Tnode<>nil) and (Tnode<>Snode) and (Tnode<>Snode.Parent) then
       accept:=true 
     else 
       accept:=false;
   end
 else 
   accept:=false;
end;