Portisch Posted June 19, 2009 Share Posted June 19, 2009 Hi, komm hier nicht weiter! Ich benutze ja den Code: procedure SetMenuHandle(Menu:HMenu);stdcall; begin MainMenu:= CreateMenu; InsertMenu(MainMenu, $FFFFFFFF, (MF_BYPOSITION or MF_POPUP or MF_ENABLED), LoadMenu(hInstance,'EXTERN'),PluginName); InsertMenu(Menu, $FFFFFFFF, MF_BYPOSITION or MF_POPUP or MF_ENABLED), MainMenu,PluginName); end; um das Plugin (PluginName) im Menü einzubinden. Das geht auch und es wird auch auf MenuItemClick reagiert. Wie mache ich nun in meinem Hinzugefügtem Item Subitems? z.B.: Mein Plugin -> Options -> About Da sind leider meine Delphi-Kenntnisse am ende. Kann da jemand einen Sample Code posten!? Quote Link to comment
Griga Posted June 19, 2009 Share Posted June 19, 2009 (edited) Du musst zusätzlich ein Submenü erzeugen MainMenu := CreateMenu; SubMenu := CreateMenu; in dieses deine Untermenüpunkte einhängen, z.B. InsertMenu(SubMenu,$FFFFFFFF, MF_BYPOSITION or MF_ENABLED, SomeValue,SomeName); InsertMenu(SubMenu,$FFFFFFFF, MF_SEPARATOR, 0,nil); //... und am Ende InsertMenu(MainMenu, $FFFFFFFF, MF_BYPOSITION or MF_POPUP or MF_ENABLED, SubMenu,SomeName); InsertMenu(Menu, $FFFFFFFF, MF_BYPOSITION or MF_POPUP or MF_ENABLED, MainMenu,nil); <edit> Korrigiert. Da war ein InsertMenu zu viel reingerutscht. </edit> Edited June 19, 2009 by Griga Quote Link to comment
Portisch Posted June 19, 2009 Author Share Posted June 19, 2009 Danke! Werd's probieren! Wo wird dann eigentlich die MenuID definiert? Will ja mit Case MenuID darauf reagieren? Quote Link to comment
Griga Posted June 19, 2009 Share Posted June 19, 2009 Jeder anwählbare Menüpunkt braucht eine eigene ID. Am besten nimmst du eine Basis-ID und zählst sie dann nach jedem neuen Menüpunkt um 1 hoch. Die Basis-ID legst du selbst fest und hoffst, dass sie mit keinem anderen Plugin kollidiert Ich verwende immer IDs im Bereich 59xxx und Lars 39xxx (dezimal). Da hälst du dich also besser raus. Quote Link to comment
Portisch Posted June 19, 2009 Author Share Posted June 19, 2009 Hat Funktioniert! Nun kann ich SubItems anlegen. Da ich dann noch eine Form anzeigen will hätte ich da noch eine Frage: procedure ShowDllMainForm; begin try MainForm.Free; Application.Handle := DVBViewerHandle; MainForm := TMainForm.Create(Application); MainForm.Show; finally MainForm.Free; MainForm := nil; end; end; Nun habe ich das Problem das die Form nur kurz Aufblitzt und dann nicht mehr zu sehen ist. Wenn ich es mit Showmodal mache bleibt sie da. Ich möchte aber während das Fenster offen ist im DVBViewer etwas verändern können. Quote Link to comment
Griga Posted June 19, 2009 Share Posted June 19, 2009 Nun habe ich das Problem das die Form nur kurz Aufblitzt und dann nicht mehr zu sehen ist. Wen wundert's... wenn du die Form nach Create und Show sofort wieder freigibst, was erwartest du? Der Aufruf von ShowModal kehrt erst zurück, wenn du das Fenster schließt. Show prinzipbedingt sofort. Oder sollte es vielleicht except statt finally heißen? Wie auch immer... wenn du möchtest, dass ein nicht-modal angezeigtes Fenster beim Schließen automatisch freigegeben wird, musst du im OnClose-Event nur folgendes machen: procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; end; und vielleicht noch im OnDestroy-Event procedure TMainForm.FormDestroy(Sender: TObject); begin MainForm := nil; end; Quote Link to comment
Portisch Posted June 20, 2009 Author Share Posted June 20, 2009 (edited) Manchmal sieht man den Wald vor lauter Bäumen nicht! Danke! edit: Jetzt muss ich aber noch einmal kurz nachfragen! Wenn die Form offen ist und DVBViewer beendet wird stürzt ja alles ab. D.h. die Form muss vorher geschlossen werden! Ich habe es über EventMsg probiert: case EventType of evUnload: Terminate; Jedoch wird diese nicht aufgerufen, da es schon vorher hängt. Wenn die Form zu ist wird sie schon aufgerufen. Wie kann ich meiner DLL sagen sie soll jetzt die Form zumachen? EDIT Hat sich erledigt. Es scheint ein Bug im Plugin Code gewesen zu sein! Edited June 21, 2009 by Portisch Quote Link to comment
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.