GUI

Erstellt und verwaltet Fenster und Steuerelemente. Solche Fenster können zur Dateneingabe oder als individuelle Benutzerschnittstellen verwendet werden.

Gui, Unterbefehl [, Param2, Param3, Param4]

Inhaltsverzeichnis

Gui, New [, Optionen, Titel] [v1.1.04]+

Erstellt ein neues Fenster und macht es zum Standardfenster für den aktuellen Thread.

Gui, New, Optionen, Titel  ; Erstellt ein neues unbenanntes und nicht nummeriertes GUI.
Gui, Name: New, Optionen, Titel  ; Erstellt ein neues GUI, und zerstört dabei jedes vorhandene GUI mit diesem Namen.

Der Optionen-Parameter kann Optionen enthalten, die vom Haupt-GUI-Befehl unterstützt werden.

Falls der Titel-Parameter nicht vorhanden ist, wird der Dateiname des Skripts verwendet.

Beachten Sie folgende Hinweise:

Gründe, warum dieser Befehl sinnvoll ist:

Wenn kein Name angegeben ist, gilt folgendes:

Hinweis: Erst seit v1.1.08 setzt dieser Befehl das Standard-Gui, wenn ein Name angegeben wird.

Gui, Add, Steuerelement [, Optionen, Text]

Fügt ein Steuerelement in das GUI-Fenster ein (und erstellt vorher das GUI-Fenster, falls notwendig).

Steuerelement kann folgendes sein:

Zum Beispiel:

Gui, Add, Text,, Bitte Name eingeben:
Gui, Add, Edit, vName
Gui, Show

Gui, Show [, Optionen, Titel]

Lässt man die Optionen weg, wird das Fenster sichtbar gemacht, der minimierte Zustand aufgehoben (falls notwendig), das Fenster aktiviert und der Fenstertitel gesetzt. Lässt man den Titel weg, bleibt der vorherige Titel erhalten (sofern es einen gibt, ansonsten der Dateiname des Skripts).

Wenn man die Optionen X, Y, W und H weglässt, wird das Fenster seine vorherige Größe und Position beibehalten. Falls keine vorherige Position vorhanden ist, wird das Fenster automatisch auf eine der beiden Koordinatenachsen zentriert, wenn die unten erwähnten Optionen X und/oder Y fehlen. Falls eine vorherige Größe nicht wiederhergestellt werden kann, wird die Fenstergröße automatisch an den vorhandenen Steuerelementen angepasst.

Folgende Zeichenketten können in den Optionen angegeben werden (jede Zahl muss im dezimalen Format sein):

Wn: Geben Sie für n die Breite (in Pixel) des Client-Fensterbereichs an (das ist der Bereich ohne Rahmen, Titelleiste und Menüleiste des Fensters).

Hn: Geben Sie für n die Höhe des Client-Fensterbereichs an (in Pixel).

Xn: Geben Sie für n die X-Position des Fensters auf dem Bildschirm an (in Pixel). Position 0 ist die erste linke sichtbare Pixelspalte auf dem Bildschirm.

Yn: Geben Sie für n die Y-Position des Fensters auf dem Bildschirm an (in Pixel). Position 0 ist die erste obere sichtbare Pixelzeile auf dem Bildschirm.

Center: Zentriert das Fenster horizontal und vertikal auf dem Bildschirm.

xCenter: Zentriert das Fenster horizontal auf dem Bildschirm. Zum Beispiel: Gui, Show, xCenter y0.

yCenter: Zentriert das Fenster vertikal auf dem Bildschirm.

AutoSize: Passt die Fenstergröße an den aktuell sichtbaren Steuerelementen an. Diese Option ist besonders hilfreich, wenn neue Steuerelemente hinzugefügt werden, oder wenn bereits vorhandene Steuerelemente größer, kleiner, sichtbar oder unsichtbar gemacht werden. Zum Beispiel:
Gui, Show, AutoSize Center


Von den folgenden Optionen kann nur eine aktiv sein:

Minimize: Minimiert das Fenster und aktiviert das darunterliegende Fenster.

Maximize: Maximiert und aktiviert das Fenster.

Restore: Hebt die Maximierung oder Minimierung des Fensters auf, falls notwendig. Das Fenster wird dabei angezeigt und aktiviert.

NoActivate: Hebt die Maximierung oder Minimierung des Fensters auf, falls notwendig. Das Fenster wird dabei angezeigt, aber nicht aktiviert.

NA: Zeigt das Fenster an, ohne es zu aktivieren. Das Fenster bleibt falls zutreffend minimiert, aber steigt in der Z-Rangordnung nach oben (die aktuelle Rangordnung sieht man, wenn man ALT+TAB drückt). Wenn das Fenster vorher versteckt wurde, dann erscheint es so, als befände es sich direkt über dem aktiven Fenster, egal ob das aktive Fenster deaktiviert ist oder nicht.

Hide: Versteckt das Fenster und aktiviert das darunterliegende Fenster. Funktioniert genauso wie Gui Cancel, aber das versteckte Fenster darf hier weiterhin verschoben, kleiner/größer gemacht oder neu betitelt werden, ohne es anzeigen zu müssen. Zum Beispiel: Gui, Show, Hide x55 y66 w300 h200, Neuer Titel.

Gui, Submit [, NoHide]

Speichert die Inhalte der Steuerelemente in ihre zugeordneten Variablen (falls vorhanden) und versteckt das Fenster, sofern man die NoHide-Option weglässt. Mehrere Ausgabefelder eines Steuerelements, wie z. B. eine Mehrfachauswahl-ListBox, werden mit dem aktuellen Trennzeichen des Fensters voneinander abgegrenzt. Dieser Befehl kann nur funktionieren, wenn das Fenster existiert (und nicht z. B. via Gui Destroy entfernt wurde).

Gui, Cancel

Versteckt das Fenster, ohne dabei die Inhalte der Steuerelemente in ihre zugeordneten Variablen zu speichern. Dieser Befehl kann nur funktionieren, wenn das Fenster existiert (und nicht z. B. via Gui Destroy entfernt wurde).

Gui, Destroy

Bewirkt, dass das Fenster (falls vorhanden) und seine Steuerelemente entfernt, und die benutzten Systemressourcen wie z. B. Arbeitsspeicher freigegeben werden. Falls das Skript später das Fenster neu erstellt, beginnen alle Fenstereigenschaften wie Farbe und Schriftart wieder mit ihren Standardwerten (als hätte das Fenster nie existiert). Selbst wenn man Gui Destroy nicht verwendet - alle GUI-Fenster werden automatisch entfernt, sobald das Skript beendet wird.

Gui, Font [, Optionen, Schriftart]

Bestimmt die Schriftart, die Schriftgröße, den Schriftstil und/oder die Textfarbe für alle nachfolgenden Steuerelemente, die neu hinzugefügt werden. Zum Beispiel:

Gui, Font, s10, Verdana  ; Schriftart Verdana mit Größe 10.

Wenn man die letzten beiden Parameter weglässt, werden die Standardeinstellungen für die Schriftart, Schriftgröße und Textfarbe wiederhergestellt.

Schriftart kann der Name einer beliebigen Schriftart sein (siehe Tabelle für Schriftarten). Lässt man die Schriftart weg oder wird sie im System nicht gefunden, bleibt die vorherige Schriftart erhalten (sofern es eine gibt, ansonsten die Standardschriftart des Systems). So könnte man mit mehreren Schriftarten sicherstellen, dass bei verschiedenen Systemen eine von denen verwendet wird. Wenn man die folgenden Befehle in dieser Reihenfolge verwendet, wird Verdana Vorrang vor Arial haben, welches wiederum Vorrang vor MS Sans Serif haben wird:

Gui, Font,, MS sans serif
Gui, Font,, Arial
Gui, Font,, Verdana  ; Bevorzugte Schriftart.

Wenn der Optionen-Parameter leer ist, werden die zuvor benutzten Attribute der Schriftart weiter verwendet. Ansonsten sind folgende Optionsbuchstaben möglich:

C: Der Name einer Farbe (siehe Farbtabelle) oder ein RGB-Wert, oder das Wort "Default", um die Standardfarbe des Systems wiederherzustellen (üblicherweise schwarz). Beispielwerte: cRed, cFFFFAA, cDefault. Hinweis: Buttons können nicht mit einer benutzerdefinierten Farbe versehen werden. Fügen Sie ein C und direkt danach die gewünschte Farbe in den Optionen ein, um die Textfarbe eines bestimmten Steuerelements zu ändern. Zum Beispiel: Gui, Add, Text, cRed, Mein Text.

S: Größe (in Punkten). Zum Beispiel: s12 (muss dezimal sein).

W: Breite (Dicke). Eine Nummer zwischen 1 und 1000 (400 ist normal und 700 ist fett). Zum Beispiel: w600 (muss dezimal sein).

Zudem werden folgende Wörter unterstützt: bold, italic, strike, underline und norm (übersetzt: fett, kursiv, durchgestrichen, unterstrichen und normal). Norm stellt die normale Breite/Dicke der Schrift wieder her und deaktiviert italic, strike und underline (Farbe und Größe bleiben unberührt). Man kann mit norm zuerst alle Attribute deaktivieren und dann bestimmte Attribute wieder aktivieren. So zum Beispiel könnte man mit norm italic die Schrift normalisieren und sie dann kursiv machen.

Mehrere Optionen müssen mit einem Leerzeichen voneinander getrennt werden. Zum Beispiel: cBlue s12 bold.

Bei mehreren GUI-Fenstern sollte man beachten, dass jedes Fenster seine eigenen gespeicherten Schrifteinstellungen abruft, wenn neue Steuerelemente erstellt werden.

Pro forma ist noch zu erwähnen, dass das Betriebssystem vorgefertigte Dialogfenster anbietet, die der Benutzer zum Auswählen einer Farbe, einer Schriftart oder eines Symbols verwenden kann. Solche Dialogfenster können via DllCall() angezeigt werden, siehe dazu www.autohotkey.com/forum/topic17230.html.

Q: [AHK_L 19+]: Textdarstellungsqualität. Zum Beispiel: q3. Nach Q muss eine Zahl aus der folgenden Tabelle erfolgen:

0 = DEFAULT_QUALITYDie Darstellung der Schriftart spielt keine Rolle.
1 = DRAFT_QUALITYDie Darstellung der Schriftart ist ein wenig unwichtiger als wie bei PROOF_QUALITY.
2 = PROOF_QUALITYDie Zeichenqualität der Schriftart ist wichtiger als die exakte Übereinstimmung mit logischen Schriftattributen (z. B. fett, kursiv und so weiter).
3 = NONANTIALIASED_QUALITYSchrift wird nicht geglättet.
4 = ANTIALIASED_QUALITYSchrift wird geglättet, wenn die Schriftart so etwas unterstützt und deren Größe nicht zu klein und nicht zu groß ist.
5 = CLEARTYPE_QUALITYWindows XP und höher: Der Text wird gegebenenfalls mithilfe der ClearType-Kantenglättung dargestellt.

