比如说:在Listview 里拖动三个Listitem到Treeview的某一位置时,就在Treeview的那个位置加入这三个Listitem。

解决方案 »

  1.   

    ListView的DragMode设置成Automatic。
    在TreeView中写如下代码://判断拖动中鼠标移动的到Tree上的时候是否显示接受模式的鼠标。
    procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    begin
      if Source=ListView1 then Accept:=True else
      Accept:=False;
    end;//用户拖动完毕后进行向Tree中添加。
    procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
    var
      Node: TTreeNode;
      Item: TListItem;
      i: Integer;
    begin
      if Source=ListView1 then
      Node:=TreeView1.GetNodeAt(x,y);
      if not Assigned(Node) then exit;
      for i:=0 to ListView1.Items.Count-1 do
      if ListView1.Items[9].Selected then
      begin
        Node:=TreeView1.Items.AddChild(Node,'???');
      end;end;
      

  2.   

    估计你最大的问题是出现在GetNodeAt,用它就可以判断ListItem到了TreeView的哪个地方了:)
    以前我做成过,是看帮助搞定的
      

  3.   

    移动TListView项目
    //移动 item 1 在 item 4 之后function MoveListViewItem(listView: TListView; ItemFrom, ItemTo: Word): Boolean;
    var
      Source, Target: TListItem;
    begin
      Result := False;
      listview.Items.BeginUpdate;
      try
        Source := listview.Items[ItemFrom];
        Target := listview.Items.Insert(ItemTo);
        Target.Assign(Source);
        Source.Free;
        Result := True;
      finally
        listview.Items.EndUpdate;
      end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      // Listview1.ViewStyle := vsReport;
      if MoveListViewItem(Listview1, 1, 4) then
        ShowMessage('Moved!');
    end;