Sortowanie liczb w listboxie

0

Siema. Mam w listbox wiele liczb. Ustawiłem parametr na sorted jednak to nie działa tak jak oczekiwałem bo chciałbym by posortowało np. tak"

1
2
3
7
9
11
18
22
56

jednak to posortuje mniej więcej tak (piszę z pamięci bo nie jestem przy kompilatorze);

1
11
18
2
22
3
56
7
9

Czyli patrzy na pierwszą cyfrę, a nie całą liczbę.

Co mogę zrobić? Proszę o pomoc

0
  1. zapisać je prawidłowo czyli z nieznaczącymi zerami
  2. http://www.swissdelphicenter.ch/en/showcode.php?id=1664
0

Najprościej to będzie zrobić chyba tak. Wprawdzie Misiekd mnie ubiegł z odpowiedzą, ale ten mój przykład powinien rozwiać wszelkie ewentualne wątpliwości początkującego.

function SortujRosnaco(List : TStringList; Index1, Index2 : Integer) : Integer;
var
  I1, I2 : integer;
begin
  if (TryStrToInt(List[Index1], I1)) and TryStrToInt(List[Index2], I2) then
  begin
    if I1 < I2 then
      Result := -1
    else
      if I1 > I2 then
        Result := 1
      else
        Result := 0;
  end
  else
  begin
    Result := AnsiCompareText(List[Index1], List[Index2]);
  end;
end;

procedure TForm1.Button1Click(Sender : TObject);
var
  SL : TStringList;
begin
  SL := TStringList.Create;
  try
    Listbox1.Sorted := False;
    SL.Assign(Listbox1.Items);
    SL.CustomSort(SortujRosnaco);
    Listbox1.Items.Assign(SL);
  finally
    SL.Free
  end;
end;
0

To działa idealnie. Dziękuję za pomoc!

1 użytkowników online, w tym zalogowanych: 0, gości: 1