unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls;type
  TForm1 = class(TForm)
    ListView1: TListView;
    TreeView1: TTreeView;
    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.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
  i:integer;
begin
  if Source = ListView1 then
  begin
    for i := 0 to ListView1.Items.Count - 1 do
    begin
      if ListView1.Items[i].Selected then
      begin
        TreeView1.Items.AddChild(nil,ListView1.Items[i].Caption);//这句要怎么修改才能实现拖拉到任何结点.请代码告知.
      end;
     ListView1.Items[i].delete;     //出错,要怎么修改实现拖拉ListView1中记录到TreeView1结点,ListView1中记录删除.
    end;
  end;
end;
end.
这是实现ListView1中记录(可多选)拖拉到TreeView1任何结点的功能.
同时还想实现,从TreeView1任何结点内容(可多选)拖拉到ListView1中,同样拖拉的内容要删除,谢谢.
请代码指导,我比较菜,文字指导我可能要试很久,麻烦代码指导下,谢谢.

解决方案 »

  1.   

    本帖最后由 bdmh 于 2009-06-24 16:24:21 编辑
      

  2.   

    出啥错?
    procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer); 
    var 
      i:integer; 
    begin 
      if Source = ListView1 then 
      begin 
        for i := 0 to ListView1.Items.Count - 1 do 
        begin 
          if ListView1.Items[i].Selected then 
          begin 
            TreeView1.Items.AddChild(nil,ListView1.Items[i].Caption);//这句要怎么修改才能实现拖拉到任何结点.请代码告知. 
            ListView1.Items[i].delete;//放这试试
          end;  
        end; 
      end; 
    end; 
    end. 
      

  3.   


    下面的方法根据鼠标位置取得接点,拖拽事件中都有鼠标坐标参数
    TreeView1.GetNodeAt(x,y)
    ListView1.GetItemAt(x,y)
      

  4.   

    procedure TForm1.TreeView1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var
      i:integer;
      node: TTreeNode;
    begin
      node:= self.TreeView1.GetNodeAt(x,y);
      if node <> nil then
      begin
        self.TreeView1.Items.AddFirst(nil,ListView1.Items[i].Caption);
      end;
    end;end.
    这样好象也不行,麻烦帮看看
      

  5.   


    TreeView1.Items.AddChild(node,ListView1.Items[i].Caption);//添加子节点
    兄弟,建议你先学习treeview的基本操作吧,你这么问,什么时候是个头呀
      

  6.   

    procedure TForm1.TreeView1MouseUp(Sender: TObject; Button: TMouseButton; 
      Shift: TShiftState; X, Y: Integer); 
    var 
      i:integer; 
      node: TTreeNode; 
    begin 
      node:= self.TreeView1.GetNodeAt(x,y); 
      if node <> nil then 
      begin 
        TreeView1.Items.AddChild(node,ListView1.Items[i].Caption);//添加子节点 
      end; 
    end; 这样写还是不能拖拉到指定的位置,首先我只要点TreeView1中一项就弹错
    然后也不能在指定位置添加内容,
    大哥,既然这样你就一次帮忙到底,写出你的方法给我看看,不然我猛问你也觉得到不了头
      

  7.   

    什么叫指定位置,如果你已经知道是哪个接点,那就只取吧 ,比如selected(被选择的节点),这样就不用去Get了,再有,你总要判断一下node=nil?呀
      

  8.   

    简单的问题,搞这么久都搞不掂,发个代码给你,再不行留邮箱地址发示例给你:unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ComCtrls;type
      TForm1 = class(TForm)
        tv1: TTreeView;
        tv2: TTreeView;
        lv1: TListView;
        procedure tv1DragOver(Sender, Source: TObject; X, Y: Integer;
          State: TDragState; var Accept: Boolean);
        procedure tv1DragDrop(Sender, Source: TObject; X, Y: Integer);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.tv1DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    begin
     Accept := True;
    end;procedure TForm1.tv1DragDrop(Sender, Source: TObject; X, Y: Integer);
    var
      i:Integer;
      list:TListItem;
      Node: TTreeNode;
    begin
     if Source is TTreeView then begin
       for i:=0 to TTreeView(Source).Items.Count-1 do begin
         if TTreeView(Source).Items[i].Selected then begin
         list:=TListView(Sender).Items.Add;
         list.Caption:=TTreeView(Source).Items[i].Text;
         end;
       end;
       TTreeView(Source).Selected.Delete;
     end;  if Source is TListView then begin
       node:=TTreeView(Sender).GetNodeAt(x,y);
       for i:=0 to  TListView(Source).Items.Count-1 do begin
         if TListView(Source).Items[i].Selected then
         TTreeView(Sender).Items.AddChild(node,TListView(Source).Items[i].Caption)
       end;
       TListView(Source).DeleteSelected;
     end;
    end;end.
      

  9.   

    1.在TreeView控件的DragOver事件及DragDrop事件写代码参考其上.
    2.ListView以上两个事件指向TreeView控件.
      

  10.   

    不好意思,麻烦大家啦.谢谢10楼的朋友,谢谢指导我的bdmh
    我是基础太差,所以问的问题都有点低级
    谢谢,以后会努力的