我想实现拖动一item到treeview的某个node上。

解决方案 »

  1.   

    TreeView组件如何实现同一级Node的位置可以随意的拖动。 
    主要解答者: sysu 提交人: song317 
    感谢: Eastunfail、cg1120、BlueTrees、sysu 
    审核者: findcsdn 社区对应贴子: 查看 
         A :  现在如果添加一个Node以后自动的放在最下面,要是想可以拖到上面的位置,  
    其他的Node顺延,如何实现呢?  
    ---------------------------------------------------------------  
     
    要在TREEVIEW的DATA里写一个用于排序的数值,拖放时按数值排列  
    ---------------------------------------------------------------  
     
    不用Delete和Add,用MoveTo即可。  
    设置属性TreeView1.DragMode  :=  dmAutomatic;  
    在TreeView1的OnDragOver和OnDragDrop事件中:  
    procedure  TForm1.TreeView1DragOver(Sender,  Source:  TObject;  X,  Y:  Integer;  
       State:  TDragState;  var  Accept:  Boolean);  
    begin  
       Accept  :=  True;  
    end;  
     
    procedure  TForm1.TreeView1DragDrop(Sender,  Source:  TObject;  X,  Y:  Integer);  
    var  
       srcNode,  destNode:  TTreeNode;  
    begin  
       if  (Source  =  TreeView1)  then  
       with  TreeView1  do  begin  
           srcNode    :=  Selected;  
           destNode  :=  GetNodeAt(X,  Y);  
           if  srcNode.Parent  =  destNode.Parent  then    //  若是同一级则移动  
               srcNode.MoveTo(destNode,  naInsert);  
       end;  
    end;  
      

  2.   

    procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    begin
      Accept:=true;
    end;procedure TForm1.ListBox1EndDrag(Sender, Target: TObject; X, Y: Integer);
    begin
      if assigned(target) and assigned((target as TTreeView).GetNodeAt(X, Y)) then
        ShowMessage((target as TTreeView).GetNodeAt(X, Y).Text);
    end;