[Gelöst] Popup Menu auf dynamisch erzeugtem BitButton auswerten



  • Hallo Leute
    Ich habe auf meinem Form mehrere BitButtons dymamisch erzeugt.
    Den BitBtns habe ich in einer Schleife aufsteigende Werte in der Tag Eigenschaft gegeben:

    myBtn->Tag=i;
    

    Ausserdem habe ich allen die gleiche Routine für Rechtsklick zugewiesen:

    myBtn->PopupMenu=PopupMenu1;
    

    Nun wird bei Rechtsklick auf einen der BitBtns

    void __fastcall TForm2::PopupMenu1Popup(TObject *Sender)
    {
    TBitBtn *btn2 = dynamic_cast<TBitBtn *>(Sender);
    aktTag=btn2->Tag;
    }
    

    aufgerufen.
    Wie man sieht, versuche ich auf die Tag Eigenschaft des Senders (BitBtn) zuzugreifen.
    Ich bekomme aber zur Laufzeit bei Rechtsklick auf einen der BitBtns folgende Zugriffsverletzung:

    Lesen von Adresse 0000000C.

    In der Routine für Linksklick funktioniert der dynamic_cast aber einwandfrei.
    Ich verstehe nicht, warum es dort klappt und hier nicht.
    Kann mir jemand einen Tipp geben?
    Danke



  • Das liegt daran, das der Sender eben kein TBitBtn Objekt ist, sondern ein TPopupMenu Objekt.



  • Erstmal Danke für deine Hilfe.

    Das liegt daran, das der Sender eben kein TBitBtn Objekt ist, sondern ein TPopupMenu Objekt.
    

    Wie komme ich denn sonst an den Sender des BitBtns?
    Hab mir schon den Kopf darüber zerbrochen.
    Hast du vielleicht noch einen Tip?
    Danke



  • Dafür gibt es die Eigenschaft PopupComponent.



  • Th69 schrieb:

    Dafür gibt es die Eigenschaft PopupComponent.

    Schau mal an, diese Eigenschaft kannte ich noch gar nicht, ich habe das immer über die Tag Eigenschaft gemacht (Einfach die Adresse des Objektes dort eingetragen, das das Popupmenu aufgerufen, natürlich zu int gecastet). 😃 😃 😃

    Wieder was nach 20 Jahren Delphi/C++ Builder Programmierung gelernt. 😉 😉



  • Ich danke euch recht herzlich, Th69 und Burkhi!
    Schaue mir das mal an. Damit komme ich bestimmt weiter.
    DANKE!

    Edit:
    Hat alles super mit PopupComponent geklappt.
    Vielen Dank nochmal!


Anmelden zum Antworten