Bezeichnung
MENU -- erstellt eine Menüleiste (V6.0)
Übersicht
@MENU id, table
Beschreibung
Diese Präprozessor-Anweisung kann verwendet werden, um eine Menüleiste zu erstellen, die später an ein oder mehreren Displays zugewiesen werden kann. Dies geschieht bei einem bereits vorhandenen Display mit dem Befehl SetDisplayAttributes(). Über den Menu-Tag mit der Präprozessor-Anweisung @DISPLAY oder dem Befehl CreateDisplay() kann die Menüleiste einem neuen Display zugeteilt werden.

Sie müssen dieser Präprozessor-Anweisung eine ID für die Menüleiste sowie die tatsächlichen Menüdefinition übergeben. Menüs werden als Baumstruktur definiert, die eine Haupttabelle mit verschiedenen Untertabellen enthält. Es gibt zwei verschiedene Arten von Untertabellen:

  1. Menü-Tabellen: Diese Tabellen enthalten eine Überschrift für das Menü im Tabellenelement Index 0 und eine Liste der einzelnen Menüpunkte im Tabellenelement Index 1. Die Liste der einzelnen Menüpunkte ist natürlich eine andere untergeordnete Tabelle, die von einer anderen Zahl Tabellen zusammengesetzt ist, um jeden Menüpunkt zu beschreiben (siehe unten). Die Tabelle muss mit einer Reihe von Menütabellen gestartet werden, da jeder Menüpunkt ein übergeordnetes Menü benötigt. Diese übergeordneten Menüs werden in den Menütabellen beschrieben. Es ist auch möglich, ein Untermenü unter einer Anzahl von Menüelementen einzufügen.

  2. Menüpunkt-Tabellen: Eine Menüpunktuntertabelle ist eine Tabelle, die ein einzelner Menüpunkt beschreibt. Der Name des Menüpunkt, der im Menü angezeigt werden soll, steht bei Tabellenindex 0. Wenn Sie eine leere Zeichenkette ("") bei Tabellenindex 0 einsetzen, wird Hollywood einen horizontalen Trennbalken anstelle eines wählbaren Menüeintrages einfügen. Mit diesen Trennbalken können Sie verwandte Menüpunkte zusammenfassen. Es darf kein Element am Tabellenindex 1 für Menüpunkttabellen sein. Stattdessen können Sie eine Reihe von anderen Tags verwenden, um Dinge wie Typ, Tastaturkürzel und Identifkator zu konfigurieren. Siehe unten für eine Liste von möglichen Tags.

Die folgenden Tags können Sie für Menüpunkttabellen verwenden:

ID:
Hier können Sie eine Zeichenfolge angeben, die diesen Menüpunkt identifiziert. Diese Zeichenkette wird an Ihren Callback-Ereignis-Handler übergeben werden, so dass Sie wissen, welchen Menüpunkt durch den Benutzer ausgewählt wurde. Die hier angegebene ID ist auch erforderlich, wenn Sie Befehle wie DisableMenuItem() oder SelectMenuItem() nutzen wollen, um manuell den Zustand der Menüpunkte zu ändern.

Flags:
Mit diesem Tag können Sie einen oder mehrere Flags für diesen Menüpunkt setzen:

#MENUITEM_TOGGLE:
Wenn dieser Flag gesetzt ist, wird dieser Menüpunkt als Toggle-Menüpunkt erstellt werden. Toggle-Menüpunkt haben zwei verschiedene Zustände (An- und Abwahl) und der Fenstermanager gibt ihren aktuellen Zustand in der Regel mit einem Häkchen an. Sie können manuell die Wechselfunktion eines Menüpunktes ändern, indem sie die Befehle SelectMenuItem() und DeselectMenuItem() aufrufen oder durch den #MENUITEM_SELECTED Flags (siehe unten). Der Zustand des Toggle-Menüpunktes kann mit dem Befehl IsMenuItemSelected() überprüft werden.

#MENUITEM_RADIO:
Setzen Sie diesen Flag, um den Menüpunkt zu einem Teil einer Menüpunktgruppe zu machen. Alle benachbarten Menüpunkte, die #MENUITEM_RADIO gesetzt haben, werden in die gleiche Menüpunktgruppe aufgenommen. Alle Menüpunkte innerhalb einer Menüpunktgruppe schließen sich gegenseitig aus, d.h. es kann jeweils nur ein Menüpunkt einer Menüpunktgruppe aktiv sein. Sie können den Zustand eines Menüpunktgruppen-Eintrags manuell ändern, indem Sie den Befehl SelectMenuItem() aufrufen oder den Flag #MENUITEM_SELECTED setzen (siehe unten). Der Status einer Menüpunktgruppe kann durch den Befehl IsMenuItemSelected() überprüft werden. Da Menüpunktgruppen immer ein aktives Element benötigen, ist es nicht möglich, DeselectMenuItem() auf einem Menüpunktgruppen-Eintrag aufzurufen. Wenn Sie einen Menüpunktgruppen-Eintrag deselektieren möchten, müssen Sie mit SelectMenuItem() einen anderen Menüpunktgruppen-Eintrag auswählen und dann wird der zuvor ausgewählte Menüpunktgruppen-Eintrag automatisch deselektiert. (V7.1)

