AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Zugriff auf das Standard-Popupmenu von TEdit, TMemo usw.?
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von Ralf Kaiser · begonnen am 9. Apr 2012 · letzter Beitrag vom 9. Apr 2012
Antwort Antwort
Benutzerbild von Ralf Kaiser
Ralf Kaiser

Registriert seit: 21. Mär 2005
Ort: Wuppertal
932 Beiträge
 
Delphi 10.3 Rio
 
#1

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

  Alt 9. Apr 2012, 15:08
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
Ralf Kaiser

Geändert von Ralf Kaiser ( 9. Apr 2012 um 15:22 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#2

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

  Alt 9. Apr 2012, 16:28
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...
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

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

  Alt 9. Apr 2012, 17:00
Wenn du in deinem Kontextmenü Actions verwendest, dann kannst du von dort die entsprechenden Standardactions verwenden.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#4

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

  Alt 9. Apr 2012, 17:29
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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Ralf Kaiser
Ralf Kaiser

Registriert seit: 21. Mär 2005
Ort: Wuppertal
932 Beiträge
 
Delphi 10.3 Rio
 
#5

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

  Alt 9. Apr 2012, 20:41
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.
Ralf Kaiser
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

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

  Alt 9. Apr 2012, 20:52
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
  Mit Zitat antworten Zitat
Benutzerbild von Ralf Kaiser
Ralf Kaiser

Registriert seit: 21. Mär 2005
Ort: Wuppertal
932 Beiträge
 
Delphi 10.3 Rio
 
#7

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

  Alt 9. Apr 2012, 21:20
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!
Ralf Kaiser

Geändert von Ralf Kaiser ( 9. Apr 2012 um 21:25 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#8

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

  Alt 9. Apr 2012, 21:52
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...

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. 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.
Angehängte Dateien
Dateityp: 7z Edit Kontextmenü erweitern.7z (2,07 MB, 87x aufgerufen)
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Ralf Kaiser
Ralf Kaiser

Registriert seit: 21. Mär 2005
Ort: Wuppertal
932 Beiträge
 
Delphi 10.3 Rio
 
#9

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

  Alt 9. Apr 2012, 22:00
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...
Na ja, es ist Ostern und da hat man ja auch noch ein Familienleben...

Erst einmal Danke für deine Bemühnugen, ich werde mir das Beispiel morgen mal näher ansehen!
Ralf Kaiser
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:21 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