Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   PopupMenü suchen...finden...ändern...reagieren (https://www.delphipraxis.net/169030-popupmenue-suchen-finden-aendern-reagieren.html)

golisan 25. Jun 2012 12:53

PopupMenü suchen...finden...ändern...reagieren
 
Hallo Leute,

bevor mir jemand vorwirft, dass ich die gleiche Frage bereits 2007 gepostet habe... ja habe ich. :stupid:
Aber damals bin ich auch zu keinem Ergebnis gekommen, deshalb versuche ich es erneut.

Ich möchte das Popupmenü(Kontextmenü) einer fremden Anwendung erweitern.
Es handelt sich um eine MDI-Anwendung.(konkrekt NATURAL Studio, Entwicklungsumgebung für die Sprache NATURAL(wird wohl keiner kennen :wink:) )
Winspector zeigt mir folgende Fensterhirachie:

1. NIDEWindowClass
2. PgmEdtMDIWin
3. PgmEditGroup
4. PgmEdtEditWin

Ich bin schon soweit, dass ich hier die Windows-Botschaften abfangen muss. Das ganze mache
ich mit einem globalen Hook.
Das tut schon mal. Ich komme aber nicht ganz mit der Reihenfolge der Nachrichten zurecht.
Drücke ich die rechte Maustaste bekommt das Fenster NIDEWindowClass die Nachricht WM_INITMENUPOPUP.
Danach bekommt PgmEdtMDIWin die Nachricht WM_CONTEXTMENU
Laut msdn steht
WM_INITMENUPOPUP wParam das Handle des Menüs.
WM_CONTEXTMENU wParam das Handle des Fensters in dem die rechte Maustaste gedrückt wurde.

Ich bekomme also zuerst gesagt, dass ein Popup erscheinen wird und dann erst welches Fenster der "Auslöser"
war. Umgekehrt wäre es mir lieber.

Das Problem ist, dass es unterschiedliche Kontextmenüs geben kann. Je nachdem welchen Inhalt der Programeditor hat,
ändert sich das PopupMenü.
Ich möchte aber nur auf bestimmte Kontextmenüs reagieren.

Wie mache ich das?

Zusätzlich stellt sich dann die Herausforderung, damit ich das Kontextmenü um Einträge erweitern kann, muss ich erst an den
Editorinhalt kommen(und analysieren), welcher in PgmEdtEditWin steht :?

:pale:

Im Prinzip müsste es so laufen:

1. Hook bekommt die Nachricht: ein Kontextmenü soll geöffnet werden
2. Ist es das Menü um das es mir geht, wenn Nein-> Exit
3. Ermitteln des Editorinhaltes
4. Menüeinträge anhängen

und später dann noch auf die Auswahl dieser Einträge reagieren... aber das erst später :cyclops:

Hat jemand einen Tipp?

Danke schon mal.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:07 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz