OnClick Methoden dynamisch erzeugter Menüeinträge



  • Hi

    Wie kann ich auf einen Click auf einen zur Laufzeit erstellten Menüeintrag reagieren?



  • Hallo,

    siehe FAQ
    ist zwar kein MenuItem geht aber genausso.



  • Erstmal Danke für die schnelle Antwort...

    Da ich noch ein Noob bin kann ich das zwar einigermaßen nachvollziehn, jedoch nicht auf mein Problem abändern.

    Das Programm soll Plugins mit Dlls unterstützen. Wenn der Benutzer die Dll ausgewählt hat, einscheint ein neuer Menüeintrag mit dem Namen des Plugins.

    TMenuItem* neu=new TMenuItem(Form1->MainMenu)
    Form1->MainMenu->Items[0].Items[2]->Add(neu);
    neu->Caption=name;
    neu->OnClick= ????????
    

    An die Stelle der Fragezeichen soll die Funktion aus der Dll.
    beispielsweiße

    typedef String (_stdcall DLLFUNCTION)(void);
    DLLFUNCKTION *func;
    func=(*DLLFUNCTION)GetProcAddress(LoadLibrary("bsp.dll"),"_Function");  ???????
    

    Ich kenne mich kaum mit Pointern aus. Wie muss ich dann die beiden Stellen verknüpfen?

    Danke



  • Hallo

    Du kannst der OnClick-Eigenschaft des MenuItems nur Klassenmethoden (also keine freien Funktionen) mit der Signatur des TNotifyEvents zuweisen.
    Um jetzt diesen Event mit deiner Funktion aus der DLL zu verbinden, brauchst du erstmal eine Zwischenmethode des Forms, in dem das Menü ist. Dort wird (z.B. anhand des Tag-Eintrags in Menüitem) der Auslöser identifiziert und die entprechende Funktion aus der DLL ausgeführt.

    bis bald
    akari



  • Wenn ich allen Einträgen das gleiche Event zuweise, machen sie doch alle das selbe?!

    Wie kann ich auch das verhindern?

    PS:Tut mir leid das ich es immer noch nicht raff



  • Hallo

    indem du in den TMenuItems die Eigenschaft Tag ausnutzt, um diesen eine eigene eindeutige ID zu vergeben. Mit dieser kannst du in der Eventmehtode die aufzurufende Funktion bestimmen.

    /Edit : in der Eventmethode must du dann auf TMenuTem casten, um an die Tag-Eigenschaft zu kommen

    bis bald
    akari


Anmelden zum Antworten