CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Jak odczytaj nazwę obiektu z którego wywołano menu PopupMenu
Strona 1 z 1

Jak odczytaj nazwę obiektu z którego wywołano menu PopupMenu

Nowy postNapisane: czwartek, 8 grudnia 2011, 16:08
przez mate006
Witam

Tworze dynamicznie obiekty i przypisuje im dynamicznie PopupMenu, moim problemem jest to jak odczytać obiekt z którego wywołano PopupMenu, już od dłuższego czasu szukałem na googlach i sam próbowałem coś tworzyć jednak nie udało mi się. Zna ktoś może jakiś sposób na to?

Re: Jak odczytaj nazwę obiektu z którego wywołano menu PopupMenu

Nowy postNapisane: czwartek, 8 grudnia 2011, 16:14
przez Corvis
Chodzi ci jak ktoś kliknie w pozycje na liście PoupMenu żeby pokazało jaki obiekt to wywołał ?? Jeżeli tak to masz tam *Sender. Jeżeli dobrze rozumiem oczywiście.

Ps. Po co tak robić ??

Re: Jak odczytaj nazwę obiektu z którego wywołano menu PopupMenu

Nowy postNapisane: czwartek, 8 grudnia 2011, 17:02
przez Cyfrowy Baron
Pokaż w jaki sposób przypisujesz do tworzonych dynamicznie obiektów zdarzenie OnClick.

Zapoznaj się z poradą: ► patrz serwis: Cyfrowy Baron dział: teoria -> RZUTOWANIE TYPÓW, PRZYPISANIE POLIMORFICZNE.

Re: Jak odczytaj nazwę obiektu z którego wywołano menu PopupMenu

Nowy postNapisane: czwartek, 8 grudnia 2011, 17:23
przez mate006
PopupMenu jest ustawiony na formie on nie jest tworzony dynamicznie tylko jest przypisywany do obiektu tworzonego dynamicznie.

Przypuśćmy że mam obiekt TImage klikam na nim PPM wywołując PopupMenu po kliknięciu na nim wyskakuje mi formularz, no i potrzebuje do tego formularza pewne dane wysłać które są zapisane w obiekcie TImage, a pobrać je muszę po kliknięciu na PopupMenu przed wyświetleniem formularza. Próbowałem z Senderem jednak bezskutecznie.

Chodzi tylko o to by odczytać nazwę obiektu który go wywołał resztę już sobie zrobię.

Re: Jak odczytaj nazwę obiektu z którego wywołano menu PopupMenu

Nowy postNapisane: czwartek, 8 grudnia 2011, 18:03
przez Cyfrowy Baron
mate006 napisał(a): no i potrzebuje do tego formularza pewne dane wysłać które są zapisane w obiekcie TImage, a pobrać je muszę po kliknięciu na PopupMenu przed wyświetleniem formularza.


To się nie trzyma kupy. Jakie dane możesz mieć zapisane w TImage?

Jak rozumiem masz kilka obiektów Image, a to, że są tworzone dynamicznie nie ma już znaczenia. Wykorzystujesz jeden Popup do obsługi wszystkich Image i chcesz coś odczytać z tych Image w zależności od tego w którym Image wywołano Popup.
To proste zadanie:

KOD cpp:     UKRYJ  
void __fastcall TForm1::Kliknijmni1Click(TObject *Sender) /* zdarzenie OnClick dla elementu PopupMenu1 */
{
 TComponent *pComponent = PopupMenu1->PopupComponent; /* sprawdza z którego komponentu wywołano zdarzenie */

 String sName = dynamic_cast<TImage *>(pComponent)->Name; /* pobiera nazwę komponentu */

 ShowMessage( "Kliknięto w obiekt: " + sName );
}
Mam nadzieję, że kod jest zrozumiały, jeżeli nie to zapoznaj się z poradą: ► patrz serwis: Cyfrowy Baron teoria -> RZUTOWANIE TYPÓW, PRZYPISANIE POLIMORFICZNE.

Re: Jak odczytaj nazwę obiektu z którego wywołano menu PopupMenu

Nowy postNapisane: czwartek, 8 grudnia 2011, 19:36
przez mate006
No i o to mi chodziło Dzięki Baronie

P.S.
Kupy się nie trzyma bo to był przykład.

Re: Jak odczytaj nazwę obiektu z którego wywołano menu PopupMenu

Nowy postNapisane: środa, 24 lutego 2021, 16:19
przez mate006
Witam

Mam jeszcze jeden problem, a mianowicie mam dynamicznie tworzone TButton o różnej nazwie z ustawieniami

KOD cpp:     UKRYJ  
Button1->Style = bsSplitButton;
Button1->DropDownMenu = MenuOpcje;  // To jest PopupMenu


i po kliknięciu na którejś opcji z MenuOpcje

potrzebuje odczytać z jakiego TButton zostało wywołane zdarzenie. To podane przez Cyfrowego Barona nie działa w tym przypadku

Re: Jak odczytaj nazwę obiektu z którego wywołano menu PopupMenu

Nowy postNapisane: środa, 24 lutego 2021, 17:38
przez Mironas
Utwórz zmienną globalną:
KOD cpp:     UKRYJ  
private:
  String sBttnName;
 

Pod każdy Button podłącz zdarzenie DropDownClick i wpisz tam
KOD cpp:     UKRYJ  
sBttnName = dynamic_cast<TButton*>(Sender)->Name;

A w zdarzeniu OnClick każdej pozycji popmenu:
KOD cpp:     UKRYJ  
ShowMessage(sBttnName);

Re: Jak odczytaj nazwę obiektu z którego wywołano menu PopupMenu

Nowy postNapisane: czwartek, 25 lutego 2021, 11:00
przez polymorphism
Utwórz zmienną globalną:

Gwoli ścisłości, to nie jest zmienna globalna, tylko pole klasy. Warto być tutaj precyzyjnym, bo w programowaniu obiektowym powinno się unikać zmiennych globalnych (często na rzecz pól klasy).

Re: Jak odczytaj nazwę obiektu z którego wywołano menu PopupMenu

Nowy postNapisane: czwartek, 25 lutego 2021, 13:36
przez Mironas
polymorphism napisał(a):o nie jest zmienna globalna, tylko pole klasy

Purysta ;)
Krakowskim targiem: zmienna globalna w obrębie klasy TForm1.