Um mehr darüber zu erfahren, was diese Werte bedeuten, siehe MSDN: CreateFont.

Standardmäßig gilt die höchste Qualitätseinstellung. Deshalb wird dieses Feature eher dazu verwendet, Kantenglättung zu deaktivieren, um den Text bei bestimmten Fällen besser lesbar zu machen.

Gui, Color [, Fensterfarbe, Steuerelementfarbe]

Bestimmt die Hintergrundfarbe des Fensters und/oder der Steuerelemente. Mit Fensterfarbe wird der Hintergrund des GUI-Fensters selbst bestimmt. Steuerelementfarbe gilt für alle gegenwärtigen und zukünftigen Steuerelemente im Fenster (beachte dabei, dass einige Steuerelemente benutzerdefinierte Farben nicht unterstützen). Steuerelementfarbe hat nur eine einmalige Auswirkung auf ListView- und TreeView-Steuerelemente; nachfolgende Änderungen der Steuerelementfarbe sind wirkungslos. In so einem Fall kann man mit GuiControl +BackgroundFF9977, MeineListview die Farbe explizit ändern.

Lass den entsprechenden Parameter leer, wenn die aktuelle Farbe beibehalten werden soll. Ansonsten kann eine der 16 HTML-Hauptfarben oder ein 6-stelliger RGB-Wert (0x-Präfix ist optional) angegeben werden, oder das Wort "Default", um die Standardfarbe wiederherzustellen. Beispielwerte: Silver, FFFFAA, 0xFFFFAA, Default.

Ein Fenster benutzt als Hintergrundfarbe standardmäßig die vordefinierte Farbe eines Buttons, während ein Steuerelement als Hintergrundfarbe standardmäßig die vordefinierte Farbe eines Fensters benutzt (üblicherweise weiß).

Die Farbe der Menüleiste und ihre Untermenüs können wie folgt geändert werden: Menu, MeineMenüleiste, Color, White.

Mit WinSet TransColor kann der Hintergrund transparent gemacht werden. Allerdings werden dabei eventuell vorhandene Buttons ebenfalls transparent. Daher ist es sinnvoll, die aktuelle Fensterfarbe via Gui Color zu ändern und diese Farbe dann transparent zu machen. Zum Beispiel:

Gui, Color, EEAA99
Gui +LastFound  ; Macht das GUI-Fenster zum zuletzt gefundenen Fenster.
WinSet, TransColor, EEAA99

Die folgenden Zeilen können hinzugefügt werden, um den Rahmen und die Titelleiste eines Fensters zu entfernen, das bereits transparent gemacht wurde:

Gui -Caption  ; Oder "Gui, GuiName:-Caption", falls es nicht das Standardfenster ist.

Weiter unten finden Sie das Beispiel einer Bildschirmanzeige (OSD), die zeigt, wie diese Methode praktisch eingesetzt werden kann.

Gui, Margin [, X, Y]

X und Y definieren den Pixelabstand zwischen der linken/rechten bzw. oberen/unteren Fensterseite und Steuerelementen, die aufgrund fehlender X- oder Y-Koordinate automatisch positioniert wurden. Diese Werte bestimmen auch den vertikalen und horizontalen Abstand zwischen automatisch positionierten Steuerelementen. Der Befehl Gui Show wird diese Werte einkalkulieren, wenn er das Fenster erstellen und seine Größe berechnen muss (und wenn er ohne Größenangabe verwendet wird).

Gui, Margin beeinflusst nur das Standardfenster, während Gui, Name:Margin nur Einfluss auf das benannte Fenster hat. Wenn dieser Befehl beim Hinzufügen des ersten Steuerelements fehlt, bekommt das Fenster einen vordefinierten Abstand auf jeder Seite, proportional zur Größe der aktuell ausgewählten Schriftart (0.75 x Schrifthöhe für Unten & Oben, 1.25 x Schriftbreite für Links & Rechts).

Man kann die Größe der Abstände ändern, während Steuerelemente hinzugefügt werden. Allerdings gelten solche Änderungen nur für Steuerelemente, die nachträglich hinzugefügt werden, nicht für Steuerelemente, die bereits vorhanden sind. Wenn man X oder Y weglässt, bleibt der entsprechende Abstand unverändert.

Gui, +/-Option1 +/-Option2 ...

Nach dem GUI-Befehl können eine oder mehrere Optionen angegeben werden. Aus Performance-Gründen ist es besser, alle Optionen auf einer Zeile zu setzen, bevor das Fenster erstellt wird (das heißt, bevor andere Unterbefehle wie Gui Add verwendet werden).

Der Effekt des Befehls ist kumulativ (summierend). Das heißt, dass dieser Befehl nur die explizit angegebenen Optionen ändert, alle anderen bleiben unverändert.

Geben Sie ein Pluszeichen an, um die Option hinzuzufügen, und ein Minuszeichen, um sie zu entfernen. Zum Beispiel:

Gui +Resize -MaximizeBox  ; Ändert die Einstellungen des Standard-GUI-Fensters.
Gui MeinGui:+Resize -MaximizeBox  ; Ändert die Einstellungen des GUI's namens MeinGui.

AlwaysOnTop: Gibt dem Fenster die Eigenschaft, immer im Vordergrund bzw. immer vor allen anderen Fenstern sichtbar zu sein, was den gleichen Effekt hat wie WinSet AlwaysOnTop.

Border: Stattet das Fenster mit einem dünnen Rahmen aus. Diese Option benutzt man eher selten.

Caption (standardmäßig vorhanden): Stattet das Fenster mit einer Titelleiste und einem dicken Rahmen aus. Wenn man WinSet TransColor bei einem Fenster anwendet, sollte man die Titelleiste eines Fensters erst entfernen, nachdem man es damit transparent gemacht hat.

