Вот только попробуйте после этого сказать, что не сортируется! =)
Код:
var
Form1: TForm1;
function CustomNumSort(List: TStringList; Index1, Index2: Integer): Integer;
....................
procedure TForm1.Button1Click(Sender: TObject);
var
SList: TStringList;
i: Integer;
begin
SList := TStringList.Create;
SList.Delimiter := ' ';
try
for i := 0 to Memo1.Lines.Count - 1 do
begin
SList.DelimitedText := Memo1.Lines.Strings[i];
StringGrid1.Rows[i].Delimiter := SList.Delimiter;
StringGrid1.Rows[i].DelimitedText := SList.DelimitedText;
end;
SortCols(); // отсортирует по возрастанию столбцы...
{ SortRows(); // ...или строки (раскомментируйте, если надо) }
finally
SList.Free;
end;
end;
procedure TForm1.SortCols;
var
SList: TStringList;
i: Integer;
begin
SList := TStringList.Create;
SList.Delimiter := '|';
try
for i := 0 to StringGrid1.ColCount - 1 do
begin
StringGrid1.Cols[i].Delimiter := '|';
SList.DelimitedText := StringGrid1.Cols[i].DelimitedText;
SList.CustomSort(CustomNumSort);
StringGrid1.Cols[i].DelimitedText := SList.DelimitedText;
end;
finally
SList.Free;
end;
end;
procedure TForm1.SortRows;
var
SList: TStringList;
i: Integer;
begin
SList := TStringList.Create;
SList.Delimiter := '|';
try
for i := 0 to StringGrid1.RowCount - 1 do
begin
StringGrid1.Rows[i].Delimiter := '|';
SList.DelimitedText := StringGrid1.Rows[i].DelimitedText;
SList.CustomSort(CustomNumSort);
StringGrid1.Rows[i].DelimitedText := SList.DelimitedText;
end;
finally
SList.Free;
end;
end;
function CustomNumSort(List: TStringList; Index1, Index2: Integer): Integer;
var
Value1, Value2: Integer;
begin
Value1 := StrToInt(List.Strings[Index1]);
Value2 := StrToInt(List.Strings[Index2]);
if Value1 < Value2 then Result := -1
else
if StrToInt(List.Strings[Index1]) > StrToInt(List.Strings[Index2]) then
Result := 1
else Result := 0;
end;