Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Listview Items mit Checkboxen(!) mit Drag&Drop rearrangieren (https://www.delphipraxis.net/139836-listview-items-mit-checkboxen-mit-drag-drop-rearrangieren.html)

martinf16 6. Sep 2009 17:07


Listview Items mit Checkboxen(!) mit Drag&Drop rearrangi
 
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

Helmi 6. Sep 2009 17:24

Re: Listview Items mit Checkboxen(!) mit Drag&Drop rearr
 
Hallo,

ich verwende in einer Anwendung von mir haar genau den gleichen Code wie du ihn hast (gelle, auch von den Schweizern oder? :-) )
und hab keine Probleme damit.
Ich habe auch eine Listview mit CheckBoxen

martinf16 6. Sep 2009 18:00

Re: Listview Items mit Checkboxen(!) mit Drag&Drop rearr
 
Richtig, richtig, der Code taucht auch immer wieder in abgewandelter Form irgendwo auf..

Ich habs jetzt noch einmal getestet in einer ganz neuen Anwendung, aber da funktionierts plötzlich. Anscheinend gibts bei mir im Programm irgendwelche anderen Wechselwirkungen, das wird eine lange Nacht! ;)


Edit:
Ich habe die Lösung gefunden. Für alle, die es interessiert, weil sie ein ähnliches Problem haben:

Ich habe den Click auf die CheckBoxen mit folgendem Ansatz abgefangen:

http://delphi.about.com/od/delphitip...iewchecked.htm

Das verträgt sich anscheinend nicht mit dem Drag and Drop, da sich dabei offenbar die Items kurzfristig in der ListView ändern - das sieht man auch in dem Moment, wenn die Exception kommt: Das verschiebende Item scheint für einen Moment doppelt zu existieren.

Wenn ihr so etwas auch schon mal hattet, könnt ihr ruhig schreiben, wie ihr das Problem gelöst habt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:31 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz