Einzelnen Beitrag anzeigen

martinf16

Registriert seit: 26. Aug 2007
99 Beiträge
 
Turbo Delphi für Win32
 
#1

Listview Items mit Checkboxen(!) mit Drag&Drop rearrangi

  Alt 6. Sep 2009, 17:07
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
  Mit Zitat antworten Zitat