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;