#MENUITEM_SELECTED:
Wenn Sie den Flag #MENUITEM_TOGGLE oder #MENUITEM_RADIO zum erstellen eines Toggle- oder Radio-Menüpunktes festgelegt haben, können Sie diesen Flag setzen, um das Menüelement in den ausgewählten Status zu versetzen. Siehe oben für weitere Informationen zu den Menüoptionen für Toggle- und Radio-Menüpunkte.

#MENUITEM_DISABLED:
Wenn dieser Flag gesetzt ist, wird der Menüpunkt grau dargestellt, so dass der Benutzer ihn nicht auszuwählen kann. Sie können auch einen Menüpunkt manuell deaktivieren, indem Sie den Befehl DisableMenuItem() aufrufen. Einen deaktivierten Menüpunkt wird wieder aktiviert, in dem Sie den Befehl EnableMenuItem() verwenden. Der deaktivierte Zustand eines Menüpunktes kann mit dem Befehl IsMenuItemDisabled() überprüft werden.

Hotkey:
Dieser Tag kann auf ein Zeichen gesetzt werden, das für diesen Menüpunkt als Tastenkombination benutzt wird. Für die beste Cross-Plattform-Kompatibilität sollte dieser Tag auf ein Zeichen gesetzt werden, die nur ein Zeichen enthält, z.B. "Q" für Programm beenden. Einige Plattformen unterstützen auch benutzerdefinierte Tastaturkürzel wie "Strg + F1", aber in diesem Fall müssen Sie die Tastenkompination auf eigene Faust implementieren, da der Fenstermanager diese speziellen Tastaturkürzel nicht unterstützt. Wenn Sie ein Zeichen der Zeichenkette übergeben, wird jedoch der automatische Tastaturkürzel auf allen Plattformen funktionieren.

Menüleisten können auch mit dem Befehl CreateMenu() während der Laufzeit erstellt werden. Siehe CreateMenu für Details.

Sie können ein Menü mit dem Befehl SetDisplayAttributes(), mit dem Menu-Tag in der Präprozessor-Anweisung @DISPLAY oder dem Befehl CreateDisplay() einem Display zuweisen. Um eine Menüleiste von einem Display zu lösen, setzen Sie beim Menu-Tag vom Befehl SetDisplayAttributes() den besonderen Wert -1.

Um informiert zu werden, wenn der Benutzer Elemente aus dem Menü auswählt, müssen Sie den Ereignis-Handler OnMenuSelect installieren. Dies kann mit dem Befehl InstallEventHandler() erfolgen. Siehe InstallEventHandler für Details.

Bitte beachten Sie, dass Menüleisten Displays im Vollbildmodus nicht unterstützen. Sie werden nur dann funktionieren, wenn Ihr Display im Fenstermodus läuft.

Beachten Sie, dass es unter Android normalerweise nicht möglich ist, Menüelemente in der Stammebene des Optionsmenüs der Aktionsleiste zu platzieren, da Menüelemente auf Desktopsystemen immer Mitglieder bestimmter Stammgruppen sein müssen (z.B. "Datei", "Bearbeiten", "Ansicht" usw.). Es gibt keine Menüelemente außerhalb solcher Stammgruppen. Wenn Sie Menüleisten unter Android verwenden, repliziert Hollywood natürlich das Verhalten des Desktop-Menüs, indem Sie für diese Stammgruppen eigene Untermenüs erstellen. Das bedeutet jedoch, dass der Benutzer mindestens zweimal auf tippen muss, um ein Menüelement auszuwählen, da sich in der Stammebene keine Menüelemente befinden. Diese werden stattdessen immer in Untermenüs angezeigt. Wenn Sie nicht möchten, dass Hollywood diese Untermenüs erstellt, sondern alle Elemente in der Stammebene platziert, setzen Sie den Tag SingleMenu mit der Präprozessor-Anweisung @DISPLAY auf True. Dies ist besonders nützlich, wenn es nur wenige Menüpunkte gibt und es nicht sinnvoll ist, sie in Untermenüs zu platzieren.

Beachten Sie auch, dass Menüleisten derzeit nicht von Linux und iOS unterstützt werden.

Eingaben
id
einen Wert, der verwendet wird, um diese Menüleiste zu identifizieren
table
Definition des Menübaumes (siehe oben)
Beispiel
@MENU 1, {
    {"File", {
        {"New", ID = "new"},
        {"Open...", ID = "open"},
        {""},
        {"Close", ID = "close", Flags = #MENUITEM_DISABLED},
        {""},
        {"Save", Flags = #MENUITEM_DISABLED, Hotkey = "S"},
        {"Compress", ID = "cmp", Flags = #MENUITEM_TOGGLE},
        {""},
        {"Export image...", {
            {"JPEG...", ID = "jpeg"},
            {"PNG...", ID = "png"},
            {"BMP...", ID = "bmp"}}},
        {""},
        {"Dump state", ID = "dump"},
        {""},
        {"Quit", ID = "quit", Hotkey = "Q"}}},

    {"Edit", {
        {"Cut", ID = "cut"},
        {"Copy", ID = "copy"},
        {"Paste", ID = "paste"}}},

    {"?", {
        {"About...", ID = "about"}}}
    }

@DISPLAY {Menu = 1}
Der obige Code erzeugt eine Menüleiste, die dann dem Standarddisplay zugewiesen wird.

Navigation zeigen