代码如下,默认为第一个节点a获得焦点,我想将edit中的内容拖到C节点,使C节点的text改为edit中的内容,但是在拖曳状态下,无法选中C节点,
请高手指示,谢谢!unit testunit;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, ExtCtrls, StdCtrls;type
TForm1 = class(TForm)
TreeView1: TTreeView;
Edit1: TEdit;
procedure FormShow(Sender: TObject);
procedure Edit1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormShow(Sender: TObject);
var
node1:ttreenode;
begin
edit1.Text:='test';
Node1:=TreeView1.Items.Addchild(nil,'c');
end;procedure TForm1.Edit1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if button=mbLeft then
(sender as Tedit).begindrag(false);end;procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
if (Source is Tedit) then
Accept:=true;end;procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
infoname1:string;
begin
if (Sender is TTreeView) and (Source is Tedit) then
begin
infoname1:=(Sender as TTreeView).Selected.Text;
showmessage(infoname1);
end;end;end. 

解决方案 »

  1.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ComCtrls, StdCtrls;type
      TForm1 = class(TForm)
        TreeView1: TTreeView;
        Edit1: TEdit;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
        procedure FormShow(Sender: TObject);
        procedure Edit1MouseDown(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        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;implementationvar
      Node1:TTreeNode; //注意这里,将Node1定义成全局变量{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
       close;
    end;procedure TForm1.Edit1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      if Button=mbLeft then
        TEdit(Sender).BeginDrag(false);
    end;procedure TForm1.FormShow(Sender: TObject);
    //var
      //Node1:TTreeNode;
    begin
      Edit1.Text:= 'test';
      Node1:=TreeView1.Items.Addchild(nil, 'c ');
    end;procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
    var
      infoname1:string;
    begin
      if (Sender is TTreeView) and (Source is TEdit) then
      begin
        TreeView1.Selected:=Node1; //改变当前的选定节点
        infoname1:=(Sender as TTreeView).Selected.Text;
        ShowMessage(infoname1);
      end;
    end;procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    begin
      if (Source is TEdit) then
        Accept:=true;
    end;end.
      

  2.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ComCtrls, StdCtrls;type
      TForm1 = class(TForm)
        TreeView1: TTreeView;
        Edit1: TEdit;
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
        procedure FormShow(Sender: TObject);
        procedure Edit1MouseDown(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        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;implementationvar
      Node1:TTreeNode;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    begin
       close;
    end;procedure TForm1.Edit1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      if Button=mbLeft then
        TEdit(Sender).BeginDrag(false);
    end;procedure TForm1.FormShow(Sender: TObject);
    //var
      //Node1:TTreeNode;
    begin
      Edit1.Text:= 'test';
      Node1:=TreeView1.Items.Addchild(nil, 'c ');
    end;procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
    begin
      if (Sender is TTreeView) and (Source is TEdit) then
      begin
        TreeView1.Selected:=Node1;
        TreeView1.Selected.Text:=TEdit(Source).Text;
      end;
    end;procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    begin
      if (Source is TEdit) then
        Accept:=true;
    end;end.上面代码实现了“在拖曳状态下,使C节点的Text改为Edit1中的内容”。
      

  3.   

    将TreeView1DragDrop改成如下即可。
    procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer); 
    var
      Node: TTreeNode;
    begin 
      if (Sender is TTreeView) and (Source is TEdit) then  begin 
        Node := TreeView1.GetNodeAt(X, Y);
        if not(Node = Nil) then Node.Text := TEdit(Source).Text;
      end;
    end;
      

  4.   

    Delphi 7 从入门到精通随书源码, 有现成的例子,去看一下。
      

  5.   

    我这里有example,需要留CC地址