Dear Kang Opik,
TStringList itu menghendaki string untuk setiap elemennya. Jadi custom sort harus mengintegerkan dulu nilai dalam elemennya agar bisa disorting secara numerik. Kalau sorted biasa, akan disort secara alphabetik, di mana 11 akan lebih duluan muncul dibanding 2 pada sorting ascending / menaik. Solusinya, ubah dulu nilai string menjadi integer seperti pada contoh berikut:
1. New Project
2. Double klik di form
3. Replace even FormCreate berikut menjadi:
procedure Tform1.FormCreate(Sender: TObject);
function CustomSort(list: TStringList; index1, index2: integer): integer;
begin
if (StrToIntDef(list[index1], 0) > StrToIntDef(list[index2], 0)) then
Result := 1
else if (StrToIntDef(list[index1], 0) < StrToIntDef(list[index2], 0)) then
Result := -1
else
Result := 0;
end;
var
a: TStringList;
begin
a := TStringList.Create;
a.Add(’10’);
a.Add(‘1’);
a.Add(‘5’);
a.Add(‘3’);
a.Add(’11’);
a.Add(‘2’);
a.Add(‘6’);
ShowMessage(‘Sebelum disort : ‘ + #13#10 + a.Text);
a.CustomSort(@CustomSort);
ShowMessage(‘Setelah disort : ‘ + #13#10 + a.Text);
a.Free;
end;
Demikian, semoga ada pencerahan.