С TStringList я вызываю List.Sort, но порядок неправильный

Я работаю с Лазарем. У меня есть два TStringList, после сортировки я показываю их на экран. Но порядок неправильный. Я не могу определить, как это было неправильно.

Это снимок экрана, когда TStringList не отсортирован:

введите здесь описание изображения

После вызова FMover.AList.Sort и FMover.BList.Sort я показываю их на экране. Это скриншот после сортировки списков.

введите здесь описание изображения

Как видите, элемент '.../kam14.in' появился перед '.../kam1.in'. Процедура сортировки работает неправильно.

Это некоторая процедура, используемая в программе.

procedure TAddProblemForm.actRegexLoadExecute(Sender: TObject);
var
  ARegExpr, BRegExpr: TRegExpr;
  s: String;
  AExpr, BExpr: String;
  Form: TRegexOptionForm;
begin
  Form := TRegexOptionForm.Create(Self);

  if Form.Execute('in', 'out') = mrOK then
  begin
    ARegExpr:=TRegExpr.Create;
    BRegExpr:=TRegExpr.Create;
    FMover.Clear;

    ARegExpr.Expression := Form.AExpr;
    BRegExpr.Expression := Form.BExpr;
    AddSearchResult(FMover.List, SearchDir, true);

    for s in FMover.List do
    begin
      if ARegExpr.Exec(s) then
        FMover.AList.Add(s)
      else if BRegExpr.Exec(s) then
        FMover.BList.Add(s);
    end;

    // *******************
    actInvalidate.Execute;
    FMover.AList.Sort;
    FMover.BList.Sort;
    actInvalidate.Execute;
    // *******************

    ARegExpr.Free;
    BRegExpr.Free;
  end;

  Form.Free;
end; 

И другой

  procedure TAddProblemForm.actInvalidateExecute(Sender: TObject);
  var 
    s: String;
  begin
    ListBox1.Clear;
    ListBox2.Clear;

    for s in FMover.AList do
      ListBox1.Items.Add(s);

    for s in FMover.BList do
      ListBox2.Items.Add(s);

    Application.ProcessMessages;
  end;   

person kien_coi_1997    schedule 26.11.2013    source источник
comment
Посмотрите на это: stackoverflow.com/questions/15257746/   -  person    schedule 27.11.2013
comment
Большое спасибо, я понял, как это может быть неправильно. Но я не знаю, что реализует встроенный метод Sort. Еще раз спасибо.   -  person kien_coi_1997    schedule 27.11.2013
comment
Метод сортировки просто использует AnsiCompareText (или аналогичную процедуру для Unicode), чтобы определить, должно ли значение идти после или перед другим значением. Реализация сортировки — это просто простая быстрая сортировка. При необходимости можно переопределить проверку значения с помощью другой процедуры, ей просто нужно вернуть целое число, которое равно +ve, если A › B, -ve, если A ‹ B, или 0, если A = B в терминах порядка сортировки.   -  person Matt Allwood    schedule 27.11.2013
comment
Спасибо, Мэтт Олвуд, за ваш комментарий. Я успешно решил свою проблему. Я написал независимый метод для сравнения двух строк. И это сработало.   -  person kien_coi_1997    schedule 28.11.2013