Wie Sie einen Menüpunkt auswählen, ohne das Menü?
Standardmäßig, wenn Sie wählen Sie ein Element aus einem TMainMenu-oder TPopupMenu etc, das Menü wird geschlossen, nachdem es angeklickt wurde. Ich möchte dieses Verhalten so ändern, dass wenn ich die Option auf einen Menüpunkt, das Menü nicht schließen, aber Sie bleibt sichtbar und offen an der Stelle war es zuletzt geklickt haben, wodurch es einfacher ist, wählen Sie einen anderen Menüpunkt, falls gewünscht. Natürlich wechseln des Fokus auf ein anderes Steuerelement ausblenden soll das Menü wie normal, aber wenn der Fokus weiterhin auf der Speisekarte zu halten, die es sichtbar.
Wenn das möglich ist, möchte ich dieses Verhalten nur auf bestimmte Menüpunkte. In anderen Worten, wenn ich alle Menüpunkte funktionieren wie normal, aber wenn ich geben Sie einen oder zwei Menüpunkte, dies wird nicht schließen Sie das Menü, wenn ausgewählt.
Der Grund, warum ich dies tun wollen, ist wie so, ich habe ein Einstellungs-Formular in meine Anwendung, wo Sie viele Optionen, die konfiguriert werden können, den üblichen Kram etc, aber auch in der Main Form habe ich einige der häufigsten häufiger verwendeten Optionen in einem TMainMenu. Diese gemeinsame Optionen in meinem Menü möchte ich in der Lage sein zu wählen, ohne das Menü, so dass andere Optionen können ausgewählt werden, zum Beispiel die zimmerreserviereung, ohne das navigieren durch die Menüpunkte.
Gibt es einen standardisierten Weg, dies zu erreichen?
Dank
Craig.
- +1. Innerhalb von wenigen Minuten, eine Menge von "nitpicker' argumentieren, dass dies nicht die Standard-Windows-design ist, und dass dies verwirren den Anwender. Aber zu Ihrer Verteidigung, Sie können argumentieren, dass die status bar Kontextmenü in Microsoft Office (2010 mindestens) Anwendungen, um nur zu nennen ein Beispiel, verhält sich wie diese. Und das ist eine sehr gute Sache, für die dieses Kontextmenü enthält nur die check-box Elemente, und Sie werden wahrscheinlich auf einige von Ihnen in einer Reihe.
- Auch ich habe Office 2010, aber ein Blick aus dem screenshot in dem link, es scheint, etwas ähnliches zu tun, was ich will, der einzige Unterschied ist, ich bin mit einem standard-TMainMenu.
- Ich denke, dass wird hart werden, zu erreichen mit einem standard-Menü.
- Sie sind oft eine der Chef-nitpicker argument zugunsten von standard-UI. Haben Sie sich reformiert? 😉
- Ich weiß, aber nur zum Teil. Und dies ist einer der Fälle, in denen eine slighlty different design könnte völlig akzeptabel, wie der Microsoft Word-Fall.
- Es ist akzeptabel, ja, es ist nicht getan mit der Win32-eingebaute popup-Menü tracking-Funktionen.
- Ich Frage mich, ob die
TActionMainMenuBar
kann geändert werden, um dies zu erreichen (natürlich nur, wenn der action manager istStyle <> Platform default
). - Ja kann es, ich habe getan, dass für eines meiner Projekte. Leider, meine spezielle Implementierung ist eine Mischung von modifizierten VCL-code und ein paar meiner eigenen abgeleiteten Klassen; ich zögern, es hier zu veröffentlichen.
- Nicht this Sinn?
- mit TActionMainMenuBar ist kein problem, wenn eine Lösung gefunden werden kann, mit diesem ich manchmal verwenden Sie diese Komponente, für Office-XP-Stil-Menü. Mein problem scheint nicht zu haben eine straight-forward beantworten, aber so bin ich nicht in der Hoffnung zu viel.
Du musst angemeldet sein, um einen Kommentar abzugeben.
In dem code unten, wenn Sie mit der rechten Maustaste auf das panel auf der form, wird ein popup-Menü mit drei Einträgen gestartet wird. Das erste Element verhält sich normal, die anderen beiden Elemente auch feuert Ihr auf Veranstaltungen, aber das popup-Menü ist nicht geschlossen.
Popup gestartet wird mit 'TrackPopupMenu', wenn Sie stattdessen verwenden möchten 'OnPopup' Ereignisse, oder mit sub-Menüs mit nicht-schließen von Elementen, verweisen Sie auf den link in den Kommentar, den ich gepostet auf deine Frage. Anpassung der code für eine Haupt-Menü würde nicht schwierig sein..
Ich bin nicht die Kommentare im code nicht zu fördern, die Verwendung des Ansatzes, da es die Verwendung eines undokumentierten Nachricht, ich habe auch das Gefühl es ist ein wenig unübersichtlich..
Item.Checked := not Item.Checked
direkt nachItem.Click;
(MenuSelectID) - Das Element ist nicht ungültig, und die Prüfung wird nicht gezeichnet, bis ich verlassen die Element-Fläche und Geben Sie zurück an ihn 🙁 Was kann getan werden?InvalidateRect(FPopupWindowHandle, nil, False);
nach, dass es behoben... 🙂const MN_DBLCLK = $01F1;
... case Msg.Msg of MN_BUTTONDOWN, MN_DBLCLK: ...
Meine Vermutung ist, dass, obwohl dies ist akzeptabel, Sie sollten wahrscheinlich betrachten Sie das schreiben Ihrer eigenen Menü-system, Platten oder Formen, oder eine komplette custom control/Komponente setzen, und nicht mit dem standard-oder TPopupMenu TMainMenu, wenn Sie dies tun wollen.
Wenn Sie möchten, dass einige starter-source-code, ich würde anfangen mit sowas wie dem Toolbar2000+SpTBX Quellen. Ich bin mir ziemlich sicher, dass Sie wäre in der Lage, dies zu erreichen, mit denen, aber nicht mit TMainMenu und TPopupMenu, denn Sie wickeln einige Win32 gelieferten, haben Verhaltensweisen (einschließlich der Schließung, wenn Sie nicht wollen), dass es nicht möglich ist, zu überschreiben.
Könnten Sie auch in der Lage sein, so etwas zu tun, out of the box mit der Developer Express-Komponenten-Symbolleiste.
Hatte ich das selbe Bedürfnis vor kurzem und gefunden, dass TMS Smooth controls hat "Abreiss" - Menüs, die eine ähnliche Funktion hat, sondern benötigen (wie der name schon sagt), dass das Menü werden, um, abgerissen! Ich sah noch nie hinein, denn mein Bedürfnis war nicht stark genug, um zu rechtfertigen, die Zeit, Geld, oder verwenden Sie ein Drittanbieter-Produkt. Aber, ich habe andere Sachen hatten, wurde die erste rate.
Nicht sicher, ob Ihre tear-off-Menüs füllen würde, Ihre Bedürfnisse, aber vielleicht möchten Sie sich in ihn.
http://www.tmssoftware.com/site/advsmoothmegamenu.asp