![]() |
Problem beim Umsortieren v. ListView-Items in vsIcon-Ansicht
Hallo, wer weiß hier einen Rat? Ich haben eine ListView (SortType = stNone), die z.B. 8 Items in der vsIcon-Ansicht anzeigt. Wenn ich nun z.B. Item2 per Drag&Drop nach Position 5 verschiebe (Routine s. unten), so wird dieses Item immer am Ende der Items eingefügt (anstatt an Position 5)! Wenn ich danach aber in die vsReport-Ansicht wechsle, befindet sich das verschobene Item doch an der richtigen Stelle (an Position 5). Wieder zurück in der vsIcon-Ansicht ist das verschobene Item wieder an letzter Stelle!
Wie kann man nun in der vsIcon-Ansicht die gleiche Reihenfolge der Items wie in der vsReport-Ansicht herstellen, d.h. dass sich das verschobene Item an der richtigen Position 5 befindet? Hier ist der Code für das Drag&Drop innerhalb der ListView:
Delphi-Quellcode:
ListView.DragMode ist natürlich dmAutomatic.
procedure TMainForm.ListViewDragDrop(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, TSearchDirection(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; procedure TMainForm.ListViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin Accept := Sender = ListView; end; Ich habe die ListViewDragDrop-Routine im Debugger genau verfolgt: Das verschobene Item wird in der vsIcon-Ansicht tatsächlich an Position 5 eingefügt, aber als letztes Item angezeigt! |
Re: Problem beim Umsortieren v. ListView-Items in vsIcon-Ans
Hallo, ist Autoarrange auf True gesetzt?
Dann sollte mein vereinfacher Code funktionieren:
Delphi-Quellcode:
procedure TForm1.ListView1DragDrop(Sender, Source: TObject; X, Y: Integer);
var SelItem: TListItem; begin if Sender = Source then begin SelItem := TListView(Sender).Selected; If assigned(SelItem) then TListView(Source).Selected.SetPosition(Point(X,Y)); end; end; |
Re: Problem beim Umsortieren v. ListView-Items in vsIcon-Ans
Vielen Dank, diese Methode funktioniert wirklich! Jetzt muss ich nur noch den Code so umschreiben, dass dammit auch das Verschieben von mehreren Items auf einmal funktioniert. (Das war ja auch der Grund, weshalb ich den obigen Code verwendet habe). Schönen Tag noch!
|
Re: Problem beim Umsortieren v. ListView-Items in vsIcon-Ans
Fehlanzeige! Das Codebeispiel von toms verschiebt das Item zwar visuell, die tatsächliche interne Reihenfolge wird jedoch nicht verändert! Folgender Code, mit dem ich die Reihenfolge der Items NACH dem Verschieben eines Items abfrage, beweist dies:
Delphi-Quellcode:
for i := 0 to ListView.Items.Count - 1 do
s := s + ListView.Items[i].Caption + #13#10; Clipboard.AsText := s; |
AW: Problem beim Umsortieren v. ListView-Items in vsIcon-Ansicht
Hallo zusammen,
sorry, dass ich das alte Thema nochmals aufwärme, aber genau das Problem fällt mir nun auch auf die Füße: Per Drag&Drop kann man im vsIcon-Modus sehr bequem die Icons visuel verschieben, doch die internen Reihenfolge ändert sich nicht! Verschiebe ich beispielsweise das 5. Icon auf die erste Position ist der Index des Items immer noch 4 und nicht 0. Und die Eigenschaft Index ist auch noch schreibgeschützt! Kann mir jemand sagen wie man nach dem Verschieben den aktuellen Index eines Item herausbekommt? Ich wollte es schon über dessen graphische Position ermitteln. Doch je nach Fenstergröße und Einstellung kann ja das Spacing und die Anzahl Icons pro Zeile unterschiedlich sein. Auch hier im Forum lässt sich bezüglich dieses Problems nichts finden. Bin ich der Erste mit solch einem Problem? Gruß e-gon |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz