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ßetypedef 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