Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Popupmenu TMenuItem Rechtsklick (https://www.delphipraxis.net/186017-popupmenu-tmenuitem-rechtsklick.html)

jaenicke 28. Jul 2015 14:40

AW: Popupmenu TMenuItem Rechtsklick
 
Füge mal in dem PopupMenu1Popup am Ende noch hinzu:
Delphi-Quellcode:
  TrackPopupMenuEx(PopupMenu1.Handle,
                            TPM_RECURSE or TPM_BOTTOMALIGN or TPM_RETURNCMD,
                            Mouse.CursorPos.X, Mouse.CursorPos.Y, Handle, nil);
Funktioniert auch noch nicht alles (das erste Menü reagiert nicht auf Klicks), aber mehr als vorher. ;-)

Shark99 28. Jul 2015 14:51

AW: Popupmenu TMenuItem Rechtsklick
 
Verstehe ehrlich gesagt den Sinn deines Codes nicht. Damit geht bei jedem Klick das Popupmenü nochmal auf, und zwar auch beim Linksklick.

jaenicke 28. Jul 2015 15:09

AW: Popupmenu TMenuItem Rechtsklick
 
Setz mal einen Haltepunkt auf MenuRButtonUp. Da kommst du nämlich nun an. Du kannst das auch anderswo einbauen, ich wollte nur zeigen, dass du so den Rechtsklick bekommst.

Shark99 28. Jul 2015 15:17

AW: Popupmenu TMenuItem Rechtsklick
 
Das stimmt, allerdings bekommt man 2+ Popupmenüs angezeigt, und zwar auch beim Linksklicks.

TrackPopupMenuEx() zeigt zwangsläufig das Menü an. Man kann aber .Popup() durch TrackPopupMenuEx() nicht ersetzen, weil TrackPopupMenuEx() keine Events auslöst (kein OnPopup etc).

p.s.

Habe nun versucht WM_MENURBUTTONUP in WndProc() abzufangen und dort einen Timer für 500ms zu starten damit ich erkenne dass ein Menü-Rechsklick stattgefunden hat. Aber MENURBUTTONUP wird in WndProc nie ausgelöst. Bin langsam am verzweifeln. :(

Shark99 28. Jul 2015 17:30

AW: Popupmenu TMenuItem Rechtsklick
 
Neue Erkentniss. WM_MENURBUTTONUP wird nicht ausgelöst, weil die Mainform nicht der Parent eines Popupmenü ist, sondern ein verstecktes Fenster. Die Message kommt statt dessen bei PopupList.WndProc() an. Dort muss man sich hooken und kann dann darauf reagieren. Leider trifft es nicht für Submenus eines Popupmenüs zu. Da wird MENURBUTTONUP nicht bei PopupList.WndProc() ausgelöst.

jaenicke 28. Jul 2015 19:13

AW: Popupmenu TMenuItem Rechtsklick
 
Liste der Anhänge anzeigen (Anzahl: 1)
Diese Unit funktioniert bei mir problemlos:
http://www.delphipages.com/forum/sho...d.php?t=180337
(einfach Rechtsklick auf das Formular)

Siehe Anhang

Shark99 28. Jul 2015 19:38

AW: Popupmenu TMenuItem Rechtsklick
 
Das ist doch exakt der gleiche Code den ich im ersten Post beschrieben hab.

Er hat zwei Probleme.

1. Sobald bei einem Item Visible = False ist passt die Zuordnung nicht mehr. Das Problem habe ich behoben.
2. Es funktioniert nicht wenn das Popupmenu ein Submenü hat (im Submenü kann nichts rechtsgeklickt werden).

jaenicke 28. Jul 2015 21:51

AW: Popupmenu TMenuItem Rechtsklick
 
Liste der Anhänge anzeigen (Anzahl: 1)
:oops:

Ok, habe ich nicht mehr auf dem Schirm gehabt...
Ich habe den Code kurz korrigiert, siehe Anhang...
Nicht schön, funktioniert aber...

Shark99 28. Jul 2015 22:00

AW: Popupmenu TMenuItem Rechtsklick
 
Hab dein Beispielprojekt eben getestet und es funktioniert nicht. Wenn ich im sd-Untermenü auf einen der Einträge rechtsklicke passiert nichts.

jaenicke 28. Jul 2015 22:34

AW: Popupmenu TMenuItem Rechtsklick
 
Liste der Anhänge anzeigen (Anzahl: 2)
Ich habe die Einträge mal richtig benannt und diesmal die Exe mit reingepackt. Nicht dass es an der Windowsversion liegt. Wenn es bei dir mit der Exe geht, muss es an Delphi 2009 liegen. Das habe ich noch in einer VM, teste ich grad.

// EDIT:
Funktioniert bei mir mit Delphi 2009 wie mit XE8 und mit XP wie mit 8.1 und 10.

// EDIT2:
Siehe:
Anhang 43621


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:20 Uhr.
Seite 2 von 3     12 3      

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