Beispiel mit Spalte 0 = Datum im gültigen Format, der Rest normale Zeichenketten.
Das geht sicher noch schöner.
Ist jetzt einfach nur aus einer existierenden
Unit rauskopiert und unnötiges Zeug wurde gelöscht. Ist also nicht auf Funktionalität getestet.
Delphi-Quellcode:
procedure TForm1.ListViewColumnClick(Sender: TObject; Column: TListColumn);
begin
ListViewColumnToSort := Column.Index;
end;
procedure TForm1.ListView1Compare(Sender: TObject; Item1, Item2: TListItem; Data: Integer; var Compare: Integer);
var
TextToSort1, TextToSort2: string;
begin
if ListViewColumnToSort = 0 then
begin
TextToSort1 := Item1.Caption;
TextToSort2 := Item2.Caption;
end
else
begin
TextToSort1 := Item1.SubItems[ListViewColumnToSort - 1];
TextToSort2 := Item2.SubItems[ListViewColumnToSort - 1];
end;
case (Sender as TListView).Columns[ListViewColumnToSort].Tag of
0: // DateTime
begin
Compare := 0;
if StrToDateTime(TextToSort1) > StrToDateTime(TextToSort2) then
Compare := Trunc(StrToDateTime(TextToSort1) - StrToDateTime(TextToSort2)) + 1
else if StrToDateTime(TextToSort1) < StrToDateTime(TextToSort2) then
Compare := Trunc(StrToDateTime(TextToSort1) - StrToDateTime(TextToSort2)) - 1;
end;
else // Strings
Compare := AnsiCompareText(TextToSort1, TextToSort2);
end;
end;