要求很简单:只需实现同层节点在不同父节点之间的拖动。
我只知道有startdrag、dragover、dragdrop三个事件,但是不知道怎样实现。
请高手帮帮我!开发急用!!谢谢!!!
一定给分,不够再给!!!

解决方案 »

  1.   

    在startdrag中记录被选中的节点
    在dragdrop中执行删除、添加操作。
      

  2.   

    要在DragOver中写
    Accept:=true;
      

  3.   

    //节点的拖放操作
    procedure TFSetup.myTreeDragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    begin
      if TTreeView(Source)=myTree then
        Accept:=true;
    end;procedure TFSetup.myTreeDragDrop(Sender, Source: TObject; X, Y: Integer);
    begin
      try
        myTree.Selected.MoveTo(myTree.GetNodeAt(X,Y),naInsert);
      except
      end;
    end;
      

  4.   

    给大家一段比较通用的代码,我自己一直用这个,很好用,经整理,如下:功能说明:
    在一个或者多个TTreeView之间拖动TTreeNode的代码,
    以两个TTreeView作为例子。源代码:
    {在两个TTreeView之间拖动TTreeNode}
    {当然一个和多个是相同原理}
    {原作者信息}
    {
    Member Name inthe
    Date Account Created 10/10/98
    Expert Points 576944
    Profile Work in Music industry as an Engineer dealing with electrics, mechanical, electronics,pneumatics ,Plcs etc..
    Programming is my hobby, mostly delphi but have some knowledge of others such as c/c++,asm,php,ladder/stl etc.
    with computers ive had experience with Debian, Mandrake,OS-9 ,3.1/win9*,nt/2k
    ,macOS and a few other RTOS.
    }{zdcnow(磁效应)2002-8-21下载于E-E}
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      ComCtrls, StdCtrls;type
      TForm1 = class(TForm)
        TreeView1: TTreeView;
        TreeView2: TTreeView;
        procedure TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
        procedure TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
          State: TDragState; var Accept: Boolean);
        procedure TreeView2DragOver(Sender, Source: TObject; X, Y: Integer;
          State: TDragState; var Accept: Boolean);
        procedure TreeView2DragDrop(Sender, Source: TObject; X, Y: Integer);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
    implementation{$R *.DFM}procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
     State: TDragState; var Accept: Boolean);
    begin
      Accept := Source is TTreeView;
    end;procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
      procedure CopyChildNode(ASNode:TTreeNode;var ADNode:TTreeNode);
      var
        i:integer;
        CNode:TTreeNode;
      begin
       for i:=0 to ASNode.Count-1 do
       begin
         CNode:=TTreeView(Sender).Items.AddChild(ADNode,ASNode.Item[i].Text);
         if ASNode.Item[i].HasChildren then
           CopyChildNode(ASNode.Item[i],CNode);
       end;
      end;
    var
      NNode, SNode, DNode : TTreeNode;
    begin
      SNode := TTreeView(Source).Selected;
      DNode := TTreeView(Sender).GetNodeAt(X, Y);  if DNode = nil then
        NNode := TTreeView(Sender).Items.Add(nil, SNode.Text)
      else
        NNode := TTreeView(Sender).Items.AddChild(DNode, SNode.text);
      if SNode.HasChildren then CopyChildNode(SNode,NNode);
      SNode.Delete;
    end;procedure TForm1.TreeView2DragOver(Sender, Source: TObject; X, Y: Integer;
     State: TDragState; var Accept: Boolean);
    begin
      Accept := Source is TTreeView;
    end;procedure TForm1.TreeView2DragDrop(Sender, Source: TObject; X, Y: Integer);
      procedure CopyChildNode(ASNode:TTreeNode;var ADNode:TTreeNode);
      var
        i:integer;
        CNode:TTreeNode;
      begin
       for i:=0 to ASNode.Count-1 do
       begin
         CNode:=TTreeView(Sender).Items.AddChild(ADNode,ASNode.Item[i].Text);
         if ASNode.Item[i].HasChildren then
           CopyChildNode(ASNode.Item[i],CNode);
       end;
      end;
    var
      NNode, SNode, DNode : TTreeNode;
    begin
      SNode := TTreeView(Source).Selected;
      DNode := TTreeView(Sender).GetNodeAt(X, Y);  if DNode = nil then
        NNode := TTreeView(Sender).Items.Add(nil, SNode.Text)
      else
        NNode := TTreeView(Sender).Items.AddChild(DNode, SNode.text);
      if SNode.HasChildren then CopyChildNode(SNode,NNode);
      SNode.Delete;
    end;end.