unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Shape1: TShape;
    procedure Button1Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure proc_obslugi(Sender:TObject);
    procedure proc_obslugi_podmenu(Sender:TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  MenuGlowne: TMainMenu;  //zadeklarowac modul Menus!
  opcje_menu_gl: array[0..2]of TMenuItem;
  polec_menu_gl0: array[0..2] of TMenuItem;
  polec_menu_gl1: array[0..5] of TMenuItem;
  polec_podmenu: array[0..2] of TMenuItem;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
  MenuGlowne:=TMainMenu.Create(Self);
  for i:=0 to 2 do opcje_menu_gl[i]:=TMenuItem.Create(Self);
  //opcje menu glownego
  opcje_menu_gl[0].Caption:='&Plik';
  opcje_menu_gl[1].Caption:='&Różne';
  opcje_menu_gl[2].Caption:='&Opcja_bez_poleceń';

  //dodanie opcji do menu glownego
  MenuGlowne.Items.Add(opcje_menu_gl);

  //polecenia opcji0
  for i:=0 to 2 do polec_menu_gl0[i]:=TMenuItem.Create(Self);
  polec_menu_gl0[0].Caption:='&Czytaj tekstowy';
  polec_menu_gl0[1].Caption:='Czytaj obraz';
  polec_menu_gl0[2].Caption:='&Koniec';

  //polecenia opcji1
  for i:=0 to 5 do polec_menu_gl1[i]:=TMenuItem.Create(Self);
  polec_menu_gl1[0].Caption:='&Zmiana koloru formularza';
  polec_menu_gl1[1].Caption:='-';
  polec_menu_gl1[2].Caption:='&Wyświetl figurę';
  polec_menu_gl1[3].Caption:='-';
  polec_menu_gl1[4].Caption:='&Nowy formularz';
  polec_menu_gl1[5].Caption:='Wyświetl &zegar';

  //podmenu dla polecenia o nr 2 opcji1 (Wyswietl figure)
  for i:=0 to 2 do polec_podmenu[i]:=TMenuItem.Create(Self);
  polec_podmenu[0].Caption:='prostokąt';
  polec_podmenu[1].Caption:='Elipsa';
  polec_podmenu[2].Caption:='Koło';

  //dodanie podmenu do polecenia o nr 2 opcji1
  polec_menu_gl1[2].Add(polec_podmenu);

  //dodanie polecen dla opcji0
  MenuGlowne.Items[0].Add(polec_menu_gl0);

  //dodanie polecen dla opcji1
  MenuGlowne.Items[1].Add(polec_menu_gl1);

end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  MenuGlowne.Free;
end;

procedure TForm1.proc_obslugi(Sender:TObject);
begin
  with Sender as TMenuItem do
  case MenuIndex of
   0: ShowMessage('Czytaj tekstowy');
   1: ShowMessage('Czytaj obrazek');
   2: Form1.Close;
  end;
end;
procedure TForm1.proc_obslugi_podmenu(Sender:TObject);
begin
  with Sender as TMenuItem do
  case MenuIndex of
   0: Shape1.Shape:=stRectangle;
   1: Shape1.Shape:=stEllipse;
   2: Shape1.Shape:=stCircle;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var i:integer;
begin
  for i:=0 to 2 do
  begin
    polec_menu_gl0[i].OnClick:=proc_obslugi;
    polec_podmenu[i].OnClick:=proc_obslugi_podmenu;
  end;

end;

end.
