Dynamiczne dodawanie elementów do PopupMenu

problemy z funkcjonowaniem bibliotek, komponentów itp.

Dynamiczne dodawanie elementów do PopupMenu

Nowy postprzez mate006 » wtorek, 2 marca 2010, 14:16

Witam

Od kilku dni już się męczę z aby dynamicznie dodawać elementy do PopupMenu,

Znalazłem w googlach coś na ten temat ale w Delphi

Kod: Zaznacz cały
    procedure TForm1.FormCreate(Sender: TObject);
    var

        elementy, :TMenuItem; // element menu

    begin

        elementy:=TMenuItem.Create(MainMenu1); // utworzenie menu "Elementy"
        elementy.Caption:='&Elementy';
        PopupMenu1.Items.Add(elementy); // dodanie menu Elementy do głównego menu

    end;


Ale niestety nie działa po przeróbkach w C++

ProszÄ™ o pomoc
Avatar użytkownika
mate006
Intelektryk
Intelektryk
 
Posty: 145
Dołączył(a): wtorek, 2 marca 2010, 14:12
PodziÄ™kowaÅ‚ : 7
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
System operacyjny: Windows 7 Premium 64
Kompilator: Embarcadero® C++Builder® XE
Gadu Gadu: 0
    Windows 7Firefox

Re: Dynamiczne dodawanie elementów do PopupMenu

Nowy postprzez Cyfrowy Baron » wtorek, 2 marca 2010, 14:33

TMenuItem czyli element PopupMenu czy MainMenu tworzysz dokładnie tak samo jak każdy inny komponent i tak samo nim zarządzasz:

Kod: Zaznacz cały
TMenuItem *myMenu = new TMenuItem(PopupMenu1);;
myMenu->Caption = "Zapisz";
PopupMenu1->Items->Add(myMenu);


oczywiście jak zrobisz delete myMenu to element zostanie usunięty.
Kolejna sprawa to stworzenie zdarzenia OnClick dla takiego elementu. Tworzy się je dokładnie tak samo, jak dla innych komponentów i podłącza po element TMenuItem. Czyli potrzeba jest deklaracja funcji-zdarzenia w pliku nagłówkowym i definicja w pliku źródłowym:

plik nagłówkowy:
Kod: Zaznacz cały
private:   
   void __fastcall ZapiszClick(TObject *Sender);


w pliku źródłowym:
Kod: Zaznacz cały
void __fastcall TForm1::ZapiszClick(TObject *Sender)
{
// jakieÅ› zadanie
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
TMenuItem *myMenu = new TMenuItem(PopupMenu1);
myMenu->Caption = "Zapisz";
myMenu->Name = "Zapisz1";
myMenu->OnClick = ZapiszClick;
PopupMenu1->Items->Add(myMenu);
}


Oprócz PopupMenu1->Items->Add(TMenuItem*) masz jeszcze Insert(TMenuItem*), poczytaj w pomocy do tego komponentu.

Za ten post autor Cyfrowy Baron otrzymał podziękowanie od:
mate006
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: Dynamiczne dodawanie elementów do PopupMenu

Nowy postprzez mate006 » wtorek, 2 marca 2010, 16:12

Dzięki wielkie, po prostu źle przekształciłem z Delphi, ale już wiem o co chodzi
Pozdrawiam
Avatar użytkownika
mate006
Intelektryk
Intelektryk
 
Posty: 145
Dołączył(a): wtorek, 2 marca 2010, 14:12
PodziÄ™kowaÅ‚ : 7
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
System operacyjny: Windows 7 Premium 64
Kompilator: Embarcadero® C++Builder® XE
Gadu Gadu: 0
    Windows 7Firefox

PopupMenu - OnClick - kilka pozycji obsługuje jedna funkcja

Nowy postprzez Jacek26jw » piÄ…tek, 27 sierpnia 2010, 08:36

Witam, mam pytanie o funkcję obsługującą OnClick.

Przykład:
Dodaje pozycje do popup menu. Potem chce odczytać indeks klikniętej pozycji i ją usunąc z popup. Jak to zrobic?
Nie chce tworzyć dla każdej pozycji nowej funkcji OnClick, tylko żeby obsługiwała ją jedna funkcja, której podaje się indeks klikniętej pozycji.
Avatar użytkownika
Jacek26jw
Bladawiec
Bladawiec
 
Posty: 4
Dołączył(a): czwartek, 17 lipca 2008, 12:24
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    Windows XPFirefox

Re: Dynamiczne dodawanie elementów do PopupMenu

Nowy postprzez Cyfrowy Baron » piÄ…tek, 27 sierpnia 2010, 10:22

Rozwiązaniem jest polimorfizm. Patrz serwis Cyfrowy Baron dział: teoria -> Rzutowanie typów, przypisanie polimorficzne.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Biblioteki i komponenty

Kto przeglÄ…da forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 3 gości