@Zeref:
Ein Weihnachtsgeschenk für dich:
Delphi-Quellcode:
PROCEDURE SortListBoxBubbleSort(List:TStrings; Dsc:Boolean);
FUNCTION Compare(
const A,B:
String):Integer;
begin
Result:=Pos('
',A)-Pos('
',B);
if Result=0
then Result:=CompareStr(A,B);
if Dsc
then Result:=-Result;
end;
var I,First,Last:Integer; Sorted:Boolean; H:
String;
begin
List.BeginUpdate;
First:=0;
Last:=List.Count-1;
repeat
Dec(Last);
Sorted:=true;
for I:=First
to Last
do
if Compare(List[I],List[I+1])>0
then begin
Sorted:=false;
H:=List[I];
List[I]:=List[I+1];
List[I+1]:=H;
end;
until Sorted;
List.EndUpdate;
end;
Aufruf:
SortListBoxBubbleSort(ListBox1.Items,True);
Der zweite Parameter gibt an, ob die Liste aufsteigend (False) oder absteigend sortiert wird (True).
Achtung:
Das funktioniert nur, wenn alle Einträge mit einer vorzeichenlosen Ganzzahl ohne führende 0 beginnen und dieser Zahl ein Blank folgt.
Die Compare Funktion gibt 0 zurück wenn A = B ist, einen positiven Wert wenn A > B ist und einen negativen Wert, wenn A < B ist.
Wenn die Liste nur wenig Einträge hat (200 oder so) dann sollte die obige Version OK sein.
Bei mehr Einträgen hier die Quicksort-Version:
Delphi-Quellcode:
PROCEDURE SortListBoxQuickSort(List:TStrings; Dsc:Boolean);
FUNCTION Compare(
const A,B:
String):Integer;
begin
Result:=Pos('
',A)-Pos('
',B);
if Result=0
then Result:=CompareStr(A,B);
if Dsc
then Result:=-Result;
end;
var M,H:
String;
PROCEDURE QSort(First,Last:Integer);
var I,J:Integer;
begin
I:=First;
J:=Last;
M:=List[(First+Last)
shr 1];
repeat
while Compare(List[I],M)<0
do Inc(I);
while Compare(List[J],M)>0
do Dec(J);
if I<=J
then begin
H:=List[I];
List[I]:=List[J];
List[J]:=H;
Inc(I);
Dec(J);
end;
until i>j;
if J>First
then QSort(First,J);
if I<Last
then QSort(I,Last);
end;
begin
List.BeginUpdate;
QSort(0,List.Count-1);
List.EndUpdate;
end;