请问怎样在ListView中通过拖动交换Item的顺序?

解决方案 »

  1.   

    提供一个思路,可以用GETITEMAT(X,Y)来处理,我只处理了REPORT格式下CAPTION;
    procedure TForm1.ListView1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      tmp1:=listview1.GetItemAt(x,y);
    end;procedure TForm1.ListView1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var
      s:string;
    begin
      tmp:=listview1.GetItemAt(x,y);
      s:=tmp.Caption;
      tmp.Caption :=tmp1.Caption ;
      tmp1.Caption:=s ;
    end;
      

  2.   

    ListView.GetItemAt 试试这个函数吧.可以知道鼠标底下是不是 Item,
    到于如何交换就这样做吧..
    Var
      tmpItem: TListItem;
    Begin
      tmpItem:= ListView.Items.Item[0];
      ListView.Items.Item[0].assign(ListView.Items.Item[1]);
      ListView.Items.Item[1].Assign(tmpItem);
    End;
      

  3.   


    (*// 
    标题:移动树节点说明:上、下、左、右移动设计:Zswang日期:2002-06-08支持:[email protected]//*)///////Begin Sourcefunction TreeNodeMove(mTreeNode: TTreeNode; mAnchorKind: TAnchorKind;mIsTry: Boolean = False): Boolean;varvTreeNode: TTreeNode;beginResult := Assigned(mTreeNode);if not Result then Exit;case mAnchorKind ofakTop: beginvTreeNode := mTreeNode.GetPrev;while Assigned(vTreeNode) do beginif vTreeNode = mTreeNode.GetPrevSibling then beginif not mIsTry then mTreeNode.MoveTo(vTreeNode, naInsert);Exit;end else if (vTreeNode.Level = mTreeNode.Level) then beginif not mIsTry then mTreeNode.MoveTo(vTreeNode, naAdd);Exit;end else if (vTreeNode <> mTreeNode.Parent) and(vTreeNode.Level + 1 = mTreeNode.Level) then beginif not mIsTry then mTreeNode.MoveTo(vTreeNode, naAddChild);Exit;end;vTreeNode := vTreeNode.GetPrev;end;end;akBottom: beginvTreeNode := mTreeNode.GetNext;while Assigned(vTreeNode) do beginif vTreeNode = mTreeNode.GetNextSibling then beginif not mIsTry then vTreeNode.MoveTo(mTreeNode, naInsert);Exit;end else if (vTreeNode.Level = mTreeNode.Level) then beginif not mIsTry then mTreeNode.MoveTo(vTreeNode, naAddFirst);Exit;end else if vTreeNode.Level + 1 = mTreeNode.Level then beginif not mIsTry then mTreeNode.MoveTo(vTreeNode, naAddChildFirst);Exit;end;vTreeNode := vTreeNode.GetNext;end;end;akLeft: beginvTreeNode := mTreeNode.Parent;if Assigned(vTreeNode) then beginif not mIsTry then mTreeNode.MoveTo(vTreeNode, naInsert);Exit;end;end;akRight: beginvTreeNode := mTreeNode.GetNextSibling;if Assigned(vTreeNode) then beginif not mIsTry then mTreeNode.MoveTo(vTreeNode, naAddChildFirst);Exit;end;end;end;Result := False;end; { TreeNodeMove }///////End Source///////Begin Demoprocedure TForm1.TreeView1KeyDown(Sender: TObject; var Key: Word;Shift: TShiftState);beginif not (ssCtrl in Shift) then Exit;case Key ofVK_UP: TreeNodeMove(TTreeView(Sender).Selected, akTop);VK_DOWN: TreeNodeMove(TTreeView(Sender).Selected, akBottom);VK_LEFT: TreeNodeMove(TTreeView(Sender).Selected, akLeft);VK_RIGHT: TreeNodeMove(TTreeView(Sender).Selected, akRight);end;end;procedure TForm1.TreeView1GetSelectedIndex(Sender: TObject;Node: TTreeNode);beginCheckBox1.Checked := TreeNodeMove(TTreeView(Sender).Selected, akTop, True);CheckBox2.Checked := TreeNodeMove(TTreeView(Sender).Selected, akBottom, True);CheckBox3.Checked := TreeNodeMove(TTreeView(Sender).Selected, akLeft, True);CheckBox4.Checked := TreeNodeMove(TTreeView(Sender).Selected, akRight, True);end;///////End Demo----------------
    沉沦中..........