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

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

dział ogólny

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

Nowy postprzez mate006 » czwartek, 8 grudnia 2011, 16:08

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?
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: Jak odczytaj nazwę obiektu z którego wywołano menu PopupMenu

Nowy postprzez Corvis » czwartek, 8 grudnia 2011, 16:14

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ć ??
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows 7Chrome

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

Nowy postprzez Cyfrowy Baron » czwartek, 8 grudnia 2011, 17:02

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.
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: Jak odczytaj nazwę obiektu z którego wywołano menu PopupMenu

Nowy postprzez mate006 » czwartek, 8 grudnia 2011, 17:23

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ę.
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: Jak odczytaj nazwę obiektu z którego wywołano menu PopupMenu

Nowy postprzez Cyfrowy Baron » czwartek, 8 grudnia 2011, 18:03

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.

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: Jak odczytaj nazwę obiektu z którego wywołano menu PopupMenu

Nowy postprzez mate006 » czwartek, 8 grudnia 2011, 19:36

No i o to mi chodziło Dzięki Baronie

P.S.
Kupy się nie trzyma bo to był przykład.
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: Jak odczytaj nazwę obiektu z którego wywołano menu PopupMenu

Nowy postprzez mate006 » środa, 24 lutego 2021, 16:19

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
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
    WindowsFirefox

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

Nowy postprzez Mironas » środa, 24 lutego 2021, 17:38

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);
Avatar użytkownika
Mironas
Programista I
Programista I
 
Posty: 427
Dołączył(a): poniedziałek, 2 stycznia 2012, 19:02
Podziękował : 17
Otrzymał podziękowań: 61
System operacyjny: Windows 10
Kompilator: C++Builder 10.3 Rio
TMS Components Pack
Gadu Gadu: 0
    WindowsChrome

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

Nowy postprzez polymorphism » czwartek, 25 lutego 2021, 11:00

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).
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows 7Firefox

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

Nowy postprzez Mironas » czwartek, 25 lutego 2021, 13:36

polymorphism napisał(a):o nie jest zmienna globalna, tylko pole klasy

Purysta ;)
Krakowskim targiem: zmienna globalna w obrębie klasy TForm1.
Avatar użytkownika
Mironas
Programista I
Programista I
 
Posty: 427
Dołączył(a): poniedziałek, 2 stycznia 2012, 19:02
Podziękował : 17
Otrzymał podziękowań: 61
System operacyjny: Windows 10
Kompilator: C++Builder 10.3 Rio
TMS Components Pack
Gadu Gadu: 0
    WindowsChrome


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Google [Bot] i 2 gości