Hallo,
ich benutze folgenden Code um per Drag and Drop die Items einer ListView zu verschieben. Also zum Beispiel das erste mit dem letzten per Maus auszutauschen:
Delphi-Quellcode:
//ListView OnDragDrop
procedure TListViewForm.ListView1DragDrop(Sender, Source: TObject; X, Y: Integer) ;
var
currentItem, nextItem, dragItem, dropItem : TListItem;
begin
if Sender = Source then
begin
with TListView(Sender) do
begin
dropItem := GetItemAt(X, Y) ;
currentItem := Selected;
while currentItem <> nil do
begin
nextItem := GetNextItem(currentItem, SdAll, [IsSelected]) ;
if Assigned(dropItem) then
dragItem := Items.Insert(dropItem.Index)
else
dragItem := Items.Add;
dragItem.Assign(currentItem) ;
currentItem.Free;
currentItem := nextItem;
end;
end;
end;
end;
//ListView OnDragOver
procedure TListViewForm.ListView1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean) ;
begin
Accept := Sender = ListView1;
end;
Das funktioniert auch alles super - so lange die ListView keine Checkboxen enthält. Sobald die Checkboxen aktiviert sind kommt es zu einem "Index Out Of Bounds" Fehler.
Ist das ein Bug von Delphi oder müsste der Code irgendwie angepasst werden?
Vielen Dank