@Codix32
Ich hab hier noch einen weiteren Ansatz (Code ist ungeprüft, sollte aber funktionieren):
Delphi-Quellcode:
type
TData = class
Datum: TDateTime;
DatumStr: String;
end;
procedure LBItemHinzufuegen(LB: TListBox; Datum: TDateTime; Str: String);
var
Data: TData;
begin
Data := TData.Create;
Data.Datum := Datum;
Data.DatumStr := FormatDateTime('yyyy.mm.dd hh:mm:ss', Datum);
LB.Items.AddObject(Str, Data);
end;
procedure LBItemLoeschen(LB: TListBox; Index: Integer);
var
Data: TData;
begin
Data := TData(LB.Items.Objects[Index]);
Data.Free;
LB.Items.Delete(Index);
end;
procedure LBAllesLoeschen(LB: TListBox);
var
Data: TData;
i: Integer;
begin
for i := LB.Items.Count - 1 downto 0 do
begin
Data := TData(LB.Items.Objects[i]);
Data.Free;
LB.Items.Delete(i);
end;
end;
procedure LBSortieren(LB: TListBox);
var
Data: TData;
i: Integer;
s: String;
begin
for i := 0 to LB.Items.Count - 1 do
begin
Data := TData(LB.Items.Objects[i]);
s := Data.DatumStr; // s enthält den String zum sortieren
// im Data.DatumStr und Data.Datum befinden sich jetzt das Datum als Sting
// und als Datum. Diese Werte sind unabhängig von dem Text-Inhalt in Items[i],
// können also eine beliebige Formatierung haben, also auch eine die eine
// alphabetische Sortierung erleichtet.
// ... hier die eigene Sortier-Routine
end;
end;
Der Unterschied hier ist, daß du hier die Daten noch zusätzlich als Objekt an die Items heftest. Bei der Sortierung beachtest du dann die Texte in den Items nicht und sortierst anhand der Daten im Objekt. Der Vorteil ist, da0 du das Datum im Item String so schreiben kannst wie du willst. Warum? Weil es nicht bei der Sortierung beachtet wird.
EDIT:
In Prozedur LBItemLoeschen eine vergessene Zeile hinzugefügt.