On Windows/Delphi I do sort most often AlphaNumerical like this:
function SortProc(List: TStringList; Index1, Index2: Integer): Integer;
begin
Result := CompareString(LOCALE_USER_DEFAULT, SORT_STRINGSORT or SORT_DIGITSASNUMBERS, PChar(List[Index1]), Length(List[Index1]), PChar(List[Index2), Length(List[Index2)) - CSTR_EQUAL;
end;
But never tried with Lazarus.
(above to sort a ListView)