Delimiter: Bewirkt, dass das Fenster nicht den senkrechten Strich (|), sondern ein beliebig anderes Zeichen als Trennzeichen verwendet, wenn die Inhalte der Steuerelemente via Gui Add hinzugefügt, via GuiControl modifiziert, oder via Gui Submit oder GuiControlGet abgerufen werden. Geben Sie das gewünschte Trennzeichen direkt nach dem Wort Delimiter an. Zum Beispiel könnte man mit Gui +Delimiter`n ein Zeilenumbruchszeichen als Trennzeichen definieren, das besonders gut für Fortsetzungsbereiche geeignet wäre. Mit Gui +Delimiter| könnte man wiederum das vordefinierte Trennzeichen wiederherstellen. Wenn ein Leer- oder Tabulatorzeichen notwendig ist, kann man Gui +DelimiterSpace oder Gui +DelimiterTab angeben. Das Ändern des Trennzeichens wirkt sich auf alle vorhandenen und nachfolgenden Threads aus, die sich auf dieses bestimmte Fenster beziehen.

Disabled: Deaktiviert das Fenster, wodurch der Benutzer nicht länger mit den Steuerelementen interagieren kann. Diese Option wird oft bei Fenstern benutzt, die untergeordnete Fenster haben (siehe Owner).

DPIScale [v1.1.11+]: Verwenden Sie Gui -DPIScale, um die üblicherweise aktive DPI-Skalierung zu deaktivieren. Wenn das System eine benutzerdefinierte DPI-Skalierung aktiv hat, werden Gui-Befehle versuchen, die Steuerelemente verhältnismäßig gleich groß aussehen zu lassen (aber in höherer Auflösung). Bei einer DPI von beispielsweise 144 (150%) würde Gui Show, w100 das Gui 150 Pixel breit machen (A_GuiWidth enthält aber weiterhin 100). A_ScreenDPI enthält die aktuelle DPI des Systems.

DPI-Skalierung gilt nur für Gui-Befehle, daher werden Koordinaten, die direkt von anderen Quellen stammen, wie z. B. ControlGetPos oder WinGetPos, nicht funktionieren. Es gibt eine Reihe von Möglichkeiten, damit umzugehen:

HwndAusgabeVar [v1.1.04+]: Diese Option speichert das Fenster-Handle (HWND) des GUI in AusgabeVar. Zum Beispiel: Gui +HwndMeinGuiHwnd. Innerhalb einer Funktion wird MeinGuiHwnd als dynamische Variable behandelt. Das HWND eines GUI wird oft in Verbindung mit PostMessage, SendMessage und DllCall verwendet. Außerdem kann es direkt als ahk_id-Fenstertitel oder anstelle eines GUI-Namens benutzt werden; zum Beispiel Gui %MeinGuiHwnd%:Destroy.

Label [v1.0.44.09+]: Ändert die speziellen Labelnamen des Fensters. Gui MeinGui:+LabelMeinGui_On würde das Fenster beispielsweise auf die Label MeinGui_OnClose und MeinGui_OnSize zugreifen lassen, anstatt auf MeinGuiGuiClose und MeinGuiGuiSize. Anders gesagt wird die Zeichenkette "MeinGuiGui" in den speziellen Labelnamen mit "MeinGui_On" ersetzt. Auf diese Weise können die Label auch von mehreren Fenstern benutzt werden (in diesem Fall kann das Skript auf A_Gui zurückgreifen, um zu ermitteln, welches Fenster die Subroutine gestartet hat).

LastFound: Markiert das aktuelle Fenster als das zuletzt gefundene Fenster (das aber in einem GUI-Thread eigentlich automatisch geschieht), wodurch Befehle wie WinSet sogar auf versteckte Fenster zugreifen können (ohne dass DetectHiddenWindows notwendig ist). So kann man die Eigenschaften des Fensters ändern, ohne es zuvor anzeigen zu müssen. Zum Beispiel:

Gui +LastFound
WinSet, TransColor, %BeliebigeFarbe% 150
Gui Show

LastFoundExist [v1.0.43.09+]: Diese Option funktioniert nur, wenn sie die einzige Option ist. +LastFoundExist ist funktionell identisch zu +LastFound - der einzige Unterschied ist, dass das Fenster nicht erstellt wird, wenn es noch nicht existiert. Der Hauptnutzen von dieser Option ist es zu erkennen, ob ein bestimmtes GUI-Fenster bereits vorhanden ist. Zum Beispiel:

Gui MeinGui:+LastFoundExist
IfWinExist
    MsgBox GUI "MeinGui" existiert bereits.

MaximizeBox: Aktiviert die Titelleistenschaltfläche zum Maximieren des Fensters. Resize enthält diese Option auch (weiter unten zu finden).

MinimizeBox (standardmäßig vorhanden): Aktiviert die Titelleistenschaltfläche zum Minimieren des Fensters.

MinSize und MaxSize [v1.0.44.13+]: Bestimmen die minimale und/oder maximale Größe des Fensters. Diese Optionen sind zum Beispiel relevant, wenn man den Benutzer daran hindern will, das Fenster uneingeschränkt zu verkleinern oder zu vergrößern. Geben Sie MinSize und/oder MaxSize ohne Suffix an, um die aktuelle Größe des Fensters als Grenzwert zu nutzen (wenn das Fenster keine aktuelle Größe hat, wird die gesetzte Größe des ersten Gui Show verwendet). Alternativ können Sie auch die Breite, ein X und dann die Höhe anfügen; zum Beispiel: Gui +Resize +MinSize640x480. Diese Größen (in Pixel) beziehen sich auf den Clientbereich des Fensters (das ist der Bereich ohne Rahmen, Titelleiste und Menüleiste). Geben Sie dezimale Zahlen an, nicht hexadezimale.

Man kann eine der Größenangaben weglassen, um diese unverändert zu lassen (z. B. +MinSize640x oder +MinSizex480). Desweiteren kann man Min/MaxSize mehrmals angeben, um die aktuelle Fenstergröße für eine Größenangabe und eine eindeutige Größe für die andere Größenangabe zu verwenden. Zum Beispiel würde +MinSize +MinSize640x die aktuelle Fensterhöhe als Minimalhöhe und 640 Pixel als Minimalbreite definieren.

Lässt man MinSize und MaxSize komplett weg, gelten die Standardwerte des Betriebssystems (ähnlich wie Gui -MinSize -MaxSize, welches auch die Standardwerte wiederherstellen würde). Hinweis: Der Benutzer kann ein Fenster nur größer oder kleiner machen, wenn die Option +Resize vorhanden ist.

OwnDialogs: Gui +OwnDialogs bewirkt, dass alle nachfolgenden MsgBox-, InputBox-, FileSelectFile- oder FileSelectFolder-Dialogfenster im aktuellen Thread (z. B. ButtonOK-Subroutine) als Unterfenster des aktuellen Fensters definiert werden. Solche Dialogfenster werden dabei modal. Das heißt, dass der Benutzer erst wieder mit dem GUI-Fenster interagieren kann, wenn das Dialogfenster geschlossen wird. ToolTip-, Progress- und SplashImage-Fenster können hingegen nicht modal sein, selbst wenn sie als Unterfenster definiert werden. Sie werden immer im Vordergrund sein. In beiden Fällen werden untergeordnete Dialogfenster automatisch zerstört, sobald ihr GUI-Fenster zerstört wird.

Normalerweise ist es nicht notwendig, diese Einstellung wieder zu deaktivieren, weil sie keine Auswirkung auf andere Threads hat. Verwenden Sie je nach Bedarf Gui -OwnDialogs, um ein Thread sowohl untergeordnete als auch nicht-untergeordnete Dialogfenster anzeigen zu lassen.

Wenn kein Fensternamepräfix angegeben ist -- beispielsweise Gui +OwnDialogs anstelle von Gui MeinGui:+OwnDialogs -- werden die Dialogfenster dem Standardfenster des Threads untergeordnet.

Owner: Mit +Owner kann das Fenster als Unterfenster eines anderen Fensters definiert werden. Ein untergeordnetes Fenster hat standardmäßig keinen eigenen Taskleisten-Button, außerdem befindet es sich immer vor dem Hauptfenster. Es wird automatisch zerstört, sobald das Hauptfenster zerstört wird. +Owner sollte man erst verwenden, wenn das Hauptfenster des Unterfensters bereits erstellt ist. Seit v1.1.05 gilt diese Einschränkung nicht mehr. Es gibt zwei Möglichkeiten, wie man +Owner verwenden kann:

Gui, MeinGui:+OwnerAnderesGui  ; Definiert MeinGui als Unterfenster von AnderesGui.
Gui, MeinGui:+Owner  ; Definiert MeinGui als Unterfenster vom Hauptfenster des Skripts und bewirkt, dass die Schaltfläche in der Taskleiste fehlt.

[v1.1.03+]: Unmittelbar nach +Owner kann der Name oder die Nummer eines bereits vorhandenen Gui-Fensters, oder das HWND eines nicht-untergeordneten Fensters erfolgen.

Hinweis zur Kompatibilität: Seit v1.1.03 bewirkt +Owner, dass der WS_CHILD-Style entfernt und der WS_POPUP-Style gesetzt wird. Um ein Gui als Unterfenster eines beliebigen Fensters zu definieren, müssen Skripte entweder die +Parent-Option verwenden, oder sie überschreiben die entsprechenden Styles, nachdem die Option +Owner gesetzt wurde.

Um eine Interaktion mit dem übergeordneten Fenster zu verbieten, während eines seiner Unterfenster sichtbar ist, deaktiviert man das übergeordnete Fenster via Gui +Disabled. Später kann man das übergeordnete Fenster, nachdem sein Unterfenster geschlossen oder entfernt wurde, wieder mit Gui -Disabled aktivieren. Diese Anweisung sollte aber erfolgen, bevor das Unterfenster geschlossen bzw. entfernt wird, um das übergeordnete Fenster automatisch reaktivieren zu lassen.

Parent [v1.1.03+]: Unmittelbar nach +Parent kann der Name oder die Nummer eines bereits vorhandenen Gui-Fensters, oder das HWND eines beliebigen Fensters oder Steuerelements erfolgen, um es als Unterfenster zu definieren. Mit -Parent kann dieser Zustand wieder rückgängig gemacht werden. Diese Option funktioniert auch, nachdem das Fenster erstellt wurde.

Resize: Aktiviert die Größenänderung des Fensters und die Titelleistenschaltfläche zum Maximieren des Fensters. Mit +Resize -MaximizeBox kann die Schaltfläche zum Maximieren des Fensters versteckt werden, falls nötig.

SysMenu (standardmäßig vorhanden): Geben Sie -SysMenu (minus SysMenu) an, um das Systemmenü und Symbol aus der oberen linken Ecke des Fensters zu entfernen. Die Titelleistenschaltflächen zum Minimieren, Maximieren und Schließen werden dabei auch versteckt.

Theme: -Theme bewirkt, dass alle nachfolgenden Steuerelemente im klassischen Design angezeigt werden (nur ab Windows XP). Um später weitere Steuerelemente zu erstellen, die dem aktuellen Design des Systems angehören, schaltet man es via +Theme wieder ein. Hinweis: Diese Option funktioniert nicht, wenn das Betriebssystem älter als Windows XP ist, oder wenn in Windows XP selbst das klassische Design aktiv ist. Wenn diese Einstellung nur für ein bestimmtes Steuerelement gelten soll, kann bei seiner Erstellung +Theme oder -Theme in den Optionen eingefügt werden.

ToolWindow: Verkleinert die Titelleiste und deaktiviert die Taskleistenschaltfläche des Fensters.

(Unbenannter Style): Geben Sie ein Plus- oder Minuszeichen an und fügen Sie direkt danach eine dezimale oder hexadezimale Style-Nummer ein.

(Unbenannter ExStyle): Geben Sie ein Plus- oder Minuszeichen an und fügen Sie direkt danach ein "E" und eine dezimale oder hexadezimale erweiterte Style-Nummer ein. +E0x40000 würde beispielsweise den WS_EX_APPWINDOW-Style hinzufügen, um die Taskleistenschaltfläche eines Fensters zu aktivieren, das aktuell keine hat. Weitere nicht-dokumentierte Styles findet man auf www.microsoft.com mit Suchbegriffen wie WS_EX_APPWINDOW.

Stattet das Fenster mit einer Menüleiste aus. Verwenden Sie dazu den Menu-Befehl, um ein gewöhnliches Menü zu erstellen. Zum Beispiel:

Menu, Dateimenü, Add, Ö&ffnen`tCtrl+F, MenüDateiÖffnen  ; Siehe untere Bemerkungen zu Ctrl+F.
Menu, Dateimenü, Add, &Beenden, MenuHandler
Menu, Hilfsmenü, Add, Inf&o, MenuHandler
Menu, MeineMenüleiste, Add, &Datei, :Dateimenü  ; Fügt die oben erstellten Untermenüs hinzu.
Menu, MeineMenüleiste, Add, &?, :Hilfsmenü
Gui, Menu, MeineMenüleiste

Auf der ersten Zeile oben sieht man Ö&ffnen in Kombination mit Ctrl+F (mit einem Tabulatorzeichen dazwischen). Diese Schreibweise ermöglicht dem Benutzer, ein Tastenkürzel zu drücken, um den Menüpunkt zu aktivieren, ohne eine langwierige Navigation über sich ergehen zu lassen. [v1.1.04+]: Tastenkürzel, die die Standard-Modifikatoren Ctrl, Alt und Shift enthalten, werden automatisch als Keyboard Accelerator für das GUI registriert. Keyboard Accelerators ohne Modifikatoren können nur durch ungewöhnliche Mitteln wie IME oder ALT+NNNN ausgelöst werden.

Wenn eine bestimmte Tastenkombination nicht wie erwartet automatisch funktioniert, gäbe es die Alternative, einen kontextabhängigen Hotkey zu verwenden. Beachten Sie aber, dass solche Hotkeys üblicherweise nicht durch Send ausgelöst werden können und dass es zu Komplikationen mit anderen Skripten kommen kann.

Mit Gui Menu (also ohne den letzten Parameter) kann die aktuelle Menüleiste des Fensters entfernt werden.

Ein Menü, das als Menüleiste verwendet wurde, sollte später nicht als Popup-Menü oder Untermenü benutzt werden. Menüleisten benötigen intern ein anderes Format (allerdings gilt diese Einschränkung nicht für ihre Untermenüs). Umgehen Sie dieses Problem einfach, indem Sie zweimal das gleiche Menü erstellen und eines davon der Menüleiste zuweisen.

Das Anwenden von destruktiven Menu-Unterbefehlen wie Delete und DeleteAll auf eine Menüleiste (und in einigen Fällen auf ihre Untermenüs) ist wirkungslos und verursacht eine Fehlermeldung (sofern UseErrorLevel nicht aktiv ist). Führen Sie die folgenden Schritte durch, um solche Änderungen vornehmen zu können: 1) entfernen Sie die Menüleiste mit Gui Menu (Menüname muss weggelassen werden); 2) führen Sie die gewünschte Änderungen durch; 3) fügen Sie die Menüleiste via Gui, Menu, MeineMenüleiste wieder hinzu.

Gui, Hide / Minimize / Maximize / Restore

Gui Hide ist das gleiche wie Gui Cancel. Die anderen drei Befehle machen das Fenster wieder sichtbar (falls notwendig) und führen dann die entsprechenden Operationen aus. Diese Befehle sind wirkungslos, wenn das Fenster nicht existiert -- weil es beispielsweise via Gui Destroy zerstört wurde.

