有TTreeview控件啊,它有很多方法可以用,看看帮助

解决方案 »

  1.   

    drop吗,TREEVIEW本来就支持的啊,你好好看看帮助吧
      

  2.   

    TTreeview就可以进行拖动。你可以看看OnDragDrop和OnDragOver这两个事件的帮助和相关的例子
      

  3.   

    数型控减.dropmode =dmAutomatic//数型控减的ondragdrop事件
    procedure  onDragDrop(Sender, Source: TObject; X, Y: Integer);
    var Tnode,sNode:TTreenode;
    begin
      inherited;
       Tnode:=trvTDFZ.GetNodeAt(x,y);
       if (Tnode<>nil ) then
       begin
          sNode:=trvTDFZ.selected;
          trvTDFZ.Items.BeginUpdate;
          try
            nodecopy(trvTDFZ,snode,tnode);
            tnode.expand(false);
            trvTDFZ.selected:=tnode;
          finally
            trvTDFZ.Items.EndUpdate ;
          end;
       end;
    end;//数型结构的onDragOver事件
    procedure DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    var Tnode,sNode:TTreenode;
    begin
      inherited;
       Accept:=false;
       Tnode:=trvTDFZ.GetNodeAt(x,y);
       if tnode=nil then exit;
       if (pInfo(TNode.Data)^.TDH<0) then
       begin
         sNode:=trvTDFZ.Selected;
         if (pInfo(sNode.Data)^.TDLX=pInfo(tNode.Data)^.TDLX) then
         if pInfo(sNode.Data)^.TDH >=0 then
         if sNode.Parent<>Tnode then
         accept:=true;
       end;
    end;//函数
    procedure nodecopy(TreeV:TTreeview;sNode,Tnode:TTreenode);
    var newnode:TTreenode;
        i:integer;
    begin
       NewNode:=TreeV.Items.addChildFirst(Tnode,'');
       NewNode.assign(snode);
       pInfo(snode.Data)^.bChange:=true;
       for i:=sNode.count-1 downto 0 do
          nodecopy(treeV,sNode.item[i],newnode);
       treeV.items.delete(snode);
    end;