Problem mit OnClick bei MenuItem
-
Bei einem Projekt erlaub ich einer DLL (mit VCL) MenuItems dem Menü einzufügen.
Nur leider gibts Probleme mit dem OnClick.Das funktioniert nur solange die neue OnClick Funktion in der Form1 Klasse steht.
Das geht ja nicht da die DLL die Funktion selber festlegen darf.void __fastcall TestTest(TObject *Sender) { ShowMessage("HALLO WELT"); } //--------------------------------------------------------------------------- extern "C" __declspec(dllexport) void CreateMenuItems(void *Menu) { TMenuItem *m=(TMenuItem*)Menu; TMenuItem *n = new TMenuItem(m); n->Caption = "Hallo Welt"; n->OnClick = TestTest; m->Insert(1,n); }
Doch irgendwie gibt es irgendnen Fehler:
"Konvertieren von 'void (_fastcall *)(TObject *)' nach 'void (_fastcall * (_closure )(TObject *))(TObject *)' nicht möglich.
-
Mitlerweile bin ich das Problem umgegangen und hab dafür andere Probleme:
Die OnClick Funktion wird irgendwie nur dann aufgerufen wenn das Menü ein Obermenü ist...
Also folgendes geht:
[Datei]
[HIER]
[Einstellungen]und
[Datei]
[Test]
..[HIER]
....[Test]
[Einstellungen]Folgendes jedoch nicht:
[Datei]
[Test]
..[HIER]
[Einstellungen]Woran mag das liegen?
void TForm1::UpdateMenu(TMenuItem *Item) { int c=Item->Count; if (Item->OnClick==NULL && Item->Tag!=0) { Item->OnClick=PlugInClick; Item->Caption="HALLO"; //HALLO wird in jedem Fall gesetzt } for (int i=0; i<c; i++) UpdateMenu(Item->Items[i]); } ... UpdateMenu(Form1->MainMenu1->Items); ... void __fastcall TForm1::PlugInClick(TObject *Sender) { ShowMessage("A"); // RUN*a=(RUN*)((TMenuItem*)Sender)->Tag; // a((void*)PV); }
-
Sorry wegen dem mitlerweile dreifachpost - aber ich hab mal die quellcodes hochgeladen. wenn man in der DLL an die Zeilen ganz unten einfügt (siehe unit1.cpp) dann funktioniert es - aber so soll es natürlich im PRogramm nachher nicht aussehen..