Einzelnen Beitrag anzeigen

Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: CheckListBox auf- und absteigend sortieren

  Alt 7. Nov 2011, 15: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 16:48 Uhr)
  Mit Zitat antworten Zitat