Показать сообщение отдельно
  #6  
Старый 17.04.2009, 10:06
Nyctos Kasignete Nyctos Kasignete вне форума
Активный
 
Регистрация: 29.03.2009
Сообщения: 300
Репутация: 94
По умолчанию

Вот, пожалуй, наипростейший способ.
Код:
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'а, позаботьтесь сами.
Ответить с цитированием