用:MoveTo
例如:
TreeView1.Selected.MoveTo(目标, naAdd 或 naInsert); 

解决方案 »

  1.   

    老兄,我说的是ListView,不是TreeView。ListView是没有MoveTo的。
    Thanks anyway.
      

  2.   

    关键两个事件:给你看一个例程,是treeview的,也许能帮助你!祝你好运!
    procedure TForm1.Treeview1DragOver(Sender, Source: TObject; X,
      Y: Integer; State: TDragState; var Accept: Boolean);
    begin
       Accept:=sender=source;
    if y<10 then
         postmessage(Treeview1.handle,WM_VScroll,SB_LINEUp,0)
       else if fcTV_Entp.Height-y<10 then
         postmessage(Treeview1.handle,WM_VScroll,SB_LINEDOWN ,0)
    end;
    procedure TForm1.Treeview1DragDrop(Sender, Source: TObject; X,
      Y: Integer);
    var
       AnItem: TTreeNode;
       AttachMode: TNodeAttachMode;
       HT: THitTests;
       strentpcode,struppercode:string;
    begin
       HT := Treeview1.GetHitTestInfoAt(X, Y);
       AnItem := Treeview1.GetNodeAt(X, Y);
       if AnItem=nil then
          exit;
       if AnItem=Treeview1.Selected then
          exit;
       if Treeview1.Selected.AbsoluteIndex=0 then
          exit;
       if (HT - [htOnItem, htNowhere, htOnIndent] <> HT) then
       begin
          if htOnItem in HT then AttachMode := naAddChild
          else if htOnIndent in HT then AttachMode := naInsert;
          Treeview1.Selected.MoveTo(AnItem, AttachMode);
          strentpcode:=copy(Treeview1.Selected.Text,1,8);
          if AttachMode= naInsert then
             struppercode:=copy(AnItem.parent.text,1,8)
          else struppercode:=copy(AnItem.text,1,8);
          if struppercode='' then
          begin
             showmessage('error');
             exit;
          end;
       end;
    end;
      

  3.   

    感谢万王之王。
    可是这也是用到了MoveTo拉呀...ListView没有MoveTo,叫我怎么办呢...faint
    faintfaint
    faintfaintfaint
      

  4.   

    把ListView该一下,作成自己的myListView控件。
      

  5.   

    刚刚写好了代码,已经可以使用,看一下吧:
    var
      ListItem:TListItem;procedure TForm1.ListView1DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    begin
        Accept := true;
        ListItem:=ListView1.Selected;
    end;procedure TForm1.ListView1DragDrop(Sender, Source: TObject; X, Y: Integer);
    var
        InsertItem : TListItem;
    begin
        if (Source is TListView) then
        begin
            InsertItem:=ListView1.Items.Insert
                        (ListView1.Items.IndexOf(ListView1.GetItemAt(X,Y)));
            InsertItem.Assign(ListItem);
            ListView1.Selected.Delete;
        end;
    end;
      

  6.   

    同意楼上的.总之是开始拖的时候保存item接点,放的时候来个插入删除就行了.
      

  7.   

    多谢了,已经试验成功,感谢大家热心的帮助。不过小生以为不需要全局变量也可以,
    代码如下,当然用的是gzmhero的思路:)大家一起探讨!procedure TForm1.lv2DragDrop(Sender, Source: TObject; X, Y: Integer);
    var
        s:string;
        ItemCurrent :TListItem;
        i:Integer;
    Begin
        If (Sender is Tlistview) and (Source is Tlistview) then
            If (Sender as TListView).Name = (Source as TListView).Name Then
            Begin   //TODO : Drag to self, try to re-order the list order.
                If ItemCurrent <> nil Then
                Begin
                    ItemCurrent := (Sender as TListView).Items.Insert((Sender as TListView).GetItemAt(X,Y).Index);
                    ItemCurrent.Assign((Source as TListView).Selected);
                    (Source as TListView).Selected.Delete;
                End
                Else
                    Exit;
            End
            Else
            Begin
                s:=(Source as TListView).Selected.Caption;
                showmessage(s);
            End;
    End;