Вот, пожалуй, наипростейший способ.
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure SortCols;
procedure SortRows;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
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.Sort;
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.Sort;
StringGrid1.Rows[i].DelimitedText := SList.DelimitedText;
end;
finally
SList.Free;
end;
end;
end.
О том, чтобы количество введенных в Memo чисел совпадало с размерностью StringGrid'а, позаботьтесь сами.