Was ist aber mit all den ganzen Beispielen hier? Doch nichts?
Noch ein mal, auch wenn alle hier mit Beispielen kommen wie man ein StringList sortiert, in deinem Fall ist es Quatsch. So kann man Namen sortieren, aber nicht Daten. Natürlich kann man die Schreibweise der Daten dem Problem anpassen, aber das sollte man nicht. Füge der StringList Objekte mit Klar-Daten und sortiere diese anhand dieser Daten. Dann kannst du in dein StringList schreiben was du willst und wie du es willst.
Hier noch mal die komplette Sortierfunktion zu meinem Beispiel oben. Ich hab Luckies Sortierfunktion etwas angepaßt, sortiere aber nach Daten aus den Objekten. Die Strings der Items interessieren mich dabei nicht:
Delphi-Quellcode:
procedure LBSortieren(LB: TListBox);
var
Data1, Data2, DataTemp: TData;
Str1, Str2, StrTemp: String;
i, j: Integer;
begin
LB.Items.BeginUpdate;
for i := LB.Items.Count - 1 downto 1 do
begin
for j := 1 to i do
begin
Data1 := TData(LB.Items.Objects[j-1]);
Data2 := TData(LB.Items.Objects[j]);
if Data1.Datum > Data2.Datum then
begin
StrTemp := LB.Items[j];
DataTemp := TData(LB.Items.Objects[j]);
LB.Items[j] := LB.Items[j-1];
LB.Items.Objects[j] := LB.Items.Objects[j-1];
LB.Items[j-1] := StrTemp;
LB.Items.Objects[j-1] := DataTemp;
end;
end;
end;
LB.Items.EndUpdate;
end;
Sieht ähnlich aus wie eine normale Sortierung, hier werden aber die Daten aus dem Objekt verglichen.
Hier ein Beispile mit dem du es testen kannst. Prozedur 1 erzeugt 400 Einträge mit Daten und Texten, Prozedur 2 sortiert sie:
Delphi-Quellcode:
//Zufallsdaten generieren
procedure TForm1.Button1Click(Sender: TObject);
function ZufallsDatum: TDateTime;
begin
Result := EncodeDateTime(Random(109) + 1900, Random(12) + 1, Random(28) + 1,
Random(23) + 1, Random(59) + 1, Random(59) + 1, Random(100) + 1);
end;
const
x = 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed di';
var
i: Integer;
DT: TDateTime;
ZT: String;
begin
for i := 0 to 400 - 1 do
begin
DT := ZufallsDatum;
ZT := Copy(x, Random(40) + 1, Random(20) + 4); //ZufallsText
LBItemHinzufuegen(ListBox1, DT, DateTimeToStr(DT) + ' ' + ZT);
//hier eine etwas verschärfte Version
//LBItemHinzufuegen(ListBox1, DT, ZT + ' ' + DateTimeToStr(DT));
end;
end;
//Alles sortieren
procedure TForm1.Button2Click(Sender: TObject);
begin
LBSortieren(ListBox1);
end;