Menu/MenuBar-Objekt

Bietet eine Schnittstelle zum Erstellen und Ändern eines Menüs oder einer Menüleiste, zum Hinzufügen und Ändern von Menüpunkten und zum Abrufen von Informationen über das Menü oder die Menüleiste.

class Menu extends Object

Menu-Objekte werden zum Definieren, Ändern und Anzeigen von Kontextmenüs verwendet. Menu(), MenuFromHandle und A_TrayMenu geben ein Objekt dieses Typs zurück.

class MenuBar extends Menu

MenuBar-Objekte werden zum Definieren und Ändern von Menüleisten verwendet und können mit Gui.MenuBar in ein GUI-Fenster eingefügt werden. Sie werden mit MenuBar() erstellt. MenuFromHandle gibt ein Objekt dieses Typs zurück, wenn ein Menüleiste-Handle übergeben wurde.

"MeinMenü" wird hier stellvertretend für ein beliebiges Menu-Objekt verwendet, da "Menu" die Klasse selbst ist.

Zusätzlich zu den von Object geerbten Methoden und Eigenschaften haben Menu-Objekte die folgenden vordefinierten Methoden und Eigenschaften.

Inhaltsverzeichnis

Statische Methoden

Call

Erstellt ein neues Menu- oder MenuBar-Objekt.

MeinMenü := Menu()
MeineMenüleiste := MenuBar()
MeinMenü := Menu.Call()
MeineMenüleiste := MenuBar.Call()

Methoden

Add

Fügt einen Menüpunkt hinzu oder ändert ihn.

MeinMenü.Add(MenüpunktName, RückrufOderUntermenü, Optionen)

Parameter

MenüpunktName

Typ: Zeichenkette

Der Text, der auf dem Menüpunkt angezeigt werden soll, oder die Position eines existierenden Menüpunkts, der geändert werden soll. Siehe MenüpunktName.

RückrufOderUntermenü

Typ: Funktionsobjekt oder Menu

Eine Funktion, die beim Auswählen des Menüpunkts als neuer Thread aufgerufen werden soll, oder eine Referenz zu einem Menu-Objekt, das als Untermenü verwendet werden soll.

Dieser Parameter ist Pflicht, wenn ein neuer Menüpunkt erstellt wird, aber optional, wenn nur die Optionen eines existierenden Menüpunkts aktualisiert werden müssen.

Die Rückruffunktion akzeptiert drei Parameter und kann wie folgt definiert werden:

