Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
Delphi 12 Athens
|
AW: CheckListBox auf- und absteigend sortieren
7. Nov 2011, 16:46
Zur Not in eine TStringlist kopieren, diese mit CustomSort sortieren und wieder zurückkopieren. Die Checked-Eigenschaft kannst Du dabei mit einem üblen Cast als Object hinterlegen, damit sie nicht verloren geht.
[edit] CBS_SORT? Nicht LBS_SORT? [/edit]
[edit2] Oder ohne TStringlist:
Delphi-Quellcode:
type
TSortFunc = function(List: TStrings; Index1, Index2: Integer): Integer;
function CompareASC(List: TStrings; Index1, Index2: Integer): Integer;
begin
Result := StrComp(PChar(List[Index1]), PChar(List[Index2]));
end;
function CompareDESC(List: TStrings; Index1, Index2: Integer): Integer;
begin
Result := - CompareASC(List, Index1, Index2);
end;
procedure QuickSort(L, R: Integer; List: TStrings; SCompare: TSortFunc);
var
I, J, P: Integer;
begin
repeat
I := L;
J := R;
P := (L + R) shr 1;
repeat
while SCompare(List, I, P) < 0 do Inc(I);
while SCompare(List, J, P) > 0 do Dec(J);
if I <= J then
begin
List.Exchange(I, J);
if P = I then
P := J
else if P = J then
P := I;
Inc(I);
Dec(J);
end;
until I > J;
if L < J then QuickSort(L, J, List, SCompare);
L := I;
until I >= R;
end;
Beispielaufruf:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
CheckListBox1.Items.BeginUpdate;
try
QuickSort(0, CheckListBox1.Items.Count - 1, CheckListBox1.Items, CompareASC);
finally
CheckListBox1.Items.EndUpdate;
end;
end;
[/edit2]
Detlef "Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
Geändert von DeddyH ( 7. Nov 2011 um 17:48 Uhr)
|