![]() |
ActionMainMenuBar Untermenü ausblenden
Hallo,
es ist kein Problem, einen Menüpunkt im ActionMenu über die Visible-Eigenschaft zur Laufzeit auszublenden. Wie sieht es aber mit einem Untermenü aus. Ich kann ja die Kategorie nicht als Objekt ansprechen. Es sieht aber blöd aus, wenn alle Punkte eines Untermenüs unsichtbar sind, das Untermenü selber aber noch zu sehen ist. Gibt es dafür eine Lösung? Danke im Voraus |
Re: ActionMainMenuBar Untermenü ausblenden
Jo, die Lösung :
Delphi-Quellcode:
Jede ActionBar hat einen oder mehrere Items - sog. TActionClients - die wiederum einen oder mehrere Items haben kann usw.
ActionManagerMain.ActionBars[0].Items[0].Items[1].Items[1].Visible := false;
Je nach 'Lage'=Ebene des Menupunktes muss man sich entsprechend 'durchhangeln' um diesen Menupunkt ansprechen zu können. In meinem Beispiel wäre das die zweite Ebene und der 2.Eintrag. Das Ganze muss man sich als Baum vorstellen (u.a. Darstellung nicht gerade kunstpreisverdächtig, aber sollte ansatzweise helfen..) Die fetten Einträge entsprechen dem o.a. Codeschnippsel
|
Re: ActionMainMenuBar Untermenü ausblenden
Ich möchte jetzt nicht undankbar klingen, aber das "durchhangeln" auf diese Weise ist ziemlich unkomfortabel und zu statisch. Wenn ein Menüpunkt hinzugefügt wird, muss ich auch immer den Pfad anpassen, was natürlich sehr chaotisch werden kann, wenn mehrere Leute befugt sind, das Menü zu ändern.
Gibt es bei dieser Durchhangelmethode vielleicht sowas wie ItemByName? |
Re: ActionMainMenuBar Untermenü ausblenden
Nun ja, diese ganze TActionClient-Collections-Rumeierei find ich auch nicht so pralle..
Um ein 'Menupunkt' direkt ansprechen zu können gibt es das hier (hab ich auch erst vor wenigen Minuten herausgefunden):
Delphi-Quellcode:
Ist zwar nett, aber m.E. etwas unflexibel, weil in dem zu übergebenden String das &-Zeichen für den HotKey enthalten sein muss - und da muss ich natürlich genau wissen, an welcher Position es steht :-( Die Möglichkeit, mittels der Funktion StripHotKey() die Caption zu finden, scheitert kläglich :(
...
var acItem: TActionClientitem; ... begin acItem := ActionManagerMain.FindItemByCaption('&Menupunkz'); if Assigned(acItem) then acItem.Visible := ... |
Re: ActionMainMenuBar Untermenü ausblenden
Aber das ist doch schon mal genau das, was ich gesucht habe.
Das mit dem &-Zeichen ist in meinem Fall nicht so problematisch. Vielen Dank |
Re: ActionMainMenuBar Untermenü ausblenden
Zitat:
Ichj bin eher schon geneigt, den ganzen Action-Zirkus wieder zu canceln, da selbiger mir zu schwerfällig ist und ich die angeblichen Vorteile nicht so sehe... |
Re: ActionMainMenuBar Untermenü ausblenden
Man könnte den Actionmanager ableiten und ein eigenes CompareProc einbauen.
Oder halt ne separate Funktion schreiben, die genau wie der ActionManager das macht, sich Item für Item durchhangelt und die Captions vergleicht - und dabei halt die &-Zeichen außer Acht lassen. Auf welche Eigenschaft würdest du denn zugreifen wollen, wenn du eine Action für verschiedene Menüpunkte verwendest? :gruebel: |
Re: ActionMainMenuBar Untermenü ausblenden
Wie gesagt: ich finde den ActionManager nach anfänglicher Euphorie zu komplex/kompliziert...
Hatte bspw. versucht, über die Eigenschaft/Methode Action.ActiveComponent herauszufinde, welcher 'Menüeintrag' eine Action auslöst; hab desweiteren alles (Un)Mögliche ausprobiert - es hat irgendwie nie das gewünschte Ergebnis gebracht; von daher habe ich genervt aufgegeben - nicht zuletzt auch aus dem Grund: soweit ich weiss, ist das Teil ja nicht Unicode-fähig... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:01 Uhr. |
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-2025 by Thomas Breitkreuz