Erweitertes Sortieren einer ListView
Hi,
Ich habe den Beitrag in der Code-Lib zum Sortieren einer ListView gesehen und gemerkt, das sich dies viel einfacher und vor allem ohne den Gebrauch anderer Variablen außerhalb der ListView realisieren lässt (vorteilhaft, wenn mann für viele ListViews eine Sortieren-Funktion einbauen will). Außerdem fehlte in dem Code der Code-Lib eine Sicherheitskontrolle, ob der entsprechende SubItems Eintrag überhaupt vorhanden ist! Der Code den ich geschrieben habe arbeitet mit der Tag-Eigenschaft der ListView, wobei negative Werte eine umkehrung der Sortier-Reihenfolge bewirken.
Delphi-Quellcode:
procedure TForm1.ListView1ColumnClick(Sender: TObject; Column: TListColumn);
begin If TListView(Sender).Tag = (Column.Index + 1) then TListView(Sender).Tag := - (Column.Index + 1) else TListView(Sender).Tag := (Column.Index + 1); TListView(Sender).AlphaSort; end; procedure TForm1.ListView1Compare(Sender: TObject; Item1, Item2: TListItem; Data: Integer; var Compare: Integer); var SortData1, SortData2 : String; ColIndex : Integer; Ascending : Boolean; begin ColIndex := TListView(Sender).Tag; If ColIndex < 0 then begin Ascending := true; ColIndex := -ColIndex; end else Ascending := false; dec(ColIndex); case ColIndex of // Zum sortieren von besonderen Spalten (nur ein Beispiel): MySpecialRowIndex : Compare := MySpecialCompare(Item1, Item2); else If ColIndex = 0 then SortData1 := Item1.Caption else If (Item1.SubItems.Count >= ColIndex - 1) then SortData1 := Item1.SubItems[ColIndex - 1] else SortData1 := ''; If ColIndex = 0 then SortData2 := Item2.Caption else If (Item2.SubItems.Count >= ColIndex - 1) then SortData2 := Item2.SubItems[ColIndex - 1] else SortData2 := ''; Compare := CompareText(SortData1, SortData2); end; If Ascending then Compare := - Compare; end; |
AW: Erweitertes Sortieren einer ListView
Ich habe den Code noch etwas ausgebessert und die Möglichkeit zum speziellen Sortieren gewisser Spalten hinzugefügt (z.B. Integer-Spalten etc.)
MFG Björn Zeutzheim |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:48 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