Показать сообщение отдельно
  #2  
Старый 03.05.2010, 18:51
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

А этот код тебе в принципе не подойдет, т.к. там исключать сложно, бо как используется готовый алгоритм сортировки. Либо менять код сборки/разборки строки. Проще свое написать.

Код:
procedure StringGridRowExchange(AStringGrid : TStringGrid; I1, I2 : Integer);
var
  I : Integer;
  S : String;
begin
  For I := 0 To AStringGrid.Cols-1 Do
    Begin
       S := AStringGrid.Cells[I,I1];
       AStringGrid.Cells[I,I1] := AStringGrid.Cells[I,I2];
       AStringGrid.Cells[I,I2] := S;
    End;
end;

procedure StringGridSort(AStringGrid : TStringGrid);
var
  I, J : Interger;
  S1, S2 : String;
begin
  For I := 0 To AStringGrid.Rows-2 Do
    For J := I+1 To AStringGrid.Rows-1 Do
      Begin
        S1 := AStringGrid.Cells[0,I];
        S1 := Copy(S1,Pos(' ',S1)+1,Length(S1));
        S2 := AStringGrid.Cells[0,J];
        S2 := Copy(S2,Pos(' ',S2)+1,Length(S2));
  
        // сравниваем без учета регистра, отрезав все до первого пробела.
        If S1 > S2 Then 
           StringGridRowExchange(I,J);
      End;
end;
Ответить с цитированием