Gui, Flash [, Off]

Lässt die Taskleistenschaltfläche des Fensters einmal aufblinken. Dazu wird die Farbe der Titelleiste und/oder der Taskleistenschaltfläche (falls vorhanden) invertiert. Das optionale Wort "OFF" stellt die Originalfarben der Titelleiste und Taskleistenschaltfläche wieder her (die tatsächliche Auswirkung variiert aber je nach Betriebssystemversion). Das folgende Beispiel lässt das Fenster dreimal aufblinken, weil jedes Paar von "Gui Flash" die Farben des Fensters invertiert und wiederherstellt:

Loop 6
{
    Gui Flash
    Sleep, 500  ; Dieser Wert ist ziemlich empfindlich; Änderungen können zu unerwarteten Ergebnissen führen.
}

Gui, GuiName:Default

Ändert den GUI-Standardfensternamen des aktuellen Threads. GuiControl, GuiControlGet und der Gui-Befehl verwenden ihn standardmäßig, wenn bei ihnen ein GUI-Fenstername fehlt. Das folgende Beispiel zeigt, wie man den GUI-Standardname des Fensters zu "MeinGui" ändern kann: Gui MeinGui:Default. Siehe "Standardnummer eines Threads", wenn Sie mehr darüber erfahren wollen.

[v1.1.23+]: Die interne Variable A_DefaultGui enthält den Namen oder die Nummer des Standard-GUI.

Positionierung und Layout mittels SmartGUI Creator

In der Regel reichen die im nächsten Abschnitt beschriebenen Optionen für einfache Layouts vollkommen aus. Für komplexere Layouts ist z. B. der SmartGUI Creator von Rajat besser geeignet, weil man mit so einem Tool ein GUI-Fenster visuell gestalten kann. Also um genau das zu bekommen, was man sieht (WYSIWYG). Der SmartGUI Creator kann von www.autohotkey.com/docs/SmartGUI/ kostenlos heruntergeladen werden.

Position und Größe von Steuerelementen anpassen

Wenn man einige Größenangaben oder Koordinaten in Optionen absichtlich weglässt, wird das Steuerelement relativ zum vorherigen Steuerelement positioniert und/oder je nach Inhalt und Typ automatisch größer/kleiner gemacht.

Folgende Optionen werden unterstützt:

R: Textzeilen (kann eine Gleitkommazahl wie bei R2.5 enthalten). R ist oft besser als H (Höhe). Wenn R und H gleichzeitig vorhanden sind, wird R Vorrang haben. Bei einer GroupBox bestimmt diese Einstellung die Menge an Steuerelementen, für die innerhalb der Box Platz geschaffen werden soll. Bei DropDownLists, ComboBoxes und ListBoxes ist das die Anzahl an Einträgen, die gleichzeitig im Listenbereich sichtbar sein sollen (aber in Windows XP oder höher ist es oft besser, die Optionen R und H bei DropDownList und ComboBox wegzulassen, damit die aufklappbare Liste von der verfügbaren Höhe des Desktops profitieren kann). Bei allen anderen Steuerelementen ist R die Anzahl der Textzeilen, die sichtbar im Steuerelement reinpassen können.

W: Breite in Pixel. Wenn diese Option fehlt, wird die Breite bei einigen Steuerelementarten automatisch anhand ihrer Inhalte berechnet. Alle anderen Steuerelementarten haben standardmäßig folgende Breiten:
Tab-Steuerelemente: Das 30-fache der aktuellen Schriftgröße, plus das 3-fache des X-Abstands.
Vertikale ProgressBars: Das 2-fache der aktuellen Schriftgröße.
Horizontale ProgressBars, horizontale Slider, DropDownLists, ComboBoxes, ListBoxes, GroupBoxes, Edits und Hotkeys: Das 15-fache der aktuellen Schriftgröße (außer GroupBoxes, die mit 18 multipliziert werden, um innerhalb der Abstände Platz zu schaffen).

H: Höhe in Pixel. Wenn man sowohl H als auch R weglässt, verwenden DropDownLists, ComboBoxes, ListBoxes und leere mehrzeilige Edit-Steuerelemente standardmäßig eine Höhe von 3 Zeilen; GroupBoxes standardmäßig 2 Zeilen; vertikale Slider und ProgressBars standardmäßig 5 Zeilen; horizontale Slider standardmäßig 30 Pixel (außer wenn eine Dicke angegeben wurde); horizontale ProgressBars standardmäßig das 2-fache der aktuellen Schriftgröße; Hotkey-Steuerelemente standardmäßig 1 Zeile; und Tab-Steuerelemente standardmäßig 10 Zeilen. Bei allen anderen Steuerelementen wird die Höhe automatisch anhand ihrer Inhalte berechnet. Die Höhe H von DropDownLists und ComboBoxes ist eine Kombination aus Höhe des sichtbaren Teils und Höhe des Listenbereichs (selbst wenn die Höhe zu niedrig ist, wird mindestens immer ein Element in der Liste sichtbar sein). Außerdem wäre es ratsam, die gewünschte Höhe via R statt via H zu definieren, um die vollständige Sichtbarkeit der Textzeilen zu gewährleisten.

wp+n, hp+n, wp-n und hp-n (wobei n eine beliebige Zahl ist) können dazu verwendet werden, die Größen eines Steuerelements an die Größen des zuvor hinzugefügten Steuerelements anzupassen, optional mit einem Plus- oder Minuszeichen. Zum Beispiel würde wp die Breite eines Steuerelements auf die Breite des vorherigen Steuerelements setzen, und wp-50 würde die Breite des vorherigen Steuerelements verwenden, subtrahiert mit 50.

X: X-Position. Zum Beispiel würde x0 y0 das Steuerelement in die obere linke Ecke des Client-Bereichs positionieren (das ist der Fensterbereich ohne Rahmen, Titelleiste und Menüleiste). Wenn Y vorhanden ist und X fehlt, wird das Steuerelement auf der rechten Seite der zuvor eingefügten Steuerelementen positioniert, wie als würde eine neue "Spalte" beginnen.

Y: Y-Position. Wenn X vorhanden ist und Y fehlt, wird das Steuerelement auf der unteren Seite der zuvor eingefügten Steuerelementen positioniert, wie als würde eine neue "Zeile" beginnen.

Das Weglassen von X und/oder Y hat den Vorteil, dass sich ein GUI-Layout automatisch an zukünftigen Änderungen bzgl. der Größe von Steuerelementen oder Schriftart anpassen kann. Bei absoluten Steuerelementpositionen müsste man jedes einzelne Steuerelement manuell verschieben, das sich unterhalb oder rechts neben dem Steuerelement befindet, welches vergrößert oder verkleinert wurde.

Wenn sowohl X als auch Y fehlen, wird das Steuerelement unterhalb des vorherigen Steuerelements positioniert, unter Beachtung des vordefinierten Abstands.

Bei X und Y kann optional ein Pluszeichen vor der Zahl angefügt werden, um ein Steuerelement relativ zum rechten oder unteren Rand des zuvor eingefügten Steuerelements zu positionieren. Zum Beispiel würde Y+10 das Steuerelement unterhalb des vorherigen Steuerelements mit einem Abstand von 10 Pixel positionieren, anstatt auf den vordefinierten Abstand zurückzugreifen. X+10 hingegen würde das Steuerelement rechts neben dem vorherigen Steuerelement mit einem Abstand von 10 Pixel positionieren. Negative Zahlen wie bei X-10 sind für die absolute Positionierung vorbehalten. Um einen negativen Abstand zu erreichen, muss zusätzlich ein Pluszeichen davorgesetzt werden. Zum Beispiel: X+-10.

[v1.1.16+]: Bei X+ und Y+ kann der Buchstabe M als Ersatz für den aktuellen Abstand (Margin) des Fensters verwendet werden. Zum Beispiel würde x+m den rechten Rand des vorherigen Steuerelements verwenden, plus den voreingestellten Innenabstand. xp y+m würde ein Steuerelement unterhalb des vorherigen Steuerelements positionieren, während eine X-Koordinate allein normalerweise standardmäßig yp bedeuten würde.

xp+n, yp+n, xp-n und yp-n (wobei n eine beliebige Zahl ist) können dazu verwendet werden, Steuerelemente relativ zur linken oberen Ecke des vorherigen Steuerelements zu positionieren, um beispielsweise Steuerelemente in einer GroupBox einzuschließen.

xm und ym können dazu verwendet werden, ein Steuerelement jeweils am linken und rechten Abstand des Fensters zu positionieren (nach diesen Optionen kann ein Plus-/Minuszeichen und eine Zahl folgen). Wenn man ym ohne X-Position verwendet, wird das Steuerelement am oberen Abstand positioniert, aber rechts neben allen zuvor eingefügten Steuerelementen, wie als würde eine neue "Spalte" beginnen. Umgekehrt gilt das gleiche (xs ohne Y-Position).

xs und ys: Diese Optionen sind ungefähr das gleiche wie xm und ym, allerdings beziehen sie sich auf Koordinaten, die via Section-Option eines zuvor hinzugefügten Steuerelements gespeichert wurden (das erste Steuerelement eines Fensters beginnt immer eine neue Sektion, egal ob diese Option vorhanden ist oder nicht). Wenn man ys ohne X-Position verwendet, wird das Steuerelement auf die zuvor gespeicherte Y-Position positioniert, aber rechts neben allen Steuerelementen, die seit der letzten Verwendung von Section hinzugefügt wurden; wie als würde eine neue "Spalte" innerhalb der Sektion beginnen. Zum Beispiel:

Gui, Add, Edit, w600  ; Fügt ein breites Eingabefeld am oberen Rand des Fensters hinzu.
Gui, Add, Text, Section, Vorname:   ; Speichert die Position des Steuerelements und beginnt eine neue Sektion.
Gui, Add, Text,, Nachname:
Gui, Add, Edit, ys  ; Beginnt eine neue Spalte innerhalb dieser Sektion.
Gui, Add, Edit
Gui, Show

Umgekehrt gilt das gleiche (xs ohne Y-Position).

Bei Bedarf kann nach xs und ys ein Plus-/Minuszeichen und eine Zahl erfolgen. Das Wort Section und xs/ys können gleichzeitig in den Optionen des Steuerelements vorhanden sein, dadurch kann das Steuerelement die vorherigen Positionsdaten für sich selbst nutzen und für nachfolgende Steuerelemente eine neue Sektion beginnen.

Speichern von und Reagieren auf Benutzereingaben