MeinRückruf(PunktName, PunktPos, MeinMenü) { ...

Es spielt keine Rolle, welche Namen Sie den Parametern geben, allerdings werden ihnen die folgenden Werte nacheinander zugewiesen:

  1. Der Name des Menüpunkts.
  2. Die Positionsnummer des Menüpunkts.
  3. Das Menu-Objekt des Menüs, dem der Menüpunkt hinzugefügt wurde.

Es können beliebig viele Parameter am Ende der Parameterliste der Rückruffunktion weggelassen werden, wenn die entsprechenden Informationen nicht benötigt werden, aber dann muss als letzter Parameter ein Sternchen angegeben werden, z.B. MeinRückruf(Param1, *).

Optionen

Typ: Zeichenkette

Wenn leer oder weggelassen, werden standardmäßig keine Optionen verwendet. Andernfalls geben Sie eine oder mehrere Optionen aus der unteren Liste an (nicht Groß-/Kleinschreibung-sensitiv). Trennen Sie alle Optionen jeweils durch ein Leer- oder Tabulatorzeichen. Um eine Option zu entfernen, setzen Sie ein Minuszeichen davor. Um eine Option hinzuzufügen, lassen Sie das Vorzeichen weg oder setzen Sie ein Pluszeichen davor.

Pn: Geben Sie für n die Thread-Priorität des Menüpunkts an, z.B. P1. Wenn diese Option beim Hinzufügen eines Menüpunkts weggelassen wird, wird standardmäßig Priorität 0 verwendet. Wenn diese Option beim Ändern eines Menüpunkts weggelassen wird, bleibt die Priorität des Menüpunkts unverändert. Verwenden Sie eine dezimale (nicht hexadezimale) Zahl für diese Option.

Radio: Wenn der Menüpunkt abgehakt ist, wird ein fetter Punkt anstelle eines Häkchens angezeigt.

Right: Macht den Menüpunkt innerhalb der Menüleiste rechtsbündig. Dies gilt nur für Menüleisten, nicht für Kontextmenüs oder Untermenüs.

Break: Der Menüpunkt beginnt eine neue Spalte in einem Kontextmenü.

BarBreak: Dasselbe wie oben, aber mit Trennlinien zwischen den Spalten.

Um die Optionen eines existierenden Menüpunkts zu ändern, ohne seine Rückruffunktion oder sein Untermenü zu beeinflussen, lassen Sie einfach den RückrufOderUntermenü-Parameter weg.

Bemerkungen

Diese Mehrzweckmethode kann einen Menüpunkt hinzufügen, einen Menüpunkt mit einem neuen Untermenü oder einer neuen Rückruffunktion aktualisieren, oder einen normalen Menüpunkt in ein Untermenü umwandeln (oder umgekehrt). Wenn MenüpunktName noch nicht existiert, wird er zum Menü hinzugefügt. Andernfalls wird MenüpunktName mit dem neuen RückrufOderUntermenü und/oder Optionen aktualisiert.

Um eine Trennlinie zum Menü hinzuzufügen, lassen Sie alle drei Parameter weg.

Diese Methode fügt neue Menüpunkte immer am Ende des Menüs hinzu, während die Insert-Methode verwendet werden kann, um einen Menüpunkt vor einem existierenden benutzerdefinierten Menüpunkt einzufügen.

AddStandard

Fügt die vordefinierten Menüpunkte des Tray-Menüs hinzu.

MeinMenü.AddStandard()

Diese Methode kann mit einem Tray-Menü oder jedem anderen Menü verwendet werden.

Die vordefinierten Menüpunkte werden nach bereits existierenden Menüpunkten eingefügt. Bereits im Menü enthaltene vordefinierte Menüpunkte werden nicht dupliziert, aber fehlende Menüpunkte werden hinzugefügt. Die folgende Tabelle zeigt die Namen und Positionen der vordefinierten Menüpunkte an, nachdem AddStandard auf ein leeres Menü angewendet wurde:

&Open10
&Help2
3
&Window Spy4
&Reload Script5
&Edit Script6
7
&Suspend Hotkeys81
&Pause Script92
E&xit103

Kompilierte Skripte haben standardmäßig nur die letzten drei Menüpunkte. &Open ist nur enthalten, wenn A_AllowMainWindow 1 ist, während AddStandard angewendet wird (erhöhen Sie in diesem Fall die Positionen in der dritten Spalte um 1). Wenn das Tray-Menü vordefinierte Menüpunkte enthält, wird &Open immer eingefügt oder entfernt, wenn A_AllowMainWindow geändert wird. Bei anderen Menüs hat &Open keinen Effekt, wenn A_AllowMainWindow 0 ist.

Jeder vordefinierte Menüpunkt hat eine interne Menüpunkt-ID, die der entsprechenden Aktion des Menüpunkts zugeordnet ist, kann aber ansonsten wie jeder andere Menüpunkt geändert oder gelöscht werden. AddStandard identifiziert existierende Menüpunkte anhand ihrer ID, nicht anhand ihres Namens. Wenn mit der Add-Methode die Rückruffunktion eines vordefinierten Menüpunkts geändert wird, erhält der Menüpunkt eine neue eindeutige ID und wird nicht länger als vordefinierter Menüpunkt betrachtet.

Wenn der &Open-Menüpunkt zum Tray-Menü hinzugefügt wird, wird er zum Standardmenüpunkt gemacht, sofern es noch keinen gibt.

Check

Setzt ein sichtbares Häkchen neben einen Menüpunkt (sofern noch nicht geschehen).

MeinMenü.Check(MenüpunktName)

Parameter

MenüpunktName

Typ: Zeichenkette

Name oder Position eines Menüpunkts. Siehe MenüpunktName.

Delete

Löscht einen oder alle Menüpunkte.

MeinMenü.Delete(MenüpunktName)

Parameter

MenüpunktName

Typ: Zeichenkette

Wenn weggelassen, werden alle Menüpunkte aus dem Menü gelöscht, um es komplett zu leeren. Andernfalls geben Sie den Namen oder die Position eines Menüpunkts an. Siehe MenüpunktName.

Bemerkungen

Ein leeres Menü bleibt weiterhin existent, d.h. andere Menüs, die es als Untermenü verwenden, behalten solche Untermenüs.

Um eine Trennlinie zu löschen, identifizieren Sie sie anhand ihrer Position im Menü. Zum Beispiel können Sie MeinMenü.Delete("3&") verwenden, wenn zwei Menüpunkte vor der Trennlinie sind.

Die Löschung des Standardmenüpunkts hat denselben Effekt wie, als hätte man MeinMenü.Default := "" gesetzt.

Disable

Stellt einen Menüpunkt grau dar, um zu zeigen, dass der Benutzer ihn nicht auswählen kann.

MeinMenü.Disable(MenüpunktName)

Parameter

MenüpunktName

Typ: Zeichenkette

Name oder Position eines Menüpunkts. Siehe MenüpunktName.

Enable

Erlaubt dem Benutzer, einen Menüpunkt wieder auszuwählen, falls er zuvor deaktiviert (ausgegraut) war.

MeinMenü.Enable(MenüpunktName)

Parameter

MenüpunktName

Typ: Zeichenkette

Name oder Position eines Menüpunkts. Siehe MenüpunktName.

Insert

Fügt einen neuen Menüpunkt vor einem bestimmten Menüpunkt ein.

MeinMenü.Add(MenüpunktName, EinzufügenderPunkt, RückrufOderUntermenü, Optionen)

Parameter

MenüpunktName

Typ: Zeichenkette

Wenn leer oder weggelassen, wird EinzufügenderPunkt am Ende des Menüs hinzugefügt. Andernfalls geben Sie den Namen oder die Position eines existierenden benutzerdefinierten Menüpunkts an, vor dem EinzufügenderPunkt eingefügt werden soll. Siehe MenüpunktName.

EinzufügenderPunkt

Typ: Zeichenkette

Der Name eines neuen Menüpunkts, der vor MenüpunktName eingefügt werden soll. Im Gegensatz zur Add-Methode wird immer ein neuer Menüpunkt erstellt, egal ob EinzufügenderPunkt bereits als Menüpunkt existiert.

RückrufOderUntermenü

Siehe den RückrufOderUntermenü-Parameter von Add.

Optionen

Siehe den Optionen-Parameter von Add.

Bemerkungen

Um eine Menütrennlinie vor einem existierenden benutzerdefinierten Menüpunkt einzufügen, lassen Sie alle Parameter außer MenüpunktName weg. Um eine Menütrennlinie am Ende des Menüs einzufügen, lassen Sie alle Parameter weg.

Rename

Benennt einen Menüpunkt um.

MeinMenü.Rename(MenüpunktName , NeuerName)

Parameter

MenüpunktName

Typ: Zeichenkette

Name oder Position eines Menüpunkts. Siehe MenüpunktName.

NeuerName

Typ: Zeichenkette

Wenn leer oder weggelassen, wird MenüpunktName in eine Trennlinie umgewandelt. Andernfalls geben Sie den neuen Namen an.

Bemerkungen

Die aktuelle Rückruffunktion oder das aktuelle Untermenü des Menüpunkts bleibt unverändert.

Um eine Trennlinie in einen normalen Menüpunkt umzuwandeln, geben Sie die Position der Trennlinie wie z.B. 1& für MenüpunktName und einen nicht-leeren Namen für NeuerName an und verwenden Sie dann die Add-Methode, um dem Menüpunkt eine Rückruffunktion oder ein Untermenü zuzuweisen.

SetColor

Ändert die Hintergrundfarbe des Menüs.

MeinMenü.SetColor(FarbeWert, AufUntermenüsAnwenden)

Parameter

FarbeWert

Typ: Zeichenkette oder Integer

Wenn leer oder weggelassen, wird standardmäßig das Wort Default verwendet, das die Standardfarbe des Menüs wiederherstellt. Andernfalls geben Sie einen der 16 primären HTML-Farbnamen, einen hexadezimalen RGB-Farbwert als Zeichenkette (mit oder ohne 0x-Präfix), oder einen reinen numerischen RGB-Farbwert an. Beispielwerte: "Silver", "FFFFAA", 0xFFFFAA, "Default".

AufUntermenüsAnwenden

Typ: Boolesch

Wenn weggelassen, wird standardmäßig true verwendet.

Wenn true, wird die Farbe auf alle Untermenüs dieses Menüs angewendet.

Wenn false, wird die Farbe nur auf das Menü angewendet.

SetIcon

Bestimmt ein Symbol, das neben einem Menüpunkt angezeigt wird.

MeinMenü.SetIcon(MenüpunktName, DateiName , SymbolNummer, SymbolBreite)

Parameter

MenüpunktName

Typ: Zeichenkette

Name oder Position eines Menüpunkts. Siehe MenüpunktName.

DateiName

Typ: Zeichenkette

Der Pfad zu einer Symbol- oder Bilddatei, oder ein Bitmap- oder Symbol-Handle wie "HICON:" handle. Eine Liste unterstützter Formate finden Sie unter Picture.

Geben Sie eine leere Zeichenkette oder "*" an, um das aktuelle Symbol des Menüpunkts zu entfernen.

SymbolNummer

Typ: Integer

Wenn weggelassen, wird standardmäßig 1 verwendet (die erste Symbolgruppe). Andernfalls geben Sie die Nummer der Symbolgruppe an, die in der Datei verwendet werden soll. Zum Beispiel bewirkt MeinMenü.SetIcon(MenüpunktName, "Shell32.dll", 2), dass das Standardsymbol aus der zweiten Symbolgruppe geladen wird. Wenn negativ, wird dessen Absolutwert als Ressourcen-ID eines Symbols innerhalb einer EXE-Datei vermutet.

SymbolBreite

Typ: Integer

Wenn weggelassen, wird standardmäßig die vom System empfohlene Breite eines kleinen Symbols verwendet (normalerweise 16 Pixel). Wenn 0, wird die Originalbreite verwendet. Andernfalls geben Sie die gewünschte Breite des Symbols an (in Pixel). Wenn die via SymbolNummer angegebene Symbolgruppe mehrere Symbolgrößen enthält, wird das am ehesten passende Symbol verwendet und auf die angegebene Größe skaliert.

Bemerkungen

Derzeit ist es notwendig, die "tatsächliche Größe" beim Setzen des Symbols anzugeben, wenn dessen Transparenz erhalten bleiben soll, z.B. MeinMenü.SetIcon("Mein Menüpunkt", "Dateiname.png",, 0).

Show

Zeigt das Menü an.

MeinMenü.Show(X, Y)

Parameter

X, Y

Typ: Integer

Wenn weggelassen, wird das Menü in der Nähe des Mauszeigers angezeigt. Andernfalls geben Sie die X- und Y-Koordinate an, wo die obere linke Ecke des Menüs angezeigt werden soll. Standardmäßig sind die Koordinaten relativ zum Clientbereich des aktiven Fensters, was aber mit CoordMode oder A_CoordModeMenu geändert werden kann.

Bemerkungen

Wenn das Menü angezeigt wird, kann der Benutzer einen Menüpunkt mit den Pfeiltasten, Tastaturkurzbefehlen (unterstrichene Buchstaben) oder mit dem Mauszeiger auszuwählen.

Alle Arten von Kontextmenüs, einschließlich Untermenüs und dem Tray-Menü, können angezeigt werden. Allerdings wird eine Ausnahme ausgelöst, wenn MeinMenü ein MenuBar-Objekt ist.

ToggleCheck

Setzt ein Häkchen, sofern noch nicht geschehen, oder entfernt es wieder.

MeinMenü.ToggleCheck(MenüpunktName)

Parameter

MenüpunktName

Typ: Zeichenkette

Name oder Position eines Menüpunkts. Siehe MenüpunktName.

ToggleEnable

Verbietet die Interaktion mit einem Menüpunkt, falls noch nicht geschehen, oder erlaubt sie wieder.

MeinMenü.ToggleEnable(MenüpunktName)

Parameter

MenüpunktName

Typ: Zeichenkette

Name oder Position eines Menüpunkts. Siehe MenüpunktName.

Uncheck

Entfernt das Häkchen (sofern vorhanden) von einem Menüpunkt.

MeinMenü.Uncheck(MenüpunktName)

Parameter

MenüpunktName

Typ: Zeichenkette

Name oder Position eines Menüpunkts. Siehe MenüpunktName.

Eigenschaften

ClickCount

Ermittelt oder setzt, wie oft das Tray-Symbol geklickt werden muss, um den Standardmenüpunkt auszuwählen.

AktuelleAnzahl := MeinMenü.ClickCount
MeinMenü.ClickCount := NeueAnzahl

AktuelleAnzahl ist NeueAnzahl, falls zugewiesen, andernfalls standardmäßig 2.

NeueAnzahl kann 1 sein, wodurch das Tray-Symbol nur einmal angeklickt werden muss, um den Standardmenüpunkt auszuwählen, oder 2, um zum Standardverhalten (Doppelklick) zurückzukehren. Jeder andere Wert ist ungültig und löst eine Ausnahme aus.

Default

Ermittelt oder setzt den Standardmenüpunkt.

AktuellerStandard := MeinMenü.Default
MeinMenü.Default := MenüpunktName

AktuellerStandard ist der Name des Standardmenüpunkts, oder eine leere Zeichenkette, wenn es keinen gibt.

MenüpunktName ist der Name oder die Position eines Menüpunkts. Siehe MenüpunktName. Wenn MenüpunktName eine leere Zeichenkette ist, gibt es keinen Standardmenüpunkt.

Wenn Sie den Standardmenüpunkt setzen, wird der Menüpunkt in fetter Schrift dargestellt (das Setzen des Standardmenüpunkts für ein anderes Menü als das Tray-Menü ist rein kosmetischer Natur). Wenn der Benutzer das Tray-Symbol doppelt anklickt, wird der Standardmenüpunkt ausgewählt (selbst wenn die Interaktion mit diesem Menüpunkt verboten ist). Wenn es keinen Standardmenüpunkt gibt, ist der Doppelklick wirkungslos.

Der Standardmenüpunkt im Tray-Menü ist standardmäßig &Open, falls vorhanden. Wenn der &Open-Menüpunkt zum Tray-Menü hinzugefügt wird (durch Anwenden von AddStandard oder Ändern von A_AllowMainWindow), wird er auch zum Standardmenüpunkt gemacht, sofern es noch keinen gibt.

Wenn der Standardmenüpunkt gelöscht wird, wird das Menü ohne ihn angezeigt.

Handle

Gibt ein Handle eines Win32-Menüs (ein Handle vom Typ HMENU) zurück, und konstruiert es, falls nötig.

Handle := MeinMenü.Handle

Das zurückgegebene Handle verliert seine Gültigkeit, wenn das Win32-Menü zerstört wird. Dies geschieht in der Regel, wenn das Menu-Objekt freigegeben wird. Sobald das Menü zerstört ist, kann das Betriebssystem den Handle-Wert einem beliebig anderen Menü zuweisen, das danach vom Skript oder einem anderen Programm erstellt wird.

Name oder Position eines Menüpunkts. Es gelten einige allgemeine Regeln für diesen Parameter, der bei vielen Methoden zu finden ist:

Um einen Buchstaben im Namen eines Menüpunkts zu unterstreichen, stellen Sie ihm ein Und-Zeichen (&) voran. Sobald das Menü angezeigt wird, kann ein solcher Menüpunkt durch Drücken der entsprechenden Taste ausgewählt werden. Um ein direkt geschriebenes Und-Zeichen anzuzeigen, geben Sie wie folgt zwei aufeinanderfolgende Und-Zeichen an: "Speichern && Beenden"

Beim Verweis auf einen existierenden Menüpunkt via Name muss nicht zwischen Groß- und Kleinschreibung unterschieden werden, allerdings müssen alle Und-Zeichen enthalten sein. Zum Beispiel: "Ö&ffnen"

Die Namen der Menüpunkte können bis zu 260 Zeichen lang sein.

Um einen existierenden Menüpunkt via Position innerhalb des Menüs zu identifizieren, geben Sie die Position des Menüpunkts gefolgt von einem Und-Zeichen an. Zum Beispiel ist "1&" der erste Menüpunkt.

Win32-Menüs

Windows stellt eine Reihe von Funktionen und Benachrichtigungen zur Verfügung, um Menüs mit einheitlichem Aussehen und Verhalten zu erstellen, zu ändern und anzuzeigen. Wir bezeichnen ein Menü, das mit solchen Funktionen erstellt wurde, als Win32-Menü.

Beim Hinzufügen oder Ändern von Menüpunkten werden der Name und andere Eigenschaften der einzelnen Menüpunkte in das Menu-Objekt gespeichert. Ein Win32-Menü wird erstellt, wenn das Menü oder sein übergeordnetes Menü zum ersten Mal in eine GUI eingefügt oder angezeigt wird. Es wird automatisch zerstört, wenn das Menu-Objekt gelöscht wird (was geschieht, wenn dessen Referenzanzahl 0 erreicht).

Menu.Handle gibt ein Handle eines Win32-Menüs (ein Handle vom Typ HMENU) zurück, und konstruiert es, falls nötig.

Alle Änderungen, die extern via Win32-Funktionen am Menü vorgenommen werden, spiegeln sich nicht im Menu-Objekt des Skripts wider, und können verloren gehen, wenn ein Menüpunkt mit einer der internen Methoden geändert wird.

Jeder Menüpunkt bekommt eine ID zugewiesen, wenn er das erste Mal zum Menü hinzugefügt wird. Skripte können sich nicht darauf verlassen, dass ein Menüpunkt eine bestimmte ID erhält, aber sie können die ID eines Menüpunkts via GetMenuItemID abrufen, wie in Beispiel #5 gezeigt. Diese ID kann nicht mit dem Menu-Objekt verwendet werden, sondern nur mit diversen Win32-Funktionen.

Bemerkungen

Ein typisches Menü sieht wie folgt aus:

Menu

Wenn ein Menü komplett leer ist - z.B. via MeinMenü.Delete() - kann es nicht angezeigt werden. Wenn das Tray-Menü leer ist, haben Rechtsklick und Doppelklick auf das Tray-Symbol keine Wirkung (in solchen Fällen ist es üblicherweise besser, #NoTrayIcon zu verwenden).

Wenn die Rückruffunktion eines Menüpunkts gerade ausgeführt wird und der Benutzer denselben Menüpunkt erneut auswählt, wird ein neuer Thread erstellt, um dieselbe Rückruffunktion auszuführen, und der vorherige Thread unterbrochen. Um solche Ereignisse stattdessen zu puffern, geben Sie Critical in der ersten Zeile der Rückruffunktion an (allerdings werden dadurch auch andere Threads, wie z.B. das Drücken eines Hotkeys, gepuffert/verzögert).

Jede via Menüpunkt aufgerufene Funktion verwendet vorerst die Standardwerte von Einstellungen wie SendMode. Diese Standardwerte können während der Startphase des Skripts geändert werden.

Bei der Erstellung eines Menüs, dessen Inhalt nicht immer gleich ist, kann man z.B. alle Menüpunkte auf dieselbe Funktion verweisen und mit ihren Parametern bestimmen, was getan werden soll. Alternativ kann ein Funktionsobjekt, ein Closure oder eine Fat-Arrow-Funktion verwendet werden, um einen oder mehrere Werte oder Variablen an die Rückruffunktion des Menüpunkts zu binden.

GUI, Threads, Thread, Critical, #NoTrayIcon, Funktionen, Return, SetTimer

Beispiele

Fügt einen neuen Menüpunkt am Ende des Tray-Symbol-Menüs hinzu.

A_TrayMenu.Add()  ; Erstellt eine Trennlinie.
A_TrayMenu.Add("Menüpunkt1", MenuHandler)  ; Erstellt einen neuen Menüpunkt.
Persistent

MenuHandler(PunktName, PunktPos, MeinMenü) {
    MsgBox "Sie haben " PunktName " (Position " PunktPos ") ausgewählt."
}

Erstellt ein Kontextmenü, das beim Drücken eines Hotkeys angezeigt wird.

; Kontextmenü durch Hinzufügen von Menüpunkten erstellen.
MeinMenü := Menu()
MeinMenü.Add("Menüpunkt 1", MenuHandler)
MeinMenü.Add("Menüpunkt 2", MenuHandler)
MeinMenü.Add()  ; Trennlinie hinzufügen.

; Ein weiteres Menü erstellen, das als Untermenü für das obige Menü dient.
Untermenü1 := Menu()
Untermenü1.Add("Menüpunkt A", MenuHandler)
Untermenü1.Add("Menüpunkt B", MenuHandler)

; Ein Untermenü im ersten Menü erstellen (ein Rechtspfeilindikator). Wenn der Benutzer es auswählt, wird das zweite Menü angezeigt.
MeinMenü.Add("Mein Untermenü", Untermenü1)

MeinMenü.Add()  ; Trennlinie unter dem Untermenü hinzufügen.
MeinMenü.Add("Menüpunkt 3", MenuHandler)  ; Einen weiteren Menüpunkt unter dem Untermenü hinzufügen.

MenuHandler(Punkt, *) {
    MsgBox("Sie haben " Punkt " ausgewählt.")
}

#z::MeinMenü.Show()  ; Hotkey WIN+Z drücken, um das Menü anzuzeigen.

Zeigt einige der verschiedenen Elemente des Menu-Objekts.

#SingleInstance
Persistent
Tray := A_TrayMenu ; Für den praktischen Grund.
Tray.Delete() ; Vordefinierte Menüpunkte löschen.
Tray.Add() ; Trennlinie
Tray.Add("TestToggleCheck", TestToggleCheck)
Tray.Add("TestToggleEnable", TestToggleEnable)
Tray.Add("TestDefault", TestDefault)
Tray.Add("TestAddStandard", TestAddStandard)
Tray.Add("TestDelete", TestDelete)
Tray.Add("TestDeleteAll", TestDeleteAll)
Tray.Add("TestRename", TestRename)
Tray.Add("Test", Test)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

TestToggleCheck(*)
{
    Tray.ToggleCheck("TestToggleCheck")
    Tray.Enable("TestToggleEnable") ; Aktiviert auch den nächsten Test, da es die Deaktivierung von sich selbst nicht rückgängig machen kann.
    Tray.Add("TestDelete", TestDelete) ; Dasselbe wie oben.
}

TestToggleEnable(*)
{
    Tray.ToggleEnable("TestToggleEnable")
}

TestDefault(*)
{
    if Tray.Default = "TestDefault"
        Tray.Default := ""
    else
        Tray.Default := "TestDefault"
}

TestAddStandard(*)
{
    Tray.AddStandard()
}

TestDelete(*)
{
    Tray.Delete("TestDelete")
}

TestDeleteAll(*)
{
    Tray.Delete()
}

TestRename(*)
{
    static AlterName := "", NeuerName := ""
    if NeuerName != "unbenannt"
    {
        AlterName := "TestRename"
        NeuerName := "unbenannt"
    }
    else
    {
        AlterName := "unbenannt"
        NeuerName := "TestRename"
    }
    Tray.Rename(AlterName, NeuerName)
}

Test(Punkt, *)
{
    MsgBox("Sie haben " Punkt " ausgewählt.")
}

Zeigt, wie man Symbole zu Menüpunkten hinzufügt.

DateiMenü := Menu()
DateiMenü.Add("Skript-Symbol", MenuHandler)
DateiMenü.Add("Suspend-Symbol", MenuHandler)
DateiMenü.Add("Pause-Symbol", MenuHandler)
DateiMenü.SetIcon("Skript-Symbol", A_AhkPath, 2) ; 2. Symbolgruppe aus der Datei
DateiMenü.SetIcon("Suspend-Symbol", A_AhkPath, -206) ; Symbol mit Ressourcen-ID 206
DateiMenü.SetIcon("Pause-Symbol", A_AhkPath, -207) ; Symbol mit Ressourcen-ID 207
MeineMenüleiste := MenuBar()
MeineMenüleiste.Add("&Datei", DateiMenü)
MeineGui := Gui()
MeineGui.MenuBar := MeineMenüleiste
MeineGui.Add("Button",, "Beendet dieses Beispiel").OnEvent("Click", (*) => WinClose())
MeineGui.Show()

MenuHandler(*) {
    ; In diesem Beispiel machen die Menüpunkte nichts.
}

Meldet die Anzahl der Menüpunkte in einem Menü und die ID des letzten Menüpunkts.

MeinMenü := Menu()
MeinMenü.Add("Menüpunkt 1", KeineAktion)
MeinMenü.Add("Menüpunkt 2", KeineAktion)
MeinMenü.Add("Menüpunkt B", KeineAktion)

; Anzahl der Menüpunkte in einem Menü abrufen.
menüpunkt_anzahl := DllCall("GetMenuItemCount", "ptr", MeinMenü.Handle)

; ID des letzten Menüpunkts abrufen.
letzte_id := DllCall("GetMenuItemID", "ptr", MeinMenü.Handle, "int", menüpunkt_anzahl-1)

MsgBox("MeinMenü hat " menüpunkt_anzahl " Menüpunkte und der letzte Menüpunkt hat die ID " letzte_id)

KeineAktion(*) {
    ; Nichts tun.
}