Halte PopupMenu nach Klick auf Item offen
Gibt es eine Möglichkeit ein PopupMenu offen zu halten, selbst nachdem auf ein TMenuItem geklickt wurde?
Ich erzeuge die TMenuItems selber und weise ein OnClick-Event zu. In diesem Event habe ich das hier mal ausprobiert.
Delphi-Quellcode:
Nach einem Klick auf ein TMenuItem wird das PopupMenu geschlossen und danach sofort wieder geöffnet. Das sieht man leider und es flackert kurz.
... handle click ...
Pos := TPopupMenu((Sender as TMenuItem).GetParentMenu).PopupPoint; TPopupMenu((Sender as TMenuItem).GetParentMenu).PopUp(Pos.X, Pos.Y); Geht das auch anders, ohne dass das PopupMenu zu geht? |
AW: Halte PopupMenu nach Klick auf Item offen
Hi Dolly,
ich gehe davon aus, dass du dir hierfür eine Klasse selber bauen musst. Ich würde vermutlich versuchen mir die TPopupMenu klasse zu vererben und das Close bzw das CloseMenu event nur dann durchzuführen wenn vorher eine Bedingung erfüllt ist. Dann kannst du selbst entscheiden, wann du das schließen möchtest. Eventuell, gibt es das aber auch schon. Schau doch mal ob du hier mehr Infos dazu findest: https://docwiki.embarcadero.com/Libr...upMenu_Methods LG --- Ergänzung: Grade nochmal nachgeschaut, ich glaube ich würde nicht beim Pupupmenu sondern beim Item ansetzen. https://docwiki.embarcadero.com/Libr...MenuItem.Click Nochmal drüber nachgedacht: Eventuell schließt auch die windows message das PopupMenu :shock: . Dann müsste man sich das anschauen. Ich denke es gibt hier richtig viele Möglichkeiten und Ansatzpunkte. Einen einfachen Weg dahin kenne ich aber leider nicht.... |
AW: Halte PopupMenu nach Klick auf Item offen
Ok klingt kompliziert. Da hört mein fast nicht vorhandenes Wissen schon auf.
|
AW: Halte PopupMenu nach Klick auf Item offen
Das wird in der Tat schwierig. Ich hatte vor einiger Zeit mal eine ähnliche Anforderung, bei dem das Checked mehrerer Einträge direkt nacheinander geändert werden sollte. Wenn dabei das Menü bei jedem Click zu geht ist das schon lästig. Ich konnte aber keine Lösung auf Basis eines Standard Popupmenüs finden, da Windows da sehr tief involviert ist und es meines Wissens sowas nicht unterstützt.
Der wesentliche Teil spielt sich in der Windows-API TrackPopupMenu ab und in der entsprechenden Doku steht: Zitat:
Man müsste also das komplette PopupMenu implementieren um das gewünschte Verhalten zu erreichen. Als Grundlage könnte hier die Implementierung von TPopupActionBar dienen. Das braucht aber auch noch ein gehöriges Mass an Anpassung und somit auch Verständnis dieser Implementierung. |
AW: Halte PopupMenu nach Klick auf Item offen
Vielleicht als Alternative ein Formular statt eines PopupMenus. Aber das beißt sich wieder wenn es um das einheitliche Erscheinungsbild des Programms unter verschiedenen Versionen von Windows geht.
Oder wirklich so wie ich es oben habe. Sobald es zu ist, wieder öffnen. |
AW: Halte PopupMenu nach Klick auf Item offen
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
das 'JVCaptionpanel' aus den JEDI Komponenten-Pack wäre vielleicht auch noch eine Möglichkeit. (Code ist jetz nur kurz angedeutet.)
Delphi-Quellcode:
procedure Tmainfrm.top_panelMouseMove(Sender: TObject; Shift: TShiftState; X, Y:
Integer); begin xpos:=x; ypos:=y; end;
Delphi-Quellcode:
Gruß
procedure Tmainfrm.PopupMenu1Popup(Sender: TObject);
begin if (xpos+JvCaptionPanel3.Width)>top_panel.ClientWidth then xpos:=(top_panel.ClientWidth-(JvCaptionPanel3.Width+20)); JvCaptionPanel3.Left:=xpos; JvCaptionPanel3.Top:=ypos; JvCaptionPanel3.Show; end; |
AW: Halte PopupMenu nach Klick auf Item offen
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
|
AW: Halte PopupMenu nach Klick auf Item offen
Im Prinzip könnte man ein Untermenü oder Popup-Menü simulieren, indem man beim Aufruf eines Menüpunkts bzw. beim Rechtsklick an der entsprechenden Stelle einen Dialog ohne Rahmen und Titelzeile anzeigt. Dort dann Mausbewegungen und Klicks verwenden, um Controls zu selektieren und darauf zu reagieren. Wenn die Maus den Dialog verlässt, diesen automatisch schließen.
Das würde dann im Falle eines Untermenüs zwar das Hauptmenü trotzdem schließen, aber evtl. ist das nicht so wild. Trotzdem eine Menge Aufwand. Wirst Du dafür bezahlt? Wenn ja, kommuniziere mal eine Abschätzung des Aufwands in Stunden und Euro und schlage eine alternative Implementation vor. |
AW: Halte PopupMenu nach Klick auf Item offen
Was ist denn der genaue Zweck dafür?
Könnte man es nicht mit Buttons oder einer Listbox regeln, die man bei Bedarf einblendet? Da kann man dann auf jeden Klick reagieren und die Anzeige bleibt - wenn es nur um ein paar nicht untergeordneten Auswahlpunkte gehen soll. Ggf. kannst Du noch etwas mehr dazu schreiben. Gruß TuPas |
AW: Halte PopupMenu nach Klick auf Item offen
Nja, z.B. ein Menü/Kontextmenü mit Optionen, wo man mehr als nur ein Setting mal schnell umstellen will.
Per se schließt ein Klick ins Menü nicht unbedingt das Menü. Maus über ein Item mit Subitems halten, oder Dieses anklicken, löst OnClick aus, aber macht dennoch nicht zu. Über einen Maushook den Klick abfangen, damit das Menü garnicht mitbekommt, dass geklickt wurde. PS: https://support.syncfusion.com/kb/ar...rms-popupmenu- |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22: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