V: Variable. Verbindet eine Variable mit einem Steuerelement. Geben Sie dazu den Buchstaben V an und fügen Sie direkt danach den Namen einer globalen Variable ein (oder eine lokale ByRef-Variable, die auf eine globale Variable verweist, oder seit v1.0.46.01 eine statische Variable). vMeinEdit würde beispielsweise den Inhalt des Steuerelements in die Variable MeinEdit speichern, sobald man Gui Submit verwendet. Das Zuweisen von Variablen ist auch bei Steuerelementen hilfreich, die nicht eingabefähig sind (z. B. das Text-Steuerelement oder GroupBox), weil der Name von so einer Variable zeitgleich als eindeutiger Identifikator dient, den man ganz leicht in Verbindung mit GuiControl, GuiControlGet und A_GuiControl benutzen kann. Hinweis: Gui Submit funktioniert nur bei Steuerelementen, mit denen der Benutzer interagieren kann (z. B. Edit und Slider), aber es gibt Ausnahmen (z. B. ListView und TreeView).

G: Gosub (g-label). Startet automatisch eine Subroutine oder Funktion, wenn der Benutzer ein Steuerelement anklickt oder ändert. Geben Sie dazu den Buchstaben G an und fügen Sie direkt danach den Namen eines Labels ein, das ausgeführt werden soll. gCancel kann man benutzen, um standardmäßig ein indirektes Gui Cancel auszulösen (aber nur, wenn man noch nicht selbst ein Label namens "Cancel" definiert hat). Die Subroutine kann auf folgende interne Variablen zurückgreifen: A_Gui, A_GuiControl, A_GuiEvent und A_EventInfo.

[v1.1.20+]: Wenn der Labelname ungültig ist, wird er stattdessen als Funktionsname angesehen. Alternativ kann man via GuiControl ein Funktionsobjekt mit einem Steuerelement verbinden. Die Funktion akzeptiert folgende Parameter (wenn man in diesem Fall gCtrlEvent in den Optionen verwendet):

CtrlEvent(CtrlHwnd, GuiEvent, EventInfo, ErrorLevel:="")

Die Bedeutung der Parameter ist vom Typ des Steuerelements abhängig. Hinweis: Wenn man den vierten Parameter ohne Standardwert deklariert, kann die Funktion nur von Ereignissen aufgerufen werden, die vier Parameter unterstützen.

Steuerelemente: Häufig verwendete Styles und Optionen

Hinweis: Vorzeichenlose Optionen werden standardmäßig hinzugefügt; zum Beispiel ist Wrap das gleiche wie +Wrap. -Wrap hingegen entfernt den Zeilenumbruch im Steuerelement.

AltSubmit: Eine alternative Submit-Methode. Bei DropDownList, ComboBox oder ListBox bewirkt diese Option, dass Gui Submit die Position des ausgewählten Elements speichert, nicht dessen Text. Wenn kein Element ausgewählt ist, wird eine ComboBox den Text in ihrem Eingabefeld als den zu speichernden Wert verwenden, während eine DropDownList oder ListBox ihre zugewiesene Ausgabevariable leer macht. Hinweis: AltSubmit beeinflusst auch das Verhalten von GuiControlGet, wenn der Inhalt von solchen Steuerelementen abgerufen wird.

C: Farbe des Textes (funktioniert nicht bei Buttons). Geben Sie den Buchstaben C an und fügen Sie direkt danach den Namen einer Farbe (siehe Farbtabelle) oder einen RGB-Wert ein (das 0x-Präfix ist optional). Beispiele: cRed, cFF2211, c0xFF2211, cDefault.

Disabled: Deaktiviert ein eingabefähiges Steuerelement, wodurch es weder fokussiert noch geändert werden kann. Mit GuiControl Enable kann es später wieder aktiviert werden. Hinweis: Um ein Edit-Steuerelement stattdessen in den schreibgeschützten Zustand zu versetzen, gibt man ReadOnly in den Optionen an. Direkt nach dem Wort Disabled kann optional eine 0 oder 1 erfolgen, um den Startzustand zu bestimmen (0 für aktiviert, 1 für deaktiviert). In diesem Fall wäre Disabled das gleiche wie Disabled%VarMitEins%.

Hidden: Das Steuerelement wird zu Beginn unsichtbar sein. Mit GuiControl Show kann es später wieder sichtbar gemacht werden. Direkt nach dem Wort Hidden kann optional eine 0 oder 1 erfolgen, um den Startzustand zu bestimmen (0 für sichtbar, 1 für versteckt). In diesem Fall wäre Hidden das gleiche wie Hidden%VarMitEins%.

Left: Richtet den Text im Steuerelement nach links aus. Diese Option funktioniert nur bei folgenden Steuerelementen: Text, Edit, Button, Checkbox, Radio, UpDown, Slider, Tab, Tab2, GroupBox, DateTime.

Right: Richtet den Text im Steuerelement nach rechts aus. Bei CheckBox- und Radio-Steuerelementen wird das Auswahlfeld auf die rechte Seite gesetzt. Diese Option funktioniert nur bei folgenden Steuerelementen: Text, Edit, Button, Checkbox, Radio, UpDown, Slider, Tab, Tab2, GroupBox, DateTime, Link.

Center: Zentriert den Text im Steuerelement auf horizontaler Ebene. Diese Option funktioniert nur bei folgenden Steuerelementen: Text, Edit, Button, Checkbox, Radio, Slider, GroupBox.

Section: Beginnt eine neue Sektion und speichert die Positiondaten des Steuerelements, die für die Positionierungsoptionen xs und ys gedacht sind (siehe oben).

Tabstop: -Tabstop bewirkt, dass ein eingabefähiges Steuerelement übersprungen wird, wenn der Benutzer die TAB-Taste zum Navigieren verwendet.

Wrap: Aktiviert den automatischen Zeilenumbruch im Steuerelement. Nahezu alle Arten von Steuerelementen haben zu Beginn den automatischen Zeilenumbruch aktiv, daher verwendet man häufiger -Wrap, um es zu deaktivieren.

VScroll: Stattet das Steuerelement mit einer vertikalen Scrollleiste aus, sofern möglich.

HScroll: Stattet das Steuerelement mit einer horizontalen Scrollleiste aus, sofern möglich. Der Rest dieses Absatzes gilt nur für die ListBox. Die Breite des scrollbaren Bereichs ist standardmäßig 3-mal so groß wie die Breite der ListBox. Um eine eigene Breite des scrollbaren Bereichs zu definieren, fügt man direkt nach dem Wort HScroll eine Zahl ein. Zum Beispiel wäre HScroll500 ein scrollbarer Bereich von 500 Pixeln innerhalb der ListBox. Wenn die angegebene Breite des scrollbaren Bereichs allerdings kleiner ist als die Breite der ListBox, wird die Scrollleiste nicht angezeigt (beachte aber, dass die bloße Anwesenheit von HScroll es überhaupt erst möglich macht, die horizontale Scrollleiste später via GuiControl, +HScroll500, MeineScrollleiste zu aktivieren).

Steuerelemente: Selten verwendete Styles und Optionen

BackgroundTrans: Aktiviert einen transparenten Hintergrund, wodurch Steuerelemente unterhalb eines Text-, Picture- oder GroupBox-Steuerelements teilweise sichtbar sind. Ein transparentes Text-Steuerelement oberhalb eines Picture-Steuerelements würde beispielsweise die Illusion erzeugen, als gehöre der Text zum Bild. Mit GuiControl, +Background kann diese Option wieder entfernt werden. Im AltSubmit-Abschnitt des Picture-Steuerelements findet man weitere Informationen über transparente Bilder. Bekannte Einschränkung: BackgroundTrans kann sich falsch verhalten, wenn man diese Option bei Steuerelementen innerhalb eines Tab-Steuerelements mit einer ListView anwendet.

-Background: Zwingt das Steuerelement, nicht die Hintergrundfarbe von Gui Color, sondern seine vordefinierte Hintergrundfarbe zu verwenden. Das wird häufig gemacht, um ein Tab-Steuerelement in seiner Standardfarbe anstatt in Fensterfarbe anzeigen zu lassen. Mit GuiControl, +Background kann diese Option wieder entfernt werden.

Border: Umrahmt das Steuerelement mit einer dünnen Linie. Die meisten Steuerelemente benötigen diese Option nicht, da sie bereits einen typenspezifischen Rahmen haben. Beim nachträglichen Hinzufügen eines Rahmens kann es vorkommen, dass man die Breite und Höhe des Steuerelements um 1 Pixel erweitern muss, um eine korrekte Darstellung zu gewährleisten.

HwndAusgabeVar [v1.0.46.01+]: In Verbindung mit Gui Add wird diese Option das Fenster-Handle (HWND) des neu erstellten Steuerelements in AusgabeVar speichern. Zum Beispiel: Gui, Add, Edit, vMeinEdit HwndMeinEditHwnd. Benutzt man dieses Beispiel in einer Funktion, wird MeinEditHwnd als dynamische Variable behandelt. Das HWND eines Steuerelements benutzt man häufig in Verbindung mit PostMessage, SendMessage und DllCall. Desweiteren kann man es direkt als ahk_id-Fenstertitel benutzen (das auch bei versteckten Steuerelementen funktioniert, selbst wenn DetectHiddenWindows ausgeschaltet ist) oder [seit v1.1.04+] in Verbindung mit GuiControl und GuiControlGet als SteuerelementID-Parameter. Beachten Sie zudem, dass das HWND eines übergeordneten Fensters via Gui MeinGui:+HwndAusgabeVar abgerufen werden kann.

Theme: Mit dieser Option kann das aktuelle Fenster-Design des neu erstellten Steuerelements überschrieben werden. Bei bereits vorhandenen Steuerelementen hat diese Option keinen Effekt; allerdings kann sich das in einer zukünftigen Version noch ändern. Siehe Gui +/-Theme für Details.

(Unbenannter Style): Geben Sie ein Plus- oder Minuszeichen an und fügen Sie direkt danach eine dezimale oder hexadezimale Style-Nummer ein. Wenn das Vorzeichen fehlt, wird die Style-Nummer standardmäßig hinzugefügt.

(Unbenannter ExStyle): Geben Sie ein Plus- oder Minuszeichen an und fügen Sie direkt danach ein "E" und eine dezimale oder hexadezimale erweiterte Style-Nummer ein. Wenn das Vorzeichen fehlt, wird die Style-Nummer standardmäßig hinzugefügt. E0x200 würde beispielsweise den WS_EX_CLIENTEDGE-Style hinzufügen, der Steuerelemente wie z. B. Picture mit einem abgesenkten Rahmen ausstattet. Es gibt noch viele andere Styles, die hier zwar nicht aufgelistet sind (weil sie eher selten benutzt werden), aber auf www.microsoft.com zu finden sind, wenn man dort z. B. nach WS_EX_CLIENTEDGE sucht.

