//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Menus.hpp> // WAŻNE! - trzeba dodać
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
private: // User declarations
// zdarzenia OnClick dla różnych pozycji MainMenu
void __fastcall OpenClick(TObject *Sender);
void __fastcall SaveClick(TObject *Sender);
void __fastcall CopyClick(TObject *Sender);
void __fastcall SubClick(TObject *Sender);
void __fastcall Sub2Click(TObject *Sender);
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include <memory> // WAŻNE! - tutaj ze względu na sposób tworzenia TMenuItem trzeba dodać
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
TMainMenu *MainMenu1 = new TMainMenu(this);
std::auto_ptr<TMenuItem> Item1(new TMenuItem(NULL));
Item1->Caption = "Plik";
MainMenu1->Items->Add(Item1.release());
std::auto_ptr<TMenuItem> Item2(new TMenuItem(NULL));
Item2->Caption = "Otwórz";
MainMenu1->Items->Items[0]->Add(Item2.release());
MainMenu1->Items->Items[0]->Items[0]->OnClick = OpenClick;
std::auto_ptr<TMenuItem> Item3(new TMenuItem(NULL));
Item3->Caption = "Zapisz";
MainMenu1->Items->Items[0]->Add(Item3.release());
MainMenu1->Items->Items[0]->Items[1]->OnClick = SaveClick;
/**/
std::auto_ptr<TMenuItem> Item1_1(new TMenuItem(NULL));
Item1_1->Caption = "Edycja";
MainMenu1->Items->Add(Item1_1.release());
std::auto_ptr<TMenuItem> Item2_1(new TMenuItem(NULL));
Item2_1->Caption = "Kopjuj";
MainMenu1->Items->Items[1]->Add(Item2_1.release());
MainMenu1->Items->Items[1]->Items[0]->OnClick = CopyClick;
std::auto_ptr<TMenuItem> Item2_2(new TMenuItem(NULL));
Item2_2->Caption = "Opcje";
MainMenu1->Items->Items[1]->Add(Item2_2.release());
std::auto_ptr<TMenuItem> Item2_2s(new TMenuItem(NULL));
Item2_2s->Caption = "Submenu 1";
MainMenu1->Items->Items[1]->Items[1]->Add(Item2_2s.release());
MainMenu1->Items->Items[1]->Items[1]->Items[0]->OnClick = SubClick;
std::auto_ptr<TMenuItem> Item2_2s2(new TMenuItem(NULL));
Item2_2s2->Caption = "Submenu 2";
MainMenu1->Items->Items[1]->Items[1]->Add(Item2_2s2.release());
MainMenu1->Items->Items[1]->Items[1]->Items[1]->OnClick = Sub2Click;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::OpenClick(TObject *Sender)
{
ShowMessage("Wybrano polecenie 'Otwórz'");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SaveClick(TObject *Sender)
{
ShowMessage("Wybrano polecenie 'Zapisz'");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::CopyClick(TObject *Sender)
{
ShowMessage("Wybrano polecenie 'Kopiuj'");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SubClick(TObject *Sender)
{
ShowMessage("Wybrano polecenie 'Submenu 1'");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Sub2Click(TObject *Sender)
{
ShowMessage("Wybrano polecenie 'Submenu 2'");
}
//---------------------------------------------------------------------------
mi chodzi o takie rozwiązanie że wszystkie okienka wysyłają do jednej funkcji
TMenuItem *n;
n=new TMenuItem(MainMenu1->Components[0]);
String napis="pozycja dynamiczna";
int k=random(100);
napis=napis+IntToStr(k);
n->OnClick=CClick;
n->Caption=napis;
MainMenu1->Items[13].Add(n);
void __fastcall TForm2::CClick(TObject *Sender)
{
ShowMessage((reinterpret_cast<TMenuItem *>(Sender))->Caption);
}
Powrót do Ogólne problemy z programowaniem
Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 2 gości