unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls;type
  TForm1 = class(TForm)
    TreeView1: TTreeView;
    ListBox1: TListBox;
    Button1: TButton;
    procedure TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
    procedure TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
  private
    { Private declarations }
  public
    { Public declarations }
  end;var
  Form1: TForm1;implementation{$R *.dfm}procedure TForm1.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 TForm1.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;
end.