我知道在OnDragDrop中写代码,目前可以实现取得原行的Index和目标行的Index,但是,怎么才能让原行插入到目标行之前呢??
目前的代码如下:
procedure TForm1.tListViewOutDragOver(Sender, Source: TObject; X,
  Y: Integer; State: TDragState; var Accept: Boolean);
begin
   if(Source.InheritsFrom(TListView)) then Accept := true;
end;procedure TForm1.tListViewOutDragDrop(Sender, Source: TObject; X,
  Y: Integer);
var
  SourceItem, DestItem: TListItem;
  SourceIndex, DestIndex: Integer;
begin
  SourceItem := tListViewOut.Selected;
  if Assigned(tListViewOut.GetItemAt(x,y)) then
  begin
    DestItem := tListViewOut.GetItemAt(x,y);
    SourceIndex := SourceItem.Index;
    DestIndex := DestItem.Index;
  end
  else begin
    DestItem := tListViewOut.Items.Item[tListViewOut.Items.Count-1];
    SourceIndex := SourceItem.Index;
    DestIndex := DestItem.Index;
  end;
  if SourceIndex = DestIndex then Exit;
  //插入改变行序代码     <---------------------------------这里不知道怎么写
end;

解决方案 »

  1.   

    procedure TForm1.tListViewOutDragDrop(Sender, Source: TObject; X, Y: Integer);
    var
      SourceItem, DestItem: TListItem;
      SourceIndex, DestIndex: Integer;
      TempItem:TListItem;
    begin
      SourceItem := tListViewOut.Selected;
      if Assigned(tListViewOut.GetItemAt(x,y)) then
      begin
        DestItem := tListViewOut.GetItemAt(x,y);
        SourceIndex := SourceItem.Index;
        DestIndex := DestItem.Index;
      end
      else begin
        DestItem := tListViewOut.Items.Item[tListViewOut.Items.Count-1];
        SourceIndex := SourceItem.Index;
        DestIndex := DestItem.Index;
      end;
      if SourceIndex = DestIndex then Exit;
    /////////////////////////////////////////////
        TempItem:=tListViewOut.Items.Insert(DestIndex);
        TempItem.Assign(SourceItem);
        SourceItem.Delete;
    ///////////////////////////////////////////
    end;