unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids;

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    ListBox1: TListBox;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Sortuj_tabele(kol1,kol2:integer;rosnaco:boolean);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
//parametry kol1 - kolumna w/g ktorej się sortuje, kol2 pozostała kolumna
procedure TForm1.Sortuj_tabele(kol1,kol2:integer;rosnaco:boolean);
var i,nr_spacji: integer;
begin
    Listbox1.Clear;
    //z tabeli do listy
    with Stringgrid1 do
     for i:=1 to Rowcount-1 do
      Listbox1.Items.Add(Cells[kol1,i]+' '+Cells[kol2,i]);

    Listbox1.Sorted:=true;   //sortowanie elementów listy - wierszy tabeli
    //z listy do tabeli
    with Stringgrid1 do
    for i:=1 to Rowcount-1 do
    begin
      nr_spacji:=Pos(' ',Listbox1.Items[i-1]);
      if rosnaco=true then
      begin
        //sortowanie rosnące
        Cells[kol1,i]:=Copy(Listbox1.Items[i-1],0,nr_spacji-1);
        Cells[kol2,i]:=Copy(Listbox1.Items[i-1],nr_spacji+1,Length(Listbox1.Items[i-1]));
      end
      else
      begin
        //sortowanie malejące
        Cells[kol1,Rowcount-i]:=Copy(Listbox1.Items[i-1],0,nr_spacji-1);
        Cells[kol2,Rowcount-i]:=Copy(Listbox1.Items[i-1],nr_spacji+1,Length(Listbox1.Items[i-1]));
      end;
    end;
end;

//wypelnij tabele
procedure TForm1.Button1Click(Sender: TObject);
var i,j:integer;
begin
   with Stringgrid1 do
   begin
      Cells[0,0]:='Napisy';
      Cells[1,0]:='Liczby';
   for i:=1 to Rowcount-1 do
   begin
      Cells[1,i]:=Char(48+Random(9))+CHar(48+Random(9));   //losowe liczby 0-99
      Cells[0,i]:=Char(65+Random(26))+Char(65+Random(26))+Char(65+Random(26)); //losowe dwuliterowe łańcuchy
   end;
   end;
end;

//malejaco w/g napisów
procedure TForm1.Button2Click(Sender: TObject);
begin
  Sortuj_tabele(0,1,false);
end;

//rosnąco w/g napisów
procedure TForm1.Button3Click(Sender: TObject);
begin
  Sortuj_tabele(0,1,true);
end;

//malejaco w/g liczb
//lista sortuje łańcuch, więc aby liczby zostały prawidłowo posortowane
//to muszą mieć tyle samo cyfr, np. 01,02,25, itd.
procedure TForm1.Button4Click(Sender: TObject);
begin
  Sortuj_tabele(1,0,false);
end;

//rosnąco w/g liczb
procedure TForm1.Button5Click(Sender: TObject);
begin
  Sortuj_tabele(1,0,true);
end;

end.