Fensterereignisse

Die folgenden Label (Subroutinen) werden automatisch mit einem GUI-Fenster verbunden, sofern sie im Skript vorkommen:

[v1.1.20+]: Wenn ein Label für das angegebene Ereignis nicht existiert, kann man stattdessen eine gleichnamige Funktion aufrufen lassen. Mithilfe des ersten Parameters dieser Funktion kann man das HWND des GUI abrufen. Einige Ereignisse haben noch mehr Parameter.

Die oben genannten Labelnamen gelten nur das Fenster mit der Nummer 1 (also das Standardfenster ohne Fenstername oder -nummer). Die speziellen Label von anderen Fenstern müssen zusätzlich den Namen oder die Nummer dieses Fensters davorhaben. Zum Beispiel wären 2GuiEscape und 2GuiClose die Standardlabel des zweiten Fensters, und MeinGuiGuiEscape und MeinGuiGuiClose die Standardlabel von MeinGui. Mit Gui +Label kann ein benutzerdefiniertes Präfix definiert werden.

GuiClose: Startet, wenn das Fenster mit eine der folgenden Methoden geschlossen wird: X-Schaltfläche in der Titelleiste drücken, "Schließen" im Systemmenü auswählen oder via WinClose schließen. Wenn dieses Label fehlt, wird das geschlossene Fenster nur versteckt, was den gleichen Effekt hat wie Gui Cancel. Die am häufigsten durchgeführte Aktion für GuiClose ist ExitApp. Zum Beispiel:

GuiClose:
ExitApp

[v1.1.20+]: Wenn GuiClose eine Funktion ist, wird das GUI standardmäßig geschlossen. Das folgende Beispiel zeigt, wie die Funktion dies verhindern kann, indem sie einen Integer ungleich 0 zurückgibt:

GuiClose(GuiHwnd) {  ; Dieser Parameter ist optional.
    MsgBox 4,, Wollen Sie das GUI wirklich schließen?
    ifMsgBox No
        return true  ; true = 1
}

GuiEscape: Startet, wenn der Benutzer die ESC-Taste drückt, während das GUI-Fenster aktiv ist. Wenn dieses Label fehlt, ist das Drücken der ESC-Taste wirkungslos. Bekannte Einschränkung: Sollte das erste Steuerelement im Fenster deaktiviert sein (wahrscheinlich abhängig vom Typ des Steuerelements), wird das GuiEscape-Label nicht ausgeführt. Dieser Effekt könnte auch durch andere Umstände ausgelöst werden.

GuiSize: Startet, wenn das Fenster kleiner/größer gemacht, minimiert, maximiert oder wiederhergestellt wird. Die internen Variablen A_GuiWidth und A_GuiHeight enthalten jeweils die neue Breite und Höhe des Client-Fensterbereichs (das ist der Bereich ohne Rahmen, Titelleiste und Menüleiste). Außerdem enthalten A_EventInfo und ErrorLevel jeweils eine der folgenden Zahlen:

0: Das Fenster wurde wiederhergestellt oder auf normale Weise größer/kleiner gemacht, z. B. durch Ziehen seines Rahmens.
1: Das Fenster wurde minimiert.
2: Das Fenster wurde maximiert.

Ein Skript kann mit GuiSize die Steuerelemente neu positionieren und größer/kleiner machen, wenn der Benutzer die Größe des Fensters ändern sollte. Mithilfe der Funktion von AutoXYWH() von tmplinshi und toralf könnte man diesen Vorgang vereinfachen.

Wenn man das Fenster größer/kleiner macht (auch via Skript), wird GuiSize nicht sofort aufgerufen. Wenn der aktuelle Thread nicht unterbrochen werden kann, wird GuiSize (und alle anderen Fenstereignisse) erst aufgerufen, wenn der Thread unterbrechbar ist. Das folgende Beispiel zeigt, wie GuiSize sofort aufgerufen werden kann, nachdem das Skript die Größe des Fensters geändert hat:

Critical Off  ; Selbst wenn Critical On nie verwendet wurde.
Sleep -1

[v1.1.22.05+]: Gui Show führt automatisch ein Sleep -1 aus, demzufolge könnte man in diesem Fall das Sleep weglassen.

[v1.1.20+]: Wenn GuiSize eine Funktion ist, wird sie folgende Parameter haben:

GuiSize(GuiHwnd, EventInfo, Breite, Höhe)

GuiContextMenu: Startet immer dann, wenn der Benutzer innerhalb des Fensters (außer Titelleiste und Menüleiste) einen Rechtsklick macht. Es startet auch, wenn der Benutzer die MENÜ-Taste oder UMSCHALT+F10 drückt. GuiContextMenu kann, im Gegensatz zu vielen anderen GUI-Labels, gleichzeitig mehrere Threads von sich selbst aktiv haben. Innerhalb des GuiContextMenu-Labels sind folgende interne Variablen verfügbar:

  1. A_GuiControl mit dem Text oder Variablennamen des Steuerelements, welches das Ereignis empfangen hat (leer, wenn dies nicht der Fall ist).
  2. A_EventInfo: Falls ListBox, ListView oder TreeView das Ziel des Kontextmenüs ist (via A_GuiControl feststellbar), wird A_EventInfo einen Wert enthalten, der ein Element innerhalb des Steuerelements repräsentiert:
    ListBox oder ListView: A_EventInfo enthält die Nummer der aktuell fokussierten Zeile/Reihe (0, wenn dies nicht der Fall ist).
    TreeView: Bei Rechtsklick enthält A_EventInfo die ID-Nummer des angeklickten Elements (0, wenn der Benutzer kein Element angeklickt hat). Beim Drücken der MENÜ-Taste oder UMSCHALT+F10 enthält A_EventInfo die ID-Nummer des ausgewählten Elements.
  3. A_GuiX und A_GuiY mit den X- und Y-Koordinaten der Position, wo das Menü angezeigt werden soll (z. B. Menu, MeinKontext, Show, %A_GuiX%, %A_GuiY%). Die Koordinaten sind relativ zur linken oberen Ecke des Fensters.
  4. A_GuiEvent mit dem Wort "RightClick", wenn der Benutzer einen Rechtsklick gemacht hat, oder "Normal", wenn das Menü via MENÜ-Taste oder UMSCHALT+F10 aufgerufen wurde.

Hinweis: Edit und MonthCal haben ein eigenes Kontextmenü, demzufolge wird ein Rechtsklick in solchen Steuerelementen kein GuiContextMenu auslösen können.

[v1.1.20+]: Wenn GuiContextMenu eine Funktion ist, wird sie folgende Parameter haben:

GuiContextMenu(GuiHwnd, CtrlHwnd, EventInfo, IstRechtsklick, X, Y)

CtrlHwnd ist leer, wenn das Ereignis nicht von einem Steuerelement stammt. IstRechtsklick ist wahr, wenn A_GuiEvent die Zeichenkette RightClick enthält.

