Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Zugriff auf das Standard-Popupmenu von TEdit, TMemo usw.? (https://www.delphipraxis.net/167611-zugriff-auf-das-standard-popupmenu-von-tedit-tmemo-usw.html)

Ralf Kaiser 9. Apr 2012 14:08

Zugriff auf das Standard-Popupmenu von TEdit, TMemo usw.?
 
Halli Hallo,

kennt jemand eine Möglichkeit auf das Standard.Popupmenü von Texteingabe-Controls zuzugreifen um dieses durch eigene Einträge zu erweitern?

Eine (schnelle) Lösung wäre es ja, einfach ein eigenes Kontextmenü zu bauen und dort "Kopieren", Auschneiden", "Einfügen", "Löschen" und "Alles auswählen" zu implementieren. Eigentlich kein Problem...

Aber: Seit Windows 2000 sind in diesem Menu ja auch die sprachspezifischen Möglichkeiten enthalten (IME, Eingaberichtung, Unicode-Steuerzeichen eingeben). Daher wäre es eigentlich eleganter, wenn man eigene Einträge dort einfach einfügen/anhängen könnte.

Scheinbar wird dieses Popup-Menü aber von Windows als "sehr privat" gehandhabt. Nicht einmal ein WM_INITMENU (bzw. WM_INITMENUPOPUP)oder sonstige Messages werden gesendet wenn das Menü auftaucht.

Gibt es da eventuell überhaupt keine Möglichkeit??

Ciao,
Ralf

jaenicke 9. Apr 2012 15:28

AW: Zugriff auf das Standard-Popupmenu von TEdit, TMemo usw.?
 
Zitat:

Zitat von Ralf Kaiser (Beitrag 1160834)
Scheinbar wird dieses Popup-Menü aber von Windows als "sehr privat" gehandhabt. Nicht einmal ein WM_INITMENU (bzw. WM_INITMENUPOPUP)oder sonstige Messages werden gesendet wenn das Menü auftaucht.

Es wird ein WM_CONTEXTMENU geschickt. Allerdings sehe ich keine einfache Möglichkeit an das Handle zu kommen. Vielleicht kann man die Routinen zur Anzeige hooken...

himitsu 9. Apr 2012 16:00

AW: Zugriff auf das Standard-Popupmenu von TEdit, TMemo usw.?
 
Wenn du in deinem Kontextmenü Actions verwendest, dann kannst du von dort die entsprechenden Standardactions verwenden.

jaenicke 9. Apr 2012 16:29

AW: Zugriff auf das Standard-Popupmenu von TEdit, TMemo usw.?
 
Das ändert aber nichts daran, dass im System-Kontextmenü noch weitere Einträge sind, die sich nicht so leicht reproduzieren lassen und ja auch nicht immer gleich sind.

Ralf Kaiser 9. Apr 2012 19:41

AW: Zugriff auf das Standard-Popupmenu von TEdit, TMemo usw.?
 
Zitat:

Zitat von himitsu (Beitrag 1160841)
Wenn du in deinem Kontextmenü Actions verwendest, dann kannst du von dort die entsprechenden Standardactions verwenden.

Das nachbauen der "normalen" Standardfunktionen ist nicht das Problem. Aber je nach Windowsversion (und vor allem: je nach installierten IMEs für z.B. Japanisch oder Chinesich) enthält das Menü noch andere Einträge.

Nur gibt es, scheinbar, keine Möglichkeit diese Einträge zumindest auszulesen um sie dann, je nachdem welche vorhanden sind, nachzubilden. "GetMenu" liefert zwar einen Pointer zurück, der aber laut "IsMenu" kein Zeiger auf ein Menü ist.

Das meinte ich, als ich schrieb, dass Windows dieses Menü "sehr privat" behandelt.

EWeiss 9. Apr 2012 19:52

AW: Zugriff auf das Standard-Popupmenu von TEdit, TMemo usw.?
 
Weiss jetzt nicht wo das problem ist daran zu kommen zu mindest funktioniert es bei NotePad.
Allerdings ist dieses als Standard und Popup Menu gleich ausgelegt.

Fremde Menus Fernsteuern

gruss

Ralf Kaiser 9. Apr 2012 20:20

AW: Zugriff auf das Standard-Popupmenu von TEdit, TMemo usw.?
 
Zitat:

Zitat von EWeiss (Beitrag 1160867)
Weiss jetzt nicht wo das problem ist daran zu kommen zu mindest funktioniert es bei NotePad.
Allerdings ist dieses als Standard und Popup Menu gleich ausgelegt.

Fremde Menus Fernsteuern

gruss

Nein, es funktioniert nicht. Das Menü, was dieses Programm ausliest ist NICHT das Standard-Popup von Notepad sondern das Hauptmenü von Notepad!

Ich meine das Menü, das angezeigt wird wenn eine Windows-Textbox (in Delphi-Sprache: ein TEdit) kein eigenes Popupmenü definiert. Dieses Menü enthält mindestens die Befehle zur Textbearbeitung (Copy/Cut/Paste usw,) und einige andere Windowsversion-abhängige Einträge die zur Steuerung der Eingabe dienen.

Und dieses Menü wird von dem Programm nicht ausgelesen!

jaenicke 9. Apr 2012 20:52

AW: Zugriff auf das Standard-Popupmenu von TEdit, TMemo usw.?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Ralf Kaiser (Beitrag 1160866)
Nur gibt es, scheinbar, keine Möglichkeit diese Einträge zumindest auszulesen um sie dann, je nachdem welche vorhanden sind, nachzubilden. "GetMenu" liefert zwar einen Pointer zurück, der aber laut "IsMenu" kein Zeiger auf ein Menü ist.

Gib doch nicht so schnell auf... :zwinker:

Aber wenn du nicht weitermachst, mache ich es halt... wie hatte ich ja schon geschrieben.
Ich habe gerade herausgefunden, dass Windows aus der comctl32.dll heraus TrackPopupMenuEx benutzt um danach das Menü aufzurufen. Ein Beispiel, das einen Beispielmenüeintrag in das Menü einfügt, liegt im Anhang. :zwinker: Es wird die JCL für den Hook benutzt.

Im Moment funktioniert es noch nicht auf den Klick zu reagieren, da die entsprechende Message offenbar nicht an die eigene Anwendung oder das Editcontrol gesendet wird. Aber das lässt sich sicher auch noch machen. ;-)

Und ansonsten geht zumindest das Auslesen der Einträge ja jetzt schon.

Ralf Kaiser 9. Apr 2012 21:00

AW: Zugriff auf das Standard-Popupmenu von TEdit, TMemo usw.?
 
Zitat:

Zitat von jaenicke (Beitrag 1160870)
Zitat:

Zitat von Ralf Kaiser (Beitrag 1160866)
Nur gibt es, scheinbar, keine Möglichkeit diese Einträge zumindest auszulesen um sie dann, je nachdem welche vorhanden sind, nachzubilden. "GetMenu" liefert zwar einen Pointer zurück, der aber laut "IsMenu" kein Zeiger auf ein Menü ist.

Gib doch nicht so schnell auf... :zwinker:

Na ja, es ist Ostern und da hat man ja auch noch ein Familienleben...:wink:

Erst einmal Danke für deine Bemühnugen, ich werde mir das Beispiel morgen mal näher ansehen!


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:35 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