原listview为
111111
222222
333333
444444
555555
用鼠标左键托运后,变为
111111
222222   444444
333333
555555
也就是说把444444的变成了222222的子项(最好有代码,正确的一定加分)

解决方案 »

  1.   

    建议用stringgrid组件做,
    stringgrid1.MouseToCell();可以把一个X,Y坐标定位到单元格.
      

  2.   

    为什么不用TREEVIEW呢?
    说实话,不太明白你的意思,没表述清楚
      

  3.   

    因为商品分类层数太多,且顾客要求尽量能和管家婆的操作差不多!
    LISTVIEW表中即有商品类别,也有商品名称,需要在同一LISTVIEW中打开下一层的窗体,并显示下一层的商品类别和商品名称!!
    (说来说去, 有点表达不清,如果用过管家婆就熟悉点了)大家还是帮我想想吧,谢谢!
    只要能把选中的项目托到另外一个的子项目下,也就成功了
      

  4.   

    procedure TMainForm.CopyNode(DNode, SNode: TTreeNode);
    var
       ANode, NextNode : TTreeNode;
       Owner : TTreeView;
       SLevel, DLevel :Integer;
    begin
       Owner := DNode.TreeView as TTreeView;
       with Owner do
       begin
          if not DNode.HasAsParent(SNode) then
          begin
             try
                try
                   Items.BeginUpdate;
                   NextNode:=Items.AddChild(DNode,SNode.Text);
                   NextNode.Assign(SNode);
                   ANode:=SNode.GetNext;
                   SLevel:=SNode.Level;
                   DLevel:=DNode.Level + 1;               while ANode.Level>SNode.Level do
                   begin
                      if(ANode.Level-SLevel)=(NextNode.Level-DLevel)then
                      begin
                         NextNode:=Items.AddChild(NextNode.Parent,
                           ANode.Text);
                         NextNode.Assign(ANode);
                      end
                      else if(ANode.Level-SLevel)>
                        (NextNode.Level-DLevel) then
                      begin
                         NextNode:=Items.AddChild(NextNode,ANode.Text);
                         NextNode.Assign(ANode);
                      end
                      else if(ANode.Level-SLevel)<
                        (NextNode.Level-DLevel)then
                      begin
                         while(NextNode.Level-DLevel)>
                           (ANode.Level-SLevel)do
                             NextNode := NextNode.Parent;
                         NextNode:=
                           Items.AddChild(NextNode.Parent,ANode.Text);
                         NextNode.Assign(ANode);
                      end;
                      ANode := ANode.GetNext;
                      if not Assigned(ANode) then Break;
                      Application.ProcessMessages;
                   end;            finally
                   Items.EndUpdate;
                end;
             except
                // force repaint on exception
                (Owner as TWinControl).Invalidate;
                raise;
             end;
          end
          else
             Application.MessageBox('不能copy到子节点', '错误',
                MB_OK + MB_DEFBUTTON1);
       end;
    end;
    用时procedure TMainForm.TreeViewDragDrop(Sender, Source: TObject; X,
      Y: Integer);
    var
      tSrcNode ,tDesNode: TTreeNode;
      tSrcID ,tDesID: Integer;
      sSql: String ;
      lSrcItem: TListItem;
    begin
      tSrcID := 0 ;tDesID := 0;
      tDesNode := TTreeview(Sender).GetNodeAt(X,Y);
      if Source is TTreeview then
      begin
        tSrcNode := TTreeview(Source).Selected;
        if btnMode.Down then
          tSrcNode.Moveto(tDesNode, naInsert)
        else
          tSrcNode.MoveTo(tDesNode, naAddChild);
      end
    end;
      

  5.   

    80分太少了点吧 hehe^^btnMode 是个SpeedButton , tbsCheck类型为的是控制把这个节点加到什么位置上面的程序不用再给你写注解了吧,不难自己看看吧
      

  6.   

    作  者:  smallyan (蓝色风筝)   回复人: haike_911(红客) ( ) 信誉:100  2003-09-27 17:18:00  得分:0 试试,成功明天结!------------------------------
    有鬼呀~~~~!!!!!!
      

  7.   

    CDSoftwareWj(95927)仔细看了一下,你那个是TREEVIEW的
      

  8.   

    同理吧 hehe^^ 要用ListView,我可没有现成的代码也没有时间写你可以根据这个原理自己写 ListView也是Node只不过子节点在主节点的后面显示吧了
      

  9.   

    ListView不能显示树结构的,你可以选用第三方控件,比如Dev Express的DxTreeList实现你的功能很容易