Delphi-PRAXiS

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 ActionMainMenuBar Untermenü ausblenden (https://www.delphipraxis.net/88686-actionmainmenubar-untermenue-ausblenden.html)

smudo 19. Mär 2007 12:57


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

raiguen 20. Mär 2007 09:09

Re: ActionMainMenuBar Untermenü ausblenden
 
Jo, die Lösung :
Delphi-Quellcode:
  ActionManagerMain.ActionBars[0].Items[0].Items[1].Items[1].Visible := false;
Jede ActionBar hat einen oder mehrere Items - sog. TActionClients - die wiederum einen oder mehrere Items haben kann usw.
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

  • 0 - Actionbar
    +--0 Menüpunkt 1 {erste Ebene}
    ...+--0 Eintrag 11
    ...+--1 Eintrag 12 {zweite Ebene}
    ..... +--0 Unterpunkt 121
    ......+--1 Untermenu 122
    +--1 Menupunkt 2
    ...+--0 Unterpunkt 21
    ...+--1 Unterpunkt 22
Ich hoffe, dass die Vorgehensweise verständlich ist?

smudo 20. Mär 2007 13:21

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?

raiguen 20. Mär 2007 14:04

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:
...
var acItem: TActionClientitem;
...
begin
  acItem := ActionManagerMain.FindItemByCaption('&Menupunkz');
  if Assigned(acItem) then
    acItem.Visible := ...
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 :(

smudo 21. Mär 2007 08:07

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

raiguen 21. Mär 2007 11:44

Re: ActionMainMenuBar Untermenü ausblenden
 
Zitat:

Zitat von smudo
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

Jo, aber in einer mehrsprachigen Anwendung - sprich die Captions sind bsp auf tschechisch, dann kann ich den Caption-String nicht mehr genau übergeben, da ich nicht weiß, wo denn das &-Zeichen vorhandne ist. Von daher muss ich mich auf die Ebene der 'Durchhangelei' begeben, solange mir keine andere elegantere Möglichkeit einfällt, in diesem Wirrwarr von TActionClients, TActionItems und TCollections-Konsorten expliziet auf einen bestimmten 'Menupunkt' zuzugreifen. Da es bei mir einige Items gibt, die zwar ne unterschiedliche Caption haben, aber auf die gleiche Action zu greifen, geht die Methode .FindItemByAction auch nicht...
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...

smudo 21. Mär 2007 12:56

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:

raiguen 22. Mär 2007 10:08

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