GuiDropFiles: Startet immer dann, wenn man Dateien/Ordner mithilfe des Mauszeigers in das Fenster zieht und ablegt (wenn das Label bereits läuft, werden Drop-Ereignisse ignoriert). Innerhalb des GuiDropFiles-Labels sind folgende interne Variablen verfügbar:

  1. A_GuiControl mit dem Text oder Variablennamen des Steuerelements, wo die Dateien abgelegt wurden (leer, wenn dies nicht der Fall ist).
  2. A_EventInfo und ErrorLevel mit der Anzahl abgelegter Dateien.
  3. A_GuiX und A_GuiY mit den X- und Y-Koordinaten der Position, wo die Dateien abgelegt wurden (die Koordinaten sind relativ zur oberen linken Ecke des Fensters).
  4. A_GuiEvent mit den Namen der abgelegten Dateien, jeweils mit einem Zeilenumbruchszeichen (`n) voneinander getrennt.

Einzelne Dateien können extrahiert werden, wenn man eine Parsende Schleife wie folgt benutzt:

; BEISPIEL #1:
Loop, parse, A_GuiEvent, `n
{
    MsgBox, 4,, Dateinummer %A_Index% ist:`n%A_LoopField%.`n`nWeiter?
    IfMsgBox, No, Break
}

; BEISPIEL #2: Das folgende Beispiel zeigt, wie man die erste Datei extrahiert:
Loop, parse, A_GuiEvent, `n
{
    ErsteDatei = %A_LoopField%
    Break
}

; BEISPIEL #3: Das folgende Beispiel zeigt, wie man die Dateien in alphabetischer Reihenfolge abarbeitet:
Dateiliste = %A_GuiEvent%
Sort, Dateiliste
Loop, parse, Dateiliste, `n
    MsgBox Dateinummer %A_Index% ist:`n%A_LoopField%.

Um das Ziehen und Ablegen von Dateien in einem Fenster zu deaktivieren, entfernt man den WS_EX_ACCEPTFILES-Style via Gui -E0x10. Mit Gui +E0x10 kann es wieder aktiviert werden.

[v1.1.20+]: Wenn GuiDropFiles eine Funktion ist, wird sie Parameter haben, die weiter unten zu finden sind. CtrlHwnd ist leer, wenn Dateien auf das GUI selbst abgelegt werden. DateiArray ist ein Array (Objekt) mit Dateinamen, wo DateiArray[1] die erste Datei ist und DateiArray.MaxIndex() die Anzahl der Dateien zurückgibt. Mit einer For-Schleife kann man die Dateien einzeln durchgehen:

GuiDropFiles(GuiHwnd, DateiArray, CtrlHwnd, X, Y) {
    for i, file in DateiArray
        MsgBox Datei %i% ist:`n%file%
}

Erkennen von und reagieren auf andere Ereignisse: Andere Arten von GUI-Ereignissen können via OnMessage() erkannt und verarbeitet werden. Zum Beispiel könnte ein Skript eine kontextabhängige Hilfe via ToolTip anzeigen, wenn der Benutzer den Mauszeiger über bestimmte Steuerelemente im Fenster bewegt. Siehe dazu das GUI-ToolTip-Beispiel.

Mehrere GUI-Fenster erstellen

Um mit einem anderen Fenster als das Standardfenster zu agieren, fügt man dessen Namen oder Nummer (oder in v1.1.03+ dessen HWND), gefolgt von einem Doppelpunkt, vor dem Unterbefehl ein. Zum Beispiel:

Gui, MeinGui:Add, Text,, Text für das Über-Fenster.
Gui, MeinGui:Show

Gui MeinGui:Default verhindert, dass jeder Unterbefehl mit "MeinGui:" vorangestellt werden muss. Innerhalb eines GUI-Threads kann das Präfix weggelassen werden, sofern man dasselbe Fenster ansteuern will, das diesen Thread gestartet hat.

[v1.1.03+]: Die Richtlinien zum Erstellen von Variablennamen gelten auch bei Gui-Namen. Jede Nummer größer als 99 oder länger als zwei Zeichen (z. B. 0x01) wird automatisch als HWND eines Gui-Fensters behandelt. Wenn dieses Gui-Fenster nicht existiert, wird der Befehl fehlschlagen. Die maximale Anzahl neu erstellter Fenster richtet sich nur nach verfügbaren Systemressourcen.

[v1.1.04+]: Mit Gui, New können beliebig viele unbenannte GUI-Fenster erstellt werden.

GUI-Ereignisse, Threads und Subroutinen

Ein GUI-Thread ist ein Thread, der aufgrund einer GUI-Aktion gestartet wurde. Zu den GUI-Aktionen gehört beispielsweise das Auswählen eines Menüpunkts oder das Ausführen eines g-Labels (z. B. durch Drücken eines Buttons).

Der Name des Fensters, das einen GUI-Thread gestartet hat, wird gleichzeitig auch der Standardfenstername für diesen Thread sein. Nicht-GUI-Threads verwenden standardmäßig eine 1.

Das zuletzt gefundene Fenster eines GUI-Threads ist zu Beginn das GUI-Fenster selbst. Dadurch können Fenster- und Steuerelementbefehle -- z. B. WinMove, WinHide, WinSet, WinSetTitle und ControlGetFocus -- ohne Fenstertitel- und Fenstertextparameter benutzt werden, sofern man das GUI-Fenster selbst bearbeiten möchte (sogar wenn es versteckt ist).

Ein Klick auf ein Steuerelement, dessen g-Label wegen eines vorherigen Klicks noch läuft, ist unwirksam und führt dazu, dass dieses Ereignis verworfen wird. Um das zu verhindern, fügt man Critical als erste Zeile in die Subroutine ein (beachte aber, dass andere Threads wie Hotkey-Ereignisse dadurch auch zwischengespeichert/aufgeschoben werden).

Die internen Variablen A_Gui und A_GuiControl enthalten den Fensternamen und die ID des Steuerelements, das den aktuellen Thread gestartet hat. Siehe A_Gui und A_GuiControl für mehr Details.

Damit mehrere Ereignisse dieselbe Subroutine ausführen können, stapelt man die entsprechenden Labelnamen einfach übereinander. Zum Beispiel:

GuiEscape:
GuiClose:
ButtonCancel:
ExitApp  ; Alle Label oben werden diesen Befehl ausführen.

In einem GUI-Thread werden Einstellungen wie SendMode zu Beginn mit Standardwerten geladen. Diese Standardwerte können im automatischen Ausführungsbereich geändert werden.

Mit der TAB-Taste ist es möglich, den Tastaturfokus jeweils auf das nächste eingabefähige Steuerelement in einem GUI-Fenster zu setzen (Steuerelemente mit deaktiviertem Tabstop-Style werden übersprungen). In welcher Reihenfolge die Steuerelemente den Tastaturfokus erhalten, ist allein abhängig davon, zu welchem Zeitpunkt sie ursprünglich hinzugefügt worden sind. Sobald man das Fenster das erste Mal erblickt, wird der Tastaturfokus auf das erste eingabefähige Steuerelement mit aktiviertem Tabstop-Style gesetzt (was auf die meisten zutrifft).

Die Texte einiger Steuerelemente können ein Und-Zeichen (&) enthalten, um das nachfolgende Zeichen zu unterstreichen (abhängig von den Systemeinstellungen) und als Tastenkürzel zu bestimmen. Um das Tastenkürzel zu aktivieren, muss der Benutzer die ALT-Taste gedrückt halten und dann das entsprechende Zeichen auf der Tastatur drücken. Die Benutzung des Tastenkürzels bei Button-, CheckBox- und Radio-Steuerelementen ist das gleiche wie, als würde man auf das Steuerelement klicken. Bei GroupBox- und Text-Steuerelementen hingegen wird der Tastaturfokus auf das nächstmögliche Tabstop-Steuerelement gesetzt, das eingabefähig ist. Wenn mehrere Steuerelemente das gleiche Tastenkürzel verwenden und drückt man dieses, springt der Tastaturfokus zwischen solchen Steuerelementen abwechselnd hin und her.

Um ein direkt geschriebenes Und-Zeichen in einem der oben genannten Steuerelementtypen darzustellen, schreibt man zwei aufeinanderfolgende Und-Zeichen. Zum Beispiel: Save && Exit.

Fensterdarstellung

Ein GUI-Fenster verwendet als Symbol das Infobereichssymbol, welches zum Zeitpunkt seiner Erstellung wirksam war. Wenn das Fenster also ein anderes Symbol haben soll, muss man das Infobereichssymbol vor seiner Erstellung ändern. Zum Beispiel: Menu, Tray, Icon, MeinSymbol.ico. Es ist auch möglich, ein anderes großes Symbol für ein Fenster zu definieren (das große Symbol kann man sich in der Programmumschaltung via ALT+TAB anschauen). Mit DllCall und SendMessage wäre das wie folgt zu erreichen:

hIcon32 := DllCall("LoadImage", uint, 0
    , str, "Mein Symbol.ico"  ; Dateiname des Symbols (diese Datei kann mehrere Symbole enthalten).
    , uint, 1  ; Bildtyp: IMAGE_ICON
    , int, 32, int, 32  ; gewünschte Breite und Höhe des Bildes (hilft LoadImage zu entscheiden, welches Symbol am besten geeignet ist).
    , uint, 0x10)  ; Flags: LR_LOADFROMFILE
Gui +LastFound
SendMessage, 0x80, 1, hIcon32  ; 0x80 ist WM_SETICON; und 1 bedeutet ICON_BIG (0 wäre ICON_SMALL).
Gui Show

Aufgrund von Einschränkungen in Windows XP und höher werden CheckBox-, Radio- und GroupBox-Steuerelemente, deren Textfarbe vom Standard abweicht, im klassischen Design dargestellt.

Verwandtes Thema: Margin (Abstände innerhalb eines Fensters).

Allgemeine Bemerkungen

Mit GuiControl und GuiControlGet können bestimmte Steuerelemente in einem GUI-Fenster bearbeitet werden.

Jedes GUI-Fenster kann bis zu 11.000 Steuerelemente enthalten. Aber Vorsicht: Bei mehr als 5.000 Steuerelementen kann es vorkommen, dass bestimmte Typen von Steuerelementen instabil werden.

Skripte, die den GUI-Befehl irgendwo enthalten, sind automatisch persistent (selbst wenn der GUI-Befehl nie ausgeführt wird). Außerdem sind mehrere Instanzen dieses Skripts nicht möglich, es sein denn, man überschreibt diese Einschränkung mit der #SingleInstance-Direktive.

Siehe auch

GuiControl, GuiControlGet, Menu, Typen von Steuerelementen, ListView, TreeView, Control, ControlGet, SplashImage, MsgBox, FileSelectFile, FileSelectFolder

Beispiele

; Beispiel: Erzielt einen ähnlichen Effekt wie SplashTextOn:

Gui, +AlwaysOnTop +Disabled -SysMenu +Owner  ; +Owner verhindert eine Taskleistenschaltfläche.
Gui, Add, Text,, Beliebiger Text.
Gui, Show, NoActivate, Fenstertitel  ; NoActivate verhindert, dass ein anderes Fenster seinen Aktivzustand verliert.

 

; Beispiel: Ein einfaches Eingabefenster zum Abfragen des Vor- und Nachnamens:

Gui, Add, Text,, Vorname:
Gui, Add, Text,, Nachname:
Gui, Add, Edit, vVorname ym  ; Die ym-Option beginnt eine neue Spalte für Steuerelemente.
Gui, Add, Edit, vNachname
Gui, Add, Button, default, OK  ; ButtonOK-Label (wenn vorhanden) wird ausgeführt, wenn der Button gedrückt wird.
Gui, Show,, Einfaches Eingabebeispiel
return  ; Ende des automatischen Ausführungsbereichs. Das Skript ist solange im Leerlauf, bis der Benutzer irgendetwas macht.

GuiClose:
ButtonOK:
Gui, Submit  ; Speichert die Benutzereingaben in die entsprechenden Steuerelementvariablen.
MsgBox Sie haben "%Vorname% %Nachname%" eingegeben.
ExitApp

 

; Beispiel: Tab-Steuerelement:

Gui, Add, Tab2,, Erster Tab|Zweiter Tab|Dritter Tab  ; Tab2 benötigt v1.0.47.05.
Gui, Add, Checkbox, vMeineCheckBox, Kontrollkästchen
Gui, Tab, 2
Gui, Add, Radio, vMeinRadio, Optionsfeld 1
Gui, Add, Radio,, Optionsfeld 2
Gui, Tab, 3
Gui, Add, Edit, vMeinEdit r5  ; r5 bedeutet 5 Reihen hoch.
Gui, Tab  ; nachfolgende Steuerelemente werden nicht als Teil des Tab-Steuerelements angesehen.
Gui, Add, Button, default xm, OK  ; xm positioniert den Button in die untere linke Ecke.
Gui, Show
return

ButtonOK:
GuiClose:
GuiEscape:
Gui, Submit  ; Speichert die Inhalte der Steuerelemente in ihre zugeordneten Variablen.
MsgBox Ihre Eingabe:`n%MeineCheckBox%`n%MeinRadio%`n%MeinEdit%
ExitApp

 

; Beispiel: ListBox mit Dateien aus einem Verzeichnis:

Gui, Add, Text,, Eine Datei zum Ausführen auswählen.`nDrücken Sie ESCAPE oder schließen Sie das Fenster, um den Vorgang abzubrechen.
Gui, Add, ListBox, vMeineListBox gMeineListBox w640 r10
Gui, Add, Button, Default, OK
Loop, C:\*.*  ; Ordner und musterbasierte Suche je nach Bedarf anpassen.
{
    GuiControl,, MeineListBox, %A_LoopFileFullPath%
}
Gui, Show
return

MeineListBox:
if A_GuiEvent <> DoubleClick
    return
; Ansonsten wurde ein Doppelklick auf einen Listeneintrag gemacht, also wie OK-Drücken behandeln
; und zum nächsten Label übergehen.
ButtonOK:
GuiControlGet, MeineListBox  ; Ermittelt die aktuelle Auswahl in der ListBox.
MsgBox, 4,, Wollen Sie die folgende Datei wirklich öffnen?`n`n%MeineListBox%
IfMsgBox, No
    return
; Ansonsten versuchen zu starten:
Run, %MeineListBox%,, UseErrorLevel
if ErrorLevel = ERROR
    MsgBox Die angegebene Datei konnte nicht ausgeführt werden.  Scheinbar fehlt ein passendes Programm dafür.
return

GuiClose:
GuiEscape:
ExitApp

 

; Beispiel: Zeigt eine kontextabhängige Hilfe an (via ToolTip), wenn man den Mauszeiger über ein bestimmtes Steuerelement bewegt:

Gui, Add, Edit, vMeinEdit
MeinEdit_TT := "Das Tooltip für das Steuerelement mit der Variable MeinEdit"
Gui, Add, DropDownList, vMeineDDL, Rot|Grün|Blau
MeineDDL_TT := "Wählen Sie eine Farbe aus."
Gui, Add, Checkbox, vMeineCheckBox, Dieses Steuerelement hat kein Tooltip.
Gui, Show
OnMessage(0x200, "WM_MOUSEMOVE")
return

WM_MOUSEMOVE()
{
    static CurrControl, PrevControl, _TT  ; _TT bleibt für den unteren ToolTip-Befehl leer.
    CurrControl := A_GuiControl
    If (CurrControl <> PrevControl and not InStr(CurrControl, " "))
    {
        ToolTip  ; Schließt alle offenen Tooltips.
        SetTimer, ZeigeToolTip, 1000
        PrevControl := CurrControl
    }
    return

    ZeigeToolTip:
    SetTimer, ZeigeToolTip, Off
    ToolTip % %CurrControl%_TT  ; Das erste Prozentzeichen erzwingt einen Ausdruck.
    SetTimer, EntferneToolTip, 3000
    return

    EntferneToolTip:
    SetTimer, EntferneToolTip, Off
    ToolTip
    return
}


GuiClose:
ExitApp

 

; Beispiel: Bildschirmanzeige (OSD) mittels transparentem Fenster:

UnsichtbareFarbe = EEAA99  ; Kann eine beliebige RGB-Farbe sein (wird weiter unten transparent gemacht).
Gui +LastFound +AlwaysOnTop -Caption +ToolWindow  ; +ToolWindow entfernt die Taskleistenschaltfläche und die Möglichkeit, via ALT+TAB angesteuert zu werden.
Gui, Color, %UnsichtbareFarbe%
Gui, Font, s32  ; Setzt eine große Schriftgröße (32 Punkte).
Gui, Add, Text, vMeinText cLime, XXXXX YYYYY  ; XX & YY dienen zum automatischen Anpassen der Fenstergröße.
; Macht alle Pixel dieser Farbe unsichtbar und den Text selbst transparent (150):
WinSet, TransColor, %UnsichtbareFarbe% 150
SetTimer, AktualisiereOSD, 200
Gosub, AktualisiereOSD  ; Aktualisierung sofort durchzuführen, anstatt auf den Timer zu warten.
Gui, Show, x0 y400 NoActivate  ; NoActivate verhindert, dass ein anderes Fenster sein Aktivzustand verliert.
return

AktualisiereOSD:
MouseGetPos, MausX, MausY
GuiControl,, MeinText, X%MausX%, Y%MausY%
return

 

; Beispiel: Eine animierte Fortschrittsleiste auf einem Hintergrundbild.

Gui, Color, White
Gui, Add, Picture, x0 y0 h350 w450, %A_WinDir%\system32\ntimage.gif
Gui, Add, Button, Default xp+20 yp+250, Animation starten
Gui, Add, Progress, vMeinProgress w416
Gui, Add, Text, vMeinText wp  ; wp bedeutet "vorherige Breite verwenden".
Gui, Show
return

ButtonAnimationStarten:
Loop, %A_WinDir%\*.*
{
    if A_Index > 100
        break
    GuiControl,, MeinProgress, %A_Index%
    GuiControl,, MeinText, %A_LoopFileName%
    Sleep 50
}
GuiControl,, MeinText, Animation beendet.
return

GuiClose:
ExitApp

 

; Beispiel: Einfacher Bildbetrachter:

Gui, +Resize
Gui, Add, Button, default, Neues Bild &laden
Gui, Add, Radio, ym+5 x+10 vOption checked, &Originalgröße
Gui, Add, Radio, ym+5 x+10, &Kompletter Bildschirm
Gui, Add, Pic, xm vPic
Gui, Show
return

ButtonNeuesBildLaden:
FileSelectFile, Datei,,, Bild auswählen:, Bilder (*.gif; *.jpg; *.bmp; *.png; *.tif; *.ico; *.cur; *.ani; *.exe; *.dll)
if Datei =
    return
Gui, Submit, NoHide ; Speichert die Werte der Optionsfelder.
if Option = 1  ; Bild mit aktueller Größe anzeigen.
{
    Breite = 0
    Höhe = 0
}
else ; Zweites Optionsfeld ausgewählt: Größe des Bildes an Bildschirmgröße anpassen.
{
    Breite := A_ScreenWidth - 28  ; Minus 28, um Platz für Rahmen und Innenabstand zu schaffen.
    Höhe = -1  ; "Seitenverhältnis beibehalten" erscheint sinnvoll.
}
GuiControl,, Pic, *w%Breite% *h%Höhe% %Datei%  ; Bild laden.
Gui, Show, xCenter y0 AutoSize, %Datei%  ; Fenstergröße an Bildgröße anpassen.
return

GuiClose:
ExitApp

 

; Beispiel: Einfacher Texteditor mit Menüleiste.

; Untermenüs für die Menüleiste erstellen:
Menu, Dateimenü, Add, &Neu, DateiNeu
Menu, Dateimenü, Add, &Öffnen, DateiÖffnen
Menu, Dateimenü, Add, &Speichern, DateiSpeichern
Menu, Dateimenü, Add, Speichern &unter..., DateiSpeichernAls
Menu, Dateimenü, Add  ; Trennlinie.
Menu, Dateimenü, Add, E&xit, DateiBeenden
Menu, Hilfsmenü, Add, &Über, HilfeÜber

; Fügt die Untermenüs in die Menüleiste ein:
Menu, MeineMenüleiste, Add, &Datei, :Dateimenü
Menu, MeineMenüleiste, Add, &Hilfe, :Hilfsmenü

; Heftet die Menüleiste an das Fenster an:
Gui, Menu, MeineMenüleiste

; Erstellt das Haupt-Eingabefeld und zeigt das Fenster an:
Gui, +Resize  ; Macht die Größe des Fensters veränderbar.
Gui, Add, Edit, vHauptEdit WantTab W600 R20
Gui, Show,, Unbenannt
AktuellerDateiname =  ; Bedeutet, dass keine aktuelle Datei vorhanden ist.
return

DateiNeu:
GuiControl,, HauptEdit  ; Eingabefeld leeren.
return

DateiÖffnen:
Gui +OwnDialogs  ; Zwingt den Benutzer, das FileSelectFile-Dialogfenster zu schließen, bevor er zum Hauptfenster zurückkehren kann.
FileSelectFile, AusgewählterDateiname, 3,, Datei öffnen, Text-Dokumente (*.txt)
if AusgewählterDateiname =  ; Keine Datei ausgewählt.
    return
Gosub DateiLesen
return

DateiLesen:  ; Der Aufrufer hat AusgewählterDateiname bereits für uns gesetzt.
FileRead, HauptEdit, %AusgewählterDateiname%  ; Liest den Inhalt der Datei und speichert ihn in die Variable.
if ErrorLevel
{
    MsgBox "%AusgewählterDateiname%" konnte nicht geöffnet werden.
    return
}
GuiControl,, HauptEdit, %HauptEdit%  ; Fügt den Text in das Steuerelement ein.
AktuellerDateiname = %AusgewählterDateiname%
Gui, Show,, %AktuellerDateiname%   ; Zeigt den Dateinamen in der Titelleiste an.
return

DateiSpeichern:
if AktuellerDateiname =   ; Aktuell keinen Dateinamen ausgewählt, daher "Speichern unter...".
    Goto DateiSpeichernAls
Gosub AktuelleDateiSpeichern
return

DateiSpeichernAls:
Gui +OwnDialogs  ; Zwingt den Benutzer, das FileSelectFile-Dialogfenster zu schließen, bevor er zum Hauptfenster zurückkehren kann.
FileSelectFile, AusgewählterDateiname, S16,, Datei speichern, Text-Dokumente (*.txt)
if AusgewählterDateiname =  ; Keine Datei ausgewählt.
    return
AktuellerDateiname = %AusgewählterDateiname%
Gosub AktuelleDateiSpeichern
return

AktuelleDateiSpeichern:  ; Der Aufrufer hat sichergestellt, dass AktuellerDateiname nicht leer ist.
IfExist %AktuellerDateiname%
{
    FileDelete %AktuellerDateiname%
    if ErrorLevel
    {
        MsgBox Überschreiben der Datei "%AktuellerDateiname%" fehlgeschlagen.
        return
    }
}
GuiControlGet, HauptEdit  ; Ermittelt den Inhalt des Eingabefeldes.
FileAppend, %HauptEdit%, %AktuellerDateiname%  ; Speichert den Inhalt in eine Datei.
; Bei Erfolg den Dateinamen in der Titelleiste anzeigen (falls es mit DateiSpeichernAls aufgerufen wurde):
Gui, Show,, %AktuellerDateiname%
return

HilfeÜber:
Gui, Über:+owner1  ; Macht das Über-Fenster zum Unterfenster vom Hauptfenster (Gui Nr. 1).
Gui +Disabled  ; Deaktiviert das Hauptfenster.
Gui, Über:Add, Text,, Beliebiger Text.
Gui, Über:Add, Button, Default, OK
Gui, Über:Show
return

ÜberButtonOK:  ; Dieser Abschnitt gilt für das Über-Fenster oben.
ÜberGuiClose:
ÜberGuiEscape:
Gui, 1:-Disabled  ; Reaktiviert das Hauptfenster (muss vor dem nächsten Schritt erfolgen).
Gui Destroy  ; Entfernt das Über-Fenster.
return

GuiDropFiles:  ; Ziehen & Ablegen unterstützen.
Loop, Parse, A_GuiEvent, `n
{
    AusgewählterDateiname = %A_LoopField%  ; Nur die erste Datei nehmen (sofern mehrere Dateien vorhanden sind).
    break
}
Gosub DateiLesen
return

GuiSize:
if ErrorLevel = 1  ; Das Fenster wurde minimiert.  Keine Aktion notwendig.
    return
; Ansonsten wurde die Größe des Fensters geändert oder maximiert. Die Größe des Eingabefeldes muss entsprechend angepasst werden.
NeueBreite := A_GuiWidth - 20
NeueHöhe := A_GuiHeight - 20
GuiControl, Move, HauptEdit, W%NeueBreite% H%NeueHöhe%
return

DateiBeenden:     ; Benutzer hat "Exit" im Dateimenü ausgewählt.
GuiClose:  ; Benutzer hat das Fenster geschlossen.
ExitApp