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 Menüeinträge ein-/ausblenden (https://www.delphipraxis.net/103247-menueeintraege-ein-ausblenden.html)

mjenke 13. Nov 2007 06:30


Menüeinträge ein-/ausblenden
 
Guten Morgen, alle miteinander.


Kennt jemand folgendes Problem?

Ich habe ein MainMenu in meiner Anwendung, das unter einem Menüpunkt mehrere Menüeinträge besitzt, die durch Linien voneinander abgetrennt sind. Bei den Linien handelt es sich einfach um TMenuItems, deren Caption ein "-" ist.

Beispiel:

MenuEintrag1
MenuEintrag2
-------------
MenuEintrag3
MenuEintrag4
-------------
MenuEintrag5
MenuEintrag6


Werden einzelne Menüeinträge ausgeblendet (z. B. 3 und 4), so werden auch die überflüssigen Linien automatisch mit ausgeblendet. Im obigen Beispiel würde also nur noch eine der beiden Linien sichtbar sein.

In Kontextmenüs funktioniert dieses Verhalten einwandfrei. Im MainMenu bleiben allerdings sporadisch mehrere Linien stehen. Erst wenn ich ein zweites mal dieses Menü aufklappe, werden die überflüssigen Linien nicht mehr gezeichnet (wie gesagt: ein sporadisches Verhalten, teilweise funktioniert es von Anfang an richtig).

Gibt es eine Möglichkeit, ein Refresh (oder etwas in der Art) des MainMenu auszulösen, um solche "Leichen" zu vermeiden?

:?:

Deep-Sea 13. Nov 2007 07:33

Re: Menüeinträge ein-/ausblenden
 
Sporadisch ist immer ein ungutes Zeichen ...

a) Keine Menüeinträge ausblenden, nur deaktivieren.
b) Selber die überflüssigen Trennlinien verstecken.

marabu 13. Nov 2007 09:15

Re: Menüeinträge ein-/ausblenden
 
Moin Matthias,

zwar kannst du mit der Methode RethinkLines() eines MenuItem überflüssige Linien ausblenden, aber das geschieht im Regelfall schon automatisch. Vielleicht blendest du zu einem ungünstigen Zeitpunkt aus?

Was das Ausblenden von Menüeinträgen generell betrifft, so sollen wir Verben in einem Kontextmenü ausblenden, wenn sie deaktiviert sind, im MainMenu jedoch nicht. Etwas anderes sind dynamische Einträge, wie z.B. eine Liste der zuletzt geschlossenen Dateien oder der gerade offenen Fenster. Diese Einträge sind keine Verben (Befehle, Aktionseinträge) und sollten auch im Hauptmenü ausgeblendet werden. Solche Einträge lassen sich auch sehr gut durch ein Untermenü von den Verben abgrenzen.

Die Idee dahinter (SAA/CUA) ist einfach: Der Benutzer soll im Hauptmenü immer alle zur Verfügung stehenden Befehle sehen´können, auch wenn diese gerade nicht zulässig und deshalb deaktiviert sind, damit die Lernkurve etwas steiler wird.

Ein Kontextmenü hingegen ist vom Konzept her immer dynamisch, auch wenn dies durch die Möglichkeit im Form Editor jeder Komponente ein eigenes PopupMenu zuweisen zu können nicht so deutlich wird.

Grüße vom marabu

mjenke 13. Nov 2007 14:06

Re: Menüeinträge ein-/ausblenden
 
Hmmmmm, das ist nicht wirklich das, was mir vorschwebte...

Andererseits kann ich mich der Argumente nicht verschließen und habe es jetzt so geregelt, dass im Hauptmenü die Einträge immer sichbtar, aber entsprechend aktiv/deaktiviert sind, während im Kontextmenü nur die sinnvollen Einträge dargestellt werden.

Danke für den Hinweis!

:-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:54 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