GUI

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

Gui, Unterbefehl , Wert1, Wert2, Wert3

Die Parameter Unterbefehl, Wert1, Wert2 und Wert3 sind voneinander abhängig und können wie folgt genutzt werden.

Inhaltsverzeichnis

Unterbefehle

Geben Sie für Unterbefehl Folgendes an:

New [v1.1.04+]

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

Gui, New , Optionen, Titel
Gui, GuiName:New , Optionen, Titel

Wenn GuiName angegeben ist, wird eine neue GUI erstellt und dabei alle existierenden GUIs mit diesem Namen zerstört. Ansonsten wird eine neue GUI erstellt, die weder benannt noch nummeriert ist.

Optionen kann vom Haupt-GUI-Befehl unterstützte Optionen enthalten.

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

Nachteile und Vorbehalte:

Vorteile:

Wenn kein Name angegeben ist, gilt folgendes:

Hinweis: Früher vor [v1.1.08] setzte dieser Unterbefehl kein Standard-GUI-Fenster, wenn ein Name angegeben war.

Add

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

Gui, Add, Steuerelement , Optionen, Text

Steuerelement kann folgendes sein:

Zum Beispiel:

Gui, Add, Text,, Bitte tragen Sie Ihren Namen ein:
Gui, Add, Edit, vName
Gui, Show

Show

Sofern in Optionen nicht anders angegeben, wird dieser Unterbefehl das Fenster sichtbar machen, entminimieren (falls notwendig), aktivieren und den Fenstertitel setzen.

Gui, Show , Optionen, Titel

Der Titel-Parameter kann weggelassen werden, um den zuvor gesetzten Titel zu verwenden (wenn es keinen gibt, wird der Dateiname des Skripts verwendet).

Die unteren Optionen X, Y, W und H können weggelassen werden, um die zuvor gesetzte Größe und Position des Fensters zu verwenden. Wenn es keine zuvor gesetzte Position gibt, wird das Fenster automatisch auf dem Bildschirm zentriert, je nachdem, ob die unten erwähnten Optionen X und Y fehlen. Wenn es keine zuvor gesetzte Größe gibt, wird die Größe des Fensters automatisch an die Größe und Position aller darin enthaltenen Steuerelemente angepasst.

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

Wn: Geben Sie für n die Breite (in Pixel) des Clientbereichs an (das ist der Fensterbereich ohne Rahmen, Titelleiste und Menüleiste).

Hn: Geben Sie für n die Höhe des Clientbereichs 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 Größe des Fensters automatisch an die Größe und Position aller darin enthaltenen sichtbaren Steuerelemente 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.

Minimize: Minimiert das Fenster und aktiviert das darunterliegende Fenster.

Maximize: Maximiert und aktiviert das Fenster.

Restore: Entminimiert oder entmaximiert das Fenster, falls nötig. Das Fenster wird zudem sichtbar gemacht und aktiviert, falls nötig.

NoActivate: Entminimiert oder entmaximiert das Fenster, falls nötig. Das Fenster wird zudem sichtbar gemacht, ohne es zu aktivieren.

NA: Macht das Fenster sichtbar, ohne es zu aktivieren. Wenn das Fenster minimiert ist, bleibt es minimiert, aber wird eventuell in der Z-Rangordnung nach oben steigen (die aktuelle Rangordnung kann via Alt-Tab-Fenster überprüft werden). Wenn das Fenster zuvor versteckt war, bewirkt diese Option, dass es über dem aktiven Fenster erscheint, obwohl das aktive Fenster nicht deaktiviert ist.

Hide: Versteckt das Fenster und aktiviert das darunterliegende Fenster. Funktionsgemäß ist das identisch mit Gui Cancel. Diese Option hat aber den Vorteil, dass es ein verstecktes Fenster verschieben, größer/kleiner machen oder neu betiteln kann, ohne es sichtbar zu machen. Zum Beispiel: Gui, Show, Hide x55 y66 w300 h200, Neuer Titel.

Submit

Speichert den Inhalt der Steuerelemente in ihre zugeordneten Variablen (falls vorhanden) und versteckt das Fenster (mit NoHide kann das Verstecken verhindert werden).

Gui, Submit , NoHide

Steuerelemente, die mehrere Ausgabefelder erzeugen, z. B. eine Mehrfachauswahl-ListBox, verwenden das aktuellen Trennzeichen des Fensters, um diese voneinander zu trennen. Wenn das Fenster nicht existiert (z. B. weil es via Gui Destroy zerstört wurde), ist dieser Unterbefehl wirkungslos.

Cancel / Hide

Versteckt das Fenster, ohne den Inhalt der Steuerelemente in ihre zugeordneten Variablen zu speichern.

Gui, Cancel
Gui, Hide

Wenn das Fenster nicht existiert (z. B. weil es via Gui Destroy zerstört wurde), ist dieser Unterbefehl wirkungslos.

Destroy

Entfernt das Fenster (falls vorhanden) und alle darin enthaltenen Steuerelemente, um die entsprechenden Speicher- und Systemressourcen freizugeben.

Gui, Destroy

Falls das Fenster später neu erstellt wird, beginnen alle Fenstereigenschaften wie Farbe und Schrift wieder mit ihren Standardwerten (als hätte das Fenster nie existiert). Alle GUI-Fenster werden automatisch zerstört, sobald das Skript beendet wird.

Font

Bestimmt Schriftart, Schriftgröße, Schriftstil und/oder Schriftfarbe für danach erstellte Steuerelemente.

Gui, Font , Optionen, Schriftname

Zum Beispiel:

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

Die letzten beiden Parameter können weggelassen werden, um die systeminterne Standard-GUI-Schriftart, inklusive Größe und Farbe, wiederherzustellen.

Schriftname ist der Name einer beliebigen Schrift, z. B. eine aus der Schriftentabelle. Wenn Schriftname weggelassen wird oder im System nicht vorhanden ist, wird die zuvor gesetzte Schriftart verwendet (wenn es keine gibt, wird die systeminterne Standard-GUI-Schriftart verwendet). Dieses Verhalten ist nützlich, um ein GUI-Fenster, das für mehrere Systeme gedacht ist, eine ähnliche Schrift verwenden zu lassen, selbst wenn in einigen dieser Systeme die bevorzugte Schrift fehlt. Das folgende Beispiel bewirkt, dass Verdana gegenüber Arial bevorzugt wird, welches wiederum gegenüber MS Sans Serif bevorzugt wird:

Gui, Font,, MS Sans Serif
Gui, Font,, Arial
Gui, Font,, Verdana  ; Bevorzugte Schrift.

Wenn der Optionen-Parameter leer ist, werden die Attribute der zuvor gesetzten Schrift verwendet. Ansonsten können Sie ersatzweise einen oder mehrere der folgenden Optionsbuchstaben angeben:

C: Der Name einer Farbe (siehe Farbentabelle) oder ein RGB-Wert, oder das Wort Default, um die Standardfarbe des Systems wiederherzustellen (üblicherweise schwarz). Beispielwerte: cRed, cFFFFAA, cDefault. Hinweis: Button-Steuerelemente können nicht mit einer benutzerdefinierten Farbe versehen werden. Alternativ kann man auch die C-Option nutzen, um die Schriftfarbe für einzelne Steuerelemente bei ihrer Erstellung zu bestimmen. Zum Beispiel: Gui, Add, Text, cRed, Mein Text.

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

W: Breite (Dicke). Eine Zahl im Bereich von 1 bis 1000 (400 ist normal und 700 ist fett). Zum Beispiel: w600 (muss dezimal sein).

Die folgenden Wörter werden auch 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 schaltet italic, strike und underline aus (Farbe und Größe bleiben unberührt). Man kann norm zum Beispiel nutzen, um alle Attribute auszuschalten und danach bestimmte Attribute wieder einzuschalten. norm italic beispielsweise würde die Schrift normalisieren und danach 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 Schrift oder eines Symbols verwenden kann. Solche Dialogfenster können via DllCall() angezeigt werden, wie auf GitHub gezeigt.

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

0 = DEFAULT_QUALITY Die Darstellung der Schrift spielt keine Rolle.
1 = DRAFT_QUALITY Die exakte Übereinstimmung mit logischen Schriftattributen (fett, kursiv und so weiter) ist wichtiger als die Zeichenqualität der Schrift.
2 = PROOF_QUALITY Die Zeichenqualität der Schrift ist wichtiger als die exakte Übereinstimmung mit logischen Schriftattributen (fett, kursiv und so weiter).
3 = NONANTIALIASED_QUALITY Die Schrift wird nie antialiasiert; das heißt, dass die eckigen Kanten einer Schrift nicht geglättet werden.
4 = ANTIALIASED_QUALITY Die Schrift wird antialiasiert bzw. geglättet, wenn die Schrift dies unterstützt und nicht zu klein oder zu groß ist.
5 = CLEARTYPE_QUALITY Windows XP und höher: Die Schrift wird (wenn möglich) mit der ClearType-Antialiasing-Methode gerendert.

Weitere Informationen darüber, was diese Werte bedeuten, finden Sie unter 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.

Color

Bestimmt die Hintergrundfarbe des Fensters und/oder aller darin enthaltenen Steuerelemente.

Gui, Color , Fensterfarbe, Steuerelementfarbe

Fensterfarbe definiert die Hintergrundfarbe des GUI-Fensters selbst. Steuerelementfarbe wird auf alle gegenwärtigen und zukünftigen Steuerelemente im Fenster angewendet (sofern dieses Steuerelement benutzerdefinierte Farben unterstützt). Steuerelementfarbe hat nur eine einmalige Auswirkung auf ListView- und TreeView-Steuerelemente; nachfolgende Änderungen der Steuerelementfarbe sind bei diesen Steuerelementen wirkungslos. In solchen Fällen nutzt man GuiControl +BackgroundFF9977, MeineListView, um die Farbe explizit zu ändern.

Beide Parameter können leer gelassen werden, um die entsprechende Farbe beizubehalten. 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 einer Schaltfläche, während ein Steuerelement als Hintergrundfarbe standardmäßig die vordefinierte Farbe eines Fensters benutzt (üblicherweise weiß).

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

Mit WinSet TransColor kann der Hintergrund transparent gemacht werden. Wenn Sie dies jedoch tun, ohne zuvor eine benutzerdefinierte Fensterfarbe via Gui Color zugewiesen zu haben, werden Button-Steuerelemente ebenfalls transparent. Um das zu verhindern, weist man zunächst eine benutzerdefinierte Farbe zu und macht diese dann transparent. Zum Beispiel:

Gui, Color, EEAA99
Gui +LastFound  ; Macht das GUI-Fenster zum zuletzt gefundenen Fenster für die Zeile darunter.
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.

Margin

Bestimmt die Anzahl der Pixel, die auf der linken/rechten und oberen/unteren Seite des Fensters freigelassen werden sollen, wenn Steuerelemente aufgrund fehlender X- oder Y-Koordinate automatisch positioniert werden.

Gui, Margin , X, Y

Diese Abstände werden auch genutzt, um den vertikalen und horizontalen Abstand zwischen automatisch positionierten Steuerelementen zu bestimmen. Außerdem werden diese Abstände zur Berechnung der Fenstergröße herangezogen, wenn Gui Show das erste Mal verwendet wird (wenn keine explizite Größe angegeben ist).

Gui, Margin beeinflusst nur das Standardfenster, während Gui, Name:Margin nur Einfluss auf das benannte Fenster hat. Wenn dieser Unterbefehl nicht verwendet wird, werden die Ränder des Fensters beim Hinzufügen des ersten Steuerelements standardmäßig mit Abständen versehen, die proportional zur Größe der aktuell ausgewählten Schrift sind (0.75 mal Schrifthöhe für Unten & Oben, 1.25 mal Schriftbreite für Links & Rechts).

Man kann die 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.

Optionen und Styles für ein Fenster

Nach dem GUI-Befehl können eine oder mehrere Optionen angegeben werden.

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

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, oder ein Minuszeichen, um sie zu entfernen. Zum Beispiel:

Gui +Resize -MaximizeBox  ; Ändert die Einstellungen des Standard-GUI-Fensters.
Gui MeineGui:+Resize -MaximizeBox  ; Ändert die Einstellungen der GUI namens MeineGui.

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. Beachten Sie, dass die Titelleiste eines Fensters erst entfernt werden sollte, nachdem man bestimmte Farben des Fensters via WinSet TransColor 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 kann man mit Gui +Delimiter`n ein Zeilenumbruchszeichen als Trennzeichen definieren, das besonders gut für Fortsetzungsbereiche geeignet ist. Mit Gui +Delimiter| kann man wiederum das Standardtrennzeichen 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, um den Benutzer daran zu hindern, mit den darin enthaltenen Steuerelementen zu interagieren. 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 die DPI-Skalierung auf einem System mit benutzerdefinierter DPI-Einstellung aktiviert ist, passen die Gui-Unterbefehle automatisch ihre Koordinaten und Größen an, um Steuerelemente in etwa gleich groß aussehen zu lassen (aber in höherer Auflösung). Bei einem DPI-Wert von beispielsweise 144 (150%) würde Gui Show, w100 die GUI 150 Pixel breit machen (A_GuiWidth enthält aber weiterhin 100). A_ScreenDPI enthält die aktuelle DPI des Systems.

Die DPI-Skalierung betrifft nur Gui-Unterbefehle; das heißt, dass Koordinaten aus anderen Quellen wie ControlGetPos oder WinGetPos nicht funktionieren werden. Es gibt eine Reihe von Möglichkeiten, damit umzugehen:

HwndAusgabeVar [v1.1.04+]: Diese Option speichert den Fenster-Handle (HWND) der GUI in AusgabeVar. Zum Beispiel: Gui +HwndMeineGuiHwnd. Wenn man diese Option innerhalb einer Funktion verwendet, wird AusgabeVar als dynamische Variable behandelt. Dieser Fenster-Handle (HWND) ist zum Beispiel nützlich, um ein Steuerelement via PostMessage, SendMessage und DllCall anzusteuern. Außerdem kann der Fenster-Handle direkt via ahk_id in einem Fenstertitel-Parameter oder anstelle eines GUI-Namens verwendet werden; zum Beispiel Gui %MeineGuiHwnd%:Destroy.

Label [v1.0.44.09+]: Bestimmt benutzerdefinierte Namen für die speziellen Label des Fensters. Gui MeineGui:+LabelMeineGui_On beispielsweise bewirkt, dass das Fenster nicht MeineGuiGuiClose und MeineGuiGuiSize, sondern MeineGui_OnClose und MeineGui_OnSize als Label (sofern vorhanden) verwendet. Das heißt, dass "MeineGuiGui" in allen speziellen Labelnamen mit "MeineGui_On" ersetzt wird. Diese Option kann auch genutzt werden, um mehrere Fenster die gleiche Gruppe von Labels verwenden zu lassen (in diesem Fall kann das Skript A_Gui abrufen, um festzustellen, welches Fenster die Subroutine gestartet hat).

LastFound: Definiert das Fenster als das zuletzt gefundene Fenster (obwohl das in einem GUI-Thread nicht notwendig ist, weil dies automatisch geschieht), damit Befehle wie WinSet mit diesem Fenster interagieren können, sogar wenn es versteckt ist (das heißt, dass DetectHiddenWindows nicht notwendig ist). Diese Option ist besonders nützlich, um die Eigenschaften des Fensters zu ändern, bevor es angezeigt wird. Zum Beispiel:

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

LastFoundExist [v1.0.43.09+]: Im Gegensatz zu anderen Optionen wird LastFoundExist nur erkannt, wenn keine anderen Optionen auf der gleichen Zeile vorhanden sind. +LastFoundExist ist das gleiche wie +LastFound - der einzige Unterschied ist, dass das Fenster nicht erstellt wird, wenn es noch nicht existiert. Der Hauptnutzen dieser Option ist es, zu erkennen, ob ein bestimmtes GUI-Fenster existiert. Zum Beispiel:

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

MaximizeBox: Aktiviert die Titelleistenschaltfläche zum Maximieren des Fensters. Diese Option ist auch Bestandteil von Resize (siehe unten).

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

MinSize und MaxSize [v1.0.44.13+]: Legt die minimale und/oder maximale Größe des Fensters fest, z. B. wenn der Benutzer die Kanten des Fensters zieht, um es kleiner oder größer zu machen. Geben Sie das Wort 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 Dimensionen (in Pixel) spezifizieren die Größe des Clientbereichs des Fensters (das ist der Bereich ohne Rahmen, Titelleiste und Menüleiste). Jede Zahl muss im dezimalen Format sein.

Die Breite oder Höhe kann weggelassen werden, um sie unverändert zu lassen (z. B. +MinSize640x oder +MinSizex480). Darüber hinaus kann Min/MaxSize mehrfach angegeben werden, um eine Dimension mit der aktuellen Größe des Fensters und die andere mit einer expliziten Größe zu versehen. +MinSize +MinSize640x beispielsweise verwendet die aktuelle Größe des Fensters für die Höhe und 640 Pixel für die Breite.

Wenn MinSize und MaxSize nie genutzt werden, gelten die Standardwerte des Betriebssystems (ähnlich wie Gui -MinSize -MaxSize, was auch die Standardwerte wiederherstellt).

Hinweis: Das Fenster muss +Resize haben, damit der Benutzer es kleiner oder größer machen kann.

OwnDialogs: Gui +OwnDialogs bewirkt, dass alle nachfolgenden MsgBox-, InputBox-, FileSelectFile- oder FileSelectFolder-Dialogfenster im aktuellen Thread (z. B. ButtonOK-Subroutine) dem aktuellen Fenster untergeordnet werden. Solche Dialogfenster werden dabei modal; das heißt, dass der Benutzer das Dialogfenster schließen muss, bevor er weiter mit dem GUI-Fenster interagieren kann. ToolTip-, Progress- und SplashImage-Fenster können hingegen nicht modal gemacht werden, selbst wenn sie einem Fenster untergeordnet werden; diese befinden sich immer über dem Hauptfenster. Untergeordnete Dialogfenster werden automatisch zerstört, sobald das Hauptfenster 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 MeineGui:+OwnDialogs -- werden die Dialogfenster dem Standardfenster des Threads untergeordnet.

Owner: Mit +Owner kann das Fenster einem anderen Fenster untergeordnet werden. Ein untergeordnetes Fenster hat standardmäßig keine eigene Taskleistenschaltfläche und befindet sich, sofern sichtbar, immer über dem Hauptfenster. Es wird automatisch zerstört, sobald das Hauptfenster zerstört wird. +Owner funktioniert nur, nachdem das Hauptfenster erstellt wurde. In [v1.1.05+] kann diese Option vor oder nach Erstellen des Hauptfensters verwendet werden. Es gibt zwei Möglichkeiten, wie man +Owner nutzen kann:

Gui, MeineGui:+OwnerAndereGui  ; Definiert MeineGui als Unterfenster von AndereGui.
Gui, MeineGui:+Owner  ; Definiert MeineGui als Unterfenster vom Hauptfenster des Skripts, um dessen Taskleistenschaltfläche zu verstecken.

[v1.1.03+]: Verwenden Sie +Owner und direkt danach den Namen oder die Nummer einer bereits vorhandenen GUI oder den Fenster-Handle (HWND) eines beliebigen nicht-untergeordneten Fensters.

Hinweis zur Kompatibilität: In [v1.1.03+] entfernt +Owner den WS_CHILD-Style und setzt den WS_POPUP-Style. Um einer GUI ein Fenster überzuordnen, müssen Skripte entweder auf die +Parent-Option zurückgreifen, oder die entsprechenden Styles nach der +Owner-Option überschreiben.

Um dem Benutzer die Interaktion mit dem Hauptfenster zu verbieten, während ein untergeordnetes Fenster angezeigt wird, nutzt man Gui +Disabled. Später kann man die Interaktion mit dem Hauptfenster, nachdem das untergeordnete Fenster geschlossen oder entfernt wurde, wieder mit Gui -Disabled erlauben. Dies sollte aber erfolgen, bevor das untergeordnete Fenster geschlossen bzw. zerstört wird, damit das übergeordnete Fenster automatisch reaktiviert werden kann.

Parent [v1.1.03+]: Verwenden Sie +Parent und direkt danach den Namen oder die Nummer einer bereits vorhandenen GUI oder den Fenster-Handle (HWND) eines beliebigen Fensters oder Steuerelements, um der GUI eines dieser Genannten überzuordnen. Mit -Parent kann die GUI wieder in ein nicht-untergeordnetes Fenster umgewandelt 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 Aktivierung der Schaltfläche zum Maximieren des Fensters verhindert werden.

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

Theme: Geben Sie -Theme an, um alle nachfolgende Steuerelemente im klassischen Design darzustellen (nur ab Windows XP). Mit +Theme kann das neue Design wieder für nachfolgende Steuerelemente eingeschaltet werden.

Hinweis: Die Theme-Option funktioniert nicht, wenn das Betriebssystem älter als Windows XP ist oder wenn Windows XP selbst das klassische Design aktiv hat.

Um diese Option nur für ein bestimmtes Steuerelement zu ändern, fügt man +Theme oder -Theme in den Optionen-Parameter ein, während es erstellt wird.

ToolWindow: Stattet das Fenster mit einer kleineren Titelleiste aus und versteckt dessen Taskleistenschaltfläche.

(Namenloser Style): Geben Sie ein Plus- oder Minuszeichen und direkt danach eine dezimale oder hexadezimale Nummer an, um einen Style hinzuzufügen oder zu entfernen.

(Namenloser erweiterter Style): Geben Sie ein Plus- oder Minuszeichen und direkt danach ein E und eine dezimale oder hexadezimale Nummer an, um einen erweiterten Style hinzuzufügen oder zu entfernen. +E0x40000 beispielsweise würde den WS_EX_APPWINDOW-Style hinzufügen, um eine Taskleistenschaltfläche für ein Fenster bereitzustellen, das aktuell keine hat. Alle anderen erweiterten Styles, die nur selten verwendet werden und aufgrund dessen hier nicht aufgelistet sind, finden Sie unter www.microsoft.com mit Suchbegriffen wie WS_EX_APPWINDOW.

Stattet das Fenster mit einer Menüleiste aus.

Gui, Menu , Menüname

Verwenden Sie hierfür 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

In der ersten Zeile oben ist zu erkennen, dass nach Ö&ffnen das Tastenkürzel Ctrl+F erfolgt (mit einem Tabulatorzeichen dazwischen). Wenn der Benutzer dieses Tastenkürzel drückt, wird die Aktion des Menüpunkts ausgeführt, ohne dass er erst dorthin navigieren muss. [v1.1.04+]: Tastenkürzel mit den Standardmodifikatoren Ctrl, Alt und Shift werden automatisch als Keyboard Accelerator für die GUI registriert. Keyboard Accelerators ohne Modifikatoren sind Groß-/Kleinschreibung-sensitiv und können nur durch ungewöhnliche Mitteln wie IME oder Alt+NNNN ausgelöst werden.

Wenn eine bestimmte Tastenkombination nicht automatisch funktioniert, muss eventuell ein kontextabhängiger Hotkey verwendet werden. Beachten Sie aber, dass solche Hotkeys üblicherweise nicht durch Send ausgelöst werden können und dass sie, im Gegensatz zu einem typischen Keyboard Accelerator, andere Skripte stören können.

Verwenden Sie Gui Menu (bzw. lassen Sie den letzten Parameter weg), um die aktuelle Menüleiste des Fensters zu entfernen.

Ein Menü, das bereits als Menüleiste fungiert, sollte nicht als Aufklappmenü oder Untermenü genutzt werden. Das liegt daran, dass Menüleisten intern ein anderes Format benötigen (diese Einschränkung gilt jedoch nur für die Menüleiste selbst, nicht für darin enthaltenen Untermenüs). Um dieses Problem zu umgehen, erstellt man zweimal das gleiche Menü und weist eines davon der Menüleiste zu.

Das Anwenden von destruktiven Menu-Unterbefehlen wie Delete und DeleteAll auf eine Menüleiste (und in einigen Fällen auf die darin enthaltenen 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 (d. h. Menüname weglassen); 2) führen Sie die gewünschte Änderungen durch; 3) fügen Sie die Menüleiste via Gui, Menu, MeineMenüleiste wieder hinzu.

Minimize / Maximize / Restore

Macht das Fenster sichtbar (falls nötig) und führt die entsprechende Operation durch.

Gui, Minimize
Gui, Maximize
Gui, Restore

Wenn das Fenster nicht existiert (z. B. weil es via Gui Destroy zerstört wurde), ist dieser Unterbefehl wirkungslos.

Flash

Lässt die Taskleistenschaltfläche des Fensters einmal aufblinken.

Gui, Flash , Off

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 Version des Betriebssystems). 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.
}

Default

Ändert den Standard-GUI-Fensternamen des aktuellen Threads.

Gui, GuiName:Default

Dieser Fenstername kommt standardmäßig zum Einsatz, wenn GuiControl, GuiControlGet und der Gui-Befehl selbst ohne spezifischen Fensternamen verwendet werden. Das folgende Beispiel zeigt, wie man den Standardfensternamen in "MeineGui" ändern kann: Gui MeineGui:Default. Weitere Informationen zum Standardfenster finden Sie unter Standardfenster eines Threads.

[v1.1.03+]: GuiName kann der Fenster-Handle (HWND) eines GUI-Fensters des Skripts sein. Wenn das Fenster einen Namen hat, wird dieser Name zum Standardfensternamen, der auch nach Zerstörung des Fensters erhalten bleibt. Wenn das Fenster keinen Namen hat, wird der Standardfenstername, sobald das Fenster zerstört wird, auf 1 zurückgesetzt.

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

Positionierung und Layout via SmartGUI Creator

Für einfache Layouts reichen in der Regel die im nächsten Abschnitt beschriebenen Optionen vollkommen aus. Für komplexere Layouts allerdings könnten Tools wie der SmartGUI Creator von Rajat hilfreicher sein, weil sie es möglich machen, ein GUI-Fenster visuell zu gestalten, gemäß dem Motto "what you see is what you get". Der SmartGUI Creator ist kostenlos und kann unter www.autohotkey.com/docs/SmartGUI/ heruntergeladen werden.

Position und Größe von Steuerelementen ändern

Wenn Dimensionen und/oder Koordinaten in Optionen weggelassen werden, wird das Steuerelement relativ zum vorherigen Steuerelement positioniert und/oder je nach Inhalt und Typ automatisch dimensioniert.

Folgende Optionen werden unterstützt:

R: Textzeilen (kann eine Floating-Point-Zahl enthalten, z. B. R2.5). R ist oft besser als H (Höhe). Wenn R und H gleichzeitig vorhanden sind, wird R bevorzugt. Bei einer GroupBox ist das die Anzahl der Steuerelemente, für die Platz in der Box reserviert werden soll. Bei einer DropDownList, ComboBox oder ListBox ist das die Anzahl der Listeneinträge, die der Listenbereich des Steuerelements maximal anzeigen soll (in Windows XP oder höher ist ratsam, eine DropDownList oder ComboBox ohne R und H zu erstellen, 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 maximal angezeigt werden sollen.

W: Breite in Pixel. Wenn diese Option fehlt, wird die Breite von einigen Steuerelementen automatisch anhand ihres Inhalts berechnet. Alle anderen Steuerelemente haben standardmäßig folgende Breiten:
Tab-Steuerelement: Das 30-fache der aktuellen Schriftgröße, plus das 3-fache des horizontalen Abstands.
Vertikale ProgressBar: Das 2-fache der aktuellen Schriftgröße.
Horizontale ProgressBar, horizontaler Slider, DropDownList, ComboBox, ListBox, GroupBox, Edit, Hotkey: Das 15-fache der aktuellen Schriftgröße (außer GroupBox, wo das 18-fache gilt, um Platz für Abstände zu schaffen).

H: Höhe in Pixel. Wenn man sowohl H als auch R weglässt, ist DropDownList, ComboBox, ListBox und ein leeres mehrzeiliges Edit-Steuerelement standardmäßig 3 Zeilen hoch; GroupBox standardmäßig 2 Zeilen hoch; vertikaler Slider und vertikale ProgressBar standardmäßig 5 Zeilen hoch; horizontaler Slider standardmäßig 30 Pixel hoch (außer wenn eine Dicke angegeben wurde); horizontale ProgressBar standardmäßig das 2-fache der aktuellen Schriftgröße hoch; Hotkey standardmäßig 1 Zeile hoch; und Tab standardmäßig 10 Zeilen hoch. Alle anderen Steuerelemente bekommen automatisch eine Höhe zugewiesen, die auf ihren Inhalt basiert. Beachten Sie bei einer DropDownList und ComboBox, dass sich H auf eine Höhe bezieht, die sich zusammensetzt aus der Höhe des sichtbaren Bereichs und der Höhe des Listenbereichs (bei einem zu niedrigen Wert wird immer mindestens ein Listeneintrag angezeigt). Außerdem ist es ratsam, die gewünschte Höhe via R statt H zu definieren, um die vollständige Sichtbarkeit der Textzeilen zu gewährleisten.

wp+n, hp+n, wp-n und hp-n können genutzt werden, um die Breite und/oder Höhe eines Steuerelements auf genau die Breite oder Höhe des zuvor hinzugefügten Steuerelements zu setzen, die optional um eine beliebige Zahl (in diesem Fall n) erhöht oder verringert werden kann. wp beispielsweise würde die Breite eines Steuerelements auf die des vorherigen Steuerelements setzen, und wp-50 auf die Breite des vorherigen Steuerelements, aber um 50 verringert.

X: X-Position. x0 y0 beispielsweise positioniert das Steuerelement in die obere linke Ecke des Clientbereichs des Fensters (das ist der Bereich ohne Rahmen, Titelleiste und Menüleiste). Wenn man Y ohne X angibt, wird das Steuerelement auf die rechte Seite aller zuvor hinzugefügten Steuerelementen positioniert, was als Beginn einer neuen "Spalte" gesehen werden kann.

Y: Y-Position. Wenn man X ohne Y angibt, wird das Steuerelement unterhalb aller zuvor hinzugefügten Steuerelementen positioniert, was als Beginn einer neuen "Reihe" gesehen werden kann.

X und/oder Y wegzulassen hat den Vorteil, dass sich ein GUI-Layout automatisch an zukünftigen Änderungen bzgl. der Größe von Steuerelementen oder der Schrift anpassen kann. Wenn man stattdessen jedes Steuerelement absolut positioniert, müssen alle Steuerelemente unterhalb und/oder auf der rechten Seite des Steuerelements, dessen Größe geändert wurde, eventuell manuell verschoben werden.

Wenn sowohl X als auch Y weggelassen werden, wird das Steuerelement mit einem bestimmten Abstand unterhalb des zuvor hinzugefügten Steuerelements positioniert.

X und Y kann optional ein Pluszeichen enthalten, um ein Steuerelement relativ zum rechten bzw. unteren Rand des zuvor hinzugefügten Steuerelements zu positionieren. Y+10 beispielsweise positioniert das Steuerelement unterhalb des zuvor hinzugefügten Steuerelements, die genau 10 Pixel voneinander entfernt sind. X+10 hingegen positioniert das Steuerelement 10 Pixel entfernt auf die rechte Seite des zuvor hinzugefügten Steuerelements. Da negative Zahlen wie X-10 für die absolute Positionierung reserviert sind, müssen negative Offsets mit einem Pluszeichen beginnen. Zum Beispiel: X+-10.

[v1.1.16+]: X+ und Y+ können den Buchstaben M als Ersatz für den aktuellen Abstand (Margin) des Fensters nutzen. x+m beispielsweise verwendet den rechten Rand des zuvor hinzugefügten Steuerelements und fügt den aktuellen Standardabstand hinzu. xp y+m positioniert ein Steuerelement unterhalb des zuvor hinzugefügten Steuerelements, während eine X-Koordinate allein standardmäßig yp impliziert.

xp+n, yp+n, xp-n und yp-n (hierbei ist n eine beliebige Zahl) können genutzt werden, um Steuerelemente relativ zur linken oberen Ecke des zuvor hinzugefügten Steuerelements zu positionieren. Dies ist zum Beispiel nützlich, um Steuerelemente mit einer GroupBox zu umschließen.

xm und ym können genutzt werden, um ein Steuerelement an den ganz linken bzw. obersten Abstand (Margin) des Fensters zu positionieren (nach diesen Optionen kann ein Plus-/Minuszeichen und eine Zahl erfolgen). Wenn man ym ohne X-Position angibt, wird das Steuerelement an den obersten Abstand, aber auf die rechte Seite aller zuvor hinzugefügten Steuerelementen positioniert, was als Beginn einer neuen "Spalte" gesehen werden kann. Umgekehrt gilt das gleiche (xm ohne Y-Position).

xs und ys: Diese haben einen ähnlichen Effekt wie xm und ym, allerdings beziehen sie sich auf Koordinaten, die von einem zuvor hinzugefügten Steuerelement stammen, dessen Optionen das Wort Section enthält (das erste Steuerelement eines Fensters beginnt immer eine neue Sektion, egal ob dessen Optionen dieses Wort enthält). Wenn man ys ohne X-Position angibt, wird das Steuerelement auf die zuvor gespeicherte Y-Position, aber auf die rechte Seite aller nach dem Gebrauch des Wortes Section hinzugefügten Steuerelementen positioniert, was als Beginn einer neuen "Spalte" gesehen werden kann. Zum Beispiel:

Gui, Add, Edit, w600  ; Fügt ein ziemlich breites Eingabefeld in den obersten Bereich des Fensters ein.
Gui, Add, Text, Section, Vorname:  ; Speichert die Position dieses 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).

Nach xs und ys kann optional ein Plus-/Minuszeichen und eine Zahl erfolgen. Außerdem ist es möglich, das Wort Section und xs/ys in den Optionen eines Steuerelements anzugeben, damit das Steuerelement gleichzeitig auf die alte Sektion zugreifen kann und eine neue Sektion für nachfolgende Steuerelemente etabliert.

Benutzereingaben speichern und verarbeiten

V: Variable. Verknüpft eine Variable mit einem Steuerelement. Geben Sie direkt nach dem Buchstaben V den Namen einer globalen Variable ein (oder eine lokale ByRef-Variable, die auf eine globale Variable verweist, oder [in v1.0.46.01+] eine statische Variable). vMeinEdit beispielsweise speichert den Inhalt des Steuerelements in die Variable MeinEdit, sobald man Gui Submit verwendet. Das Zuordnen von Variablen ist auch bei Steuerelementen hilfreich, die nicht eingabefähig sind (z. B. bei Text- oder GroupBox-Steuerelementen), weil der Name von so einer Variable auch als eindeutiger Identifikator für GuiControl, GuiControlGet und A_GuiControl verwendet werden kann.

Hinweis: Gui Submit ändert weder die zugeordneten Variablen von nicht-eingabefähigen Steuerelementen (z. B. Text und GroupBox) noch von Steuerelementen, wo entsprechend dokumentiert (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 direkt nach dem Buchstaben G den Namen eines Labels an, das ausgeführt werden soll. gCancel kann genutzt werden, um ein indirektes Gui Cancel auszulösen (aber wenn ein Label namens "Cancel" im Skript existiert, wird dieses stattdessen ausgeführt). Die Subroutine kann auf folgende interne Variablen zurückgreifen: A_Gui, A_GuiControl, A_GuiEvent und A_EventInfo.

[v1.1.20+]: Man kann auch den Namen einer Funktion angeben, sofern dieser Name noch nicht als Label existiert. Alternativ kann via GuiControl ein Funktionsobjekt zugeordnet werden. Die Funktion kann optional die folgenden Parameter akzeptieren (gElementEreignis hat in diesem Fall die Funktion gesetzt):

ElementEreignis(ElementHwnd, GuiEreignis, EreignisInfo, ErrLevel:="")

Die Bedeutung der Parameter hängt vom Typ des Steuerelements ab. Hinweis: Wenn man den vierten Parameter ohne Standardwert deklariert, kann die Funktion nur von Ereignissen aufgerufen werden, die vier Parameter bereitstellen.

Steuerelemente: Häufig verwendete Styles und Optionen

Hinweis: Vorzeichenlose Optionen werden standardmäßig hinzugefügt; zum Beispiel bewirkt sowohl Wrap als auch +Wrap, dass der automatische Zeilenumbruch im Text des Steuerelements aktiviert wird. Um diese Eigenschaft hingegen wieder zu entfernen, gibt man -Wrap an.

AltSubmit: Verwendet eine alternative Submit-Methode. Bei einer DropDownList, ComboBox oder ListBox bewirkt diese Option, dass Gui Submit nicht den Text, sondern die Position des ausgewählten Listeneintrags speichert. Wenn kein Listeneintrag ausgewählt ist, wird bei einer ComboBox weiterhin der Text des Eingabefeldes gespeichert, während bei einer DropDownList oder ListBox weiterhin die zugeordnete Ausgabevariable leer gemacht wird. Hinweis: AltSubmit beeinflusst auch das Verhalten von GuiControlGet beim Abrufen des Inhalts eines solchen Steuerelements.

C: Farbe des Textes (funktioniert nicht bei Button-Steuerelementen). Geben Sie nach dem Buchstaben C den Namen einer Farbe (siehe Farbentabelle) oder einen RGB-Wert an (mit oder ohne 0x-Präfix). Beispiele: cRed, cFF2211, c0xFF2211, cDefault.

Disabled: Stellt das Steuerelement in einem deaktivierten Zustand dar und bewirkt, dass es weder fokussiert noch geändert werden kann. Um später die Interaktion mit diesem Steuerelement wieder zu aktivieren, nutzt man GuiControl Enable. 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 ist Disabled das gleiche wie Disabled%VarMitEins%.

Hidden: Versteckt zunächst das Steuerelement. 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 ist Hidden das gleiche wie Hidden%VarMitEins%.

Left: Richtet den Text des Steuerelements 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 des Steuerelements nach rechts aus. Bei einer CheckBox und einem Radio-Button bewirkt diese Option zudem, dass das Auswahlfeld selbst auf die rechte Seite des Steuerelements gesetzt wird. Diese Option funktioniert nur bei folgenden Steuerelementen: Text, Edit, Button, Checkbox, Radio, UpDown, Slider, Tab, Tab2, GroupBox, DateTime, Link.

Center: Zentriert den Text des Steuerelements 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 Positionsdaten des Steuerelements, um sie später mit den oben beschriebenen Positionierungsoptionen xs und ys zu verwenden.

Tabstop: Geben Sie -Tabstop an, um ein eingabefähiges Steuerelement überspringen zu lassen, wenn der Benutzer die Tab-Taste zum Navigieren drückt.

Wrap: Aktiviert den automatischen Zeilenumbruch im Text des Steuerelements. Da bei nahezu allen Steuerelementen standardmäßig der automatische Zeilenumbruch aktiv ist, nutzt man in der Regel -Wrap, um diese Option 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 horizontale Scrollbreite ist standardmäßig das 3-fache der Breite der Listbox. Um eine andere Scrollbreite zu definieren, gibt man direkt nach dem Wort HScroll eine Zahl an. HScroll500 beispielsweise ermöglicht einen scrollbaren Bereich von 500 Pixeln innerhalb der ListBox. Wenn die angegebene Scrollbreite allerdings kleiner als die Breite der ListBox ist, wird keine Scrollleiste angezeigt (obwohl das bloße Vorhandensein von HScroll es überhaupt erst möglich macht, die horizontale Scrollleiste später via GuiControl, +HScroll500, MeineScrollleiste hinzuzufügen).

Steuerelemente: Selten verwendete Styles und Optionen

BackgroundTrans: Verwendet einen transparenten Hintergrund, der jedes Steuerelement, das sich hinter einem Text-, Picture- oder GroupBox-Steuerelement befindet, durchscheinen lässt. 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 später wieder entfernt werden. Weitere Informationen zu transparenten Bildern finden Sie im AltSubmit-Abschnitt des Picture-Steuerelements. Bekannte Einschränkung: BackgroundTrans funktioniert eventuell nicht ordnungsgemäß bei Steuerelementen innerhalb eines Tab-Steuerelements, das eine ListView enthält.

-Background: Lässt ein Steuerelement dessen Standard-Hintergrundfarbe und nicht die via Gui Color definierte Hintergrundfarbe verwenden. Diese Option wird häufig genutzt, um ein Tab-Steuerelement mit dessen Standardfarbe statt Fensterfarbe zu versehen. Mit GuiControl, +Background kann diese Option später wieder entfernt werden.

Border: Umrahmt das Steuerelement mit einer dünnen Linie. Die meisten Steuerelemente sind bereits eingerahmt und benötigen aufgrund dessen diese Option nicht. Wenn man ein bereits existierendes Steuerelement mit einem Rahmen versieht, muss die Breite und Höhe des Steuerelements eventuell um einen Pixel erweitert werden, um dessen korrekte Darstellung zu gewährleisten.

HwndAusgabeVar [v1.0.46.01+]: Speichert den Fenster-Handle (HWND) des Steuerelements in AusgabeVar, wenn diese Option in Verbindung mit Gui Add genutzt wird. Zum Beispiel: Gui, Add, Edit, vMeinEdit HwndMeinEditHwnd. Wenn man diese Option innerhalb einer Funktion verwendet, wird AusgabeVar als dynamische Variable behandelt. Dieser Fenster-Handle (HWND) ist zum Beispiel nützlich, um ein Steuerelement via PostMessage, SendMessage und DllCall anzusteuern. Außerdem kann der Fenster-Handle eines Steuerelements direkt via ahk_id in einem Fenstertitel-Parameter angegeben werden (das auch mit versteckten Steuerelementen funktioniert, selbst wenn DetectHiddenWindows ausgeschaltet ist) oder [in v1.1.04+] für den SteuerelementID-Parameter von GuiControl und GuiControlGet verwendet werden. Der Fenster-Handle eines nicht-untergeordneten Fensters kann via Gui MeineGui:+HwndAusgabeVar abgerufen werden.

Theme: Mit dieser Option kann das aktuelle Fenster-Design des neu erstellten Steuerelements überschrieben werden. Bei bereits existierenden Steuerelementen hat diese Option keinen Effekt; allerdings kann sich das in einer zukünftigen Version noch ändern. Weitere Informationen finden Sie unter Gui +/-Theme.

(Namenloser Style): Geben Sie ein Plus- oder Minuszeichen und direkt danach eine dezimale oder hexadezimale Nummer an, um einen Style hinzuzufügen oder zu entfernen. Wenn das Vorzeichen fehlt, wird der Style standardmäßig hinzugefügt.

(Namenloser erweiterter Style): Geben Sie ein Plus- oder Minuszeichen und direkt danach ein E und eine dezimale oder hexadezimale Nummer an, um einen erweiterten Style hinzuzufügen oder zu entfernen. Wenn das Vorzeichen fehlt, wird der Style standardmäßig hinzugefügt. E0x200 beispielsweise fügt den WS_EX_CLIENTEDGE-Style hinzu, der Steuerelemente wie z. B. Picture mit einem abgesenkten Rahmen ausstattet. Alle anderen erweiterten Styles, die nur selten verwendet werden und aufgrund dessen hier nicht aufgelistet sind, finden Sie unter www.microsoft.com mit Suchbegriffen wie WS_EX_CLIENTEDGE.

Fensterereignisse

Die folgenden Label (Subroutinen) werden automatisch einem GUI-Fenster zugeordnet, wenn sie im Skript verwendet werden:

[v1.1.20+]: Wenn ein Label für ein bestimmtes Ereignis nicht existiert, kann stattdessen eine Funktion über diesen Namen aufgerufen werden. Die Funktion kann optional den Fenster-Handle (HWND) der GUI als ersten Parameter akzeptieren. Einige Ereignisse stellen noch mehr Parameter bereit.

Um auf die Ereignisse eines anderen Fensters anstelle des Fensters mit der Nummer 1 zuzugreifen, muss der Name oder die Nummer des Fensters (falls vorhanden) als Präfix für die oben genannten speziellen Label verwendet werden; zum Beispiel sind 2GuiEscape und 2GuiClose die Standardlabel für das Fenster Nummer 2, und MeineGuiGuiEscape und MeineGuiGuiClose die Standardlabel für das Fenster MeineGui. Mit Gui +Label kann ein benutzerdefiniertes Präfix definiert werden.

GuiClose: Wird gestartet, wenn das Fenster mit eine der folgenden Methoden geschlossen wird: Drücken der X-Schaltfläche in der Titelleiste, Auswählen des Systemmenüpunkts "Schließen" oder Schließen via WinClose. Wenn dieses Label fehlt, wird das Fenster beim Schließen 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 die GUI standardmäßig versteckt. Um das zu verhindern, muss die Funktion via Return einen Integer ungleich 0 zurückgeben; zum Beispiel:

GuiClose(GuiHwnd) {  ; Dieser Parameter ist optional.
    MsgBox 4,, Wollen Sie die GUI wirklich verstecken?
    IfMsgBox No
        return true  ; true = 1
}

GuiEscape: Wird gestartet, wenn der Benutzer Esc drückt, während das GUI-Fenster aktiv ist. Wenn dieses Label fehlt, hat das Drücken von Esc keine Auswirkung. Bekannte Einschränkung: Wenn die Interaktion mit dem ersten Steuerelement im Fenster deaktiviert ist (möglicherweise abhängig vom Typ des Steuerelements), wird das GuiEscape-Label nicht gestartet. Es gibt eventuell noch andere Faktoren, die diesen Effekt hervorrufen.

GuiSize: Wird gestartet, wenn das Fenster kleiner/größer gemacht, minimiert, maximiert oder wiederhergestellt wird. Die internen Variablen A_GuiWidth und A_GuiHeight enthalten die neue Breite und Höhe des Clientbereichs des Fensters (das ist der Bereich ohne Rahmen, Titelleiste und Menüleiste). Zusätzlich enthält sowohl A_EventInfo als auch ErrorLevel eine der folgenden Zahlen:

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

Mithilfe von GuiSize können Steuerelemente neu positioniert und größer/kleiner gemacht werden, während der Benutzer die Größe des Fensters ändert. Um diesen Vorgang zu vereinfachen, können Sie AutoXYWH() von tmplinshi und toralf nutzen.

Beim Ändern der Fenstergröße (auch via Skript) wird GuiSize eventuell nicht sofort aufgerufen. Wie jedes Fensterereignis wird GuiSize erst aufgerufen, wenn der aktuelle Thread unterbrechbar wird. Nutzen Sie das folgende Beispiel, um sicherzustellen, dass GuiSize beim Ändern der Fenstergröße sofort aufgerufen wird:

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

[v1.1.22.05+]: Gui Show macht automatisch ein Sleep -1, demzufolge muss in diesem Fall kein Sleep aufgerufen werden.

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

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

GuiContextMenu: Wird gestartet, wenn der Benutzer mit der rechten Maustaste auf eine beliebige Stelle im Fenster klickt (außer Titelleiste und Menüleiste). Das Ereignis wird auch gestartet, wenn der Benutzer die Menü-Taste oder Umschalt+F10 drückt. Im Gegensatz zu vielen anderen GUI-Labels können mehrere GuiContextMenu-Threads zur selben Zeit aktiv sein. GuiContextMenu kann auf folgende interne Variablen zugreifen:

  1. A_GuiControl enthält den Text oder Variablennamen des Steuerelements, auf dem sich das Ereignis bezieht (leer, wenn nicht).
  2. A_EventInfo: Bei einer ListBox, ListView oder TreeView gibt A_EventInfo an, auf welcher Reihe bzw. Element der Versuch unternommen wurde, das Kontextmenü zu öffnen:
    ListBox oder ListView: A_EventInfo wird auf die Nummer der aktuell fokussierten Reihe gesetzt (oder 0, wenn nicht).
    TreeView: Bei Rechtsklick wird A_EventInfo auf die ID-Nummer des angeklickten Elements gesetzt (oder 0, wenn der Benutzer etwas anderes als ein Element anklickt). Bei der Menü-Taste oder Umschalt+F10 wird A_EventInfo auf die ID-Nummer des ausgewählten Elements gesetzt.
  3. A_GuiX und A_GuiY enthalten die X- und Y-Koordinaten der Position, auf der das Kontextmenü 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 enthält das Wort RightClick, wenn der Benutzer einen Rechtsklick gemacht hat, oder das Wort Normal, wenn das Kontextmenü via Menü-Taste oder Umschalt+F10 aufgerufen wurde.

Hinweis: Da Edit und MonthCal über ein eigenes Kontextmenü verfügen, kann in solchen Steuerelementen kein GuiContextMenu-Ereignis via Rechtsklick gestartet werden.

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

GuiContextMenu(GuiHwnd, ElementHwnd, EreignisInfo, IstRechtsklick, X, Y)

ElementHwnd ist leer, wenn das Ereignis nicht von einem Steuerelement stammt. IstRechtsklick ist wahr, wenn A_GuiEvent das Wort RightClick enthält.

GuiDropFiles: Wird gestartet, wenn Dateien/Ordner während eines Drag-and-Drop-Vorgangs auf das Fenster abgelegt werden (aber wenn das Label bereits läuft, werden Drop-Ereignisse ignoriert). GuiDropFiles kann auf folgende interne Variablen zugreifen:

  1. A_GuiControl enthält den Text oder Variablennamen des Steuerelements, auf dem die Dateien abgelegt wurden (leer, wenn nicht).
  2. A_EventInfo und ErrorLevel enthalten die Anzahl der abgelegten Dateien.
  3. A_GuiX und A_GuiY enthalten die X- und Y-Koordinaten der Position, auf der die Dateien abgelegt wurden (relativ zur oberen linken Ecke des Fensters).
  4. A_GuiEvent enthält die vollständigen Pfadnamen jeder abgelegten Datei; abgesehen vom letzten Pfadnamen enden alle mit einem Zeilenumbruchszeichen (`n).

Mit einer parsenden Schleife können einzelne Dateien extrahiert werden; zum Beispiel:

; BEISPIEL #1:
Loop, Parse, A_GuiEvent, `n
{
    MsgBox, 4,, Datei Nummer %A_Index% ist:`n%A_LoopField%.`n`nWeiter?
    IfMsgBox, No, break
}

; BEISPIEL #2: Nur die erste Datei extrahieren:
Loop, Parse, A_GuiEvent, `n
{
    ErsteDatei := A_LoopField
    break
}

; BEISPIEL #3: Dateien in alphabetischer Reihenfolge durchgehen:
Dateiliste := A_GuiEvent
Sort, Dateiliste
Loop, Parse, Dateiliste, `n
    MsgBox Datei Nummer %A_Index% ist:`n%A_LoopField%.

Um das Drag-and-Drop-Feature eines Fensters zu deaktivieren, entfernt man den WS_EX_ACCEPTFILES-Style via Gui -E0x10. Mit Gui +E0x10 kann es später wieder aktiviert werden.

[v1.1.20+]: Wenn GuiDropFiles eine Funktion ist, akzeptiert sie die im nächsten Beispiel gezeigten Parameter. ElementHwnd ist leer, wenn Dateien auf die GUI selbst abgelegt wurden. DateiArray ist ein Array (Objekt) mit Dateinamen, mit dem zum Beispiel via DateiArray[1] die erste Datei abgerufen oder via DateiArray.MaxIndex() die Anzahl der Dateien zurückgegeben werden kann. Mit einer For-Schleife können die Dateien einzeln durchgegangen werden:

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

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

Mehrere GUI-Fenster erstellen

Um anstelle des Standardfensters mit einem anderen Fenster 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, MeineGui:Add, Text,, Text für das Über-Fenster.
Gui, MeineGui:Show

Gui MeineGui:Default kann genutzt werden, um das obige Präfix "MeineGui:" zu vermeiden. Darüber hinaus kann das Präfix in einem GUI-Thread weggelassen werden, wenn dieser Thread mit demselben Fenster agiert, das diesen Thread gestartet hat.

[v1.1.03+]: Gui-Namen müssen den Richtlinien zum Erstellen von Variablennamen entsprechen. Jede Nummer größer als 99 oder länger als zwei Zeichen (z. B. 0x01) wird automatisch als Fenster-Handle (HWND) einer GUI behandelt. Wenn diese GUI nicht existiert, wird der Befehl fehlschlagen. Es können solange neue Fenster erstellt werden, bis alle verfügbaren Systemressourcen aufgebraucht sind.

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

GUI-Ereignisse, -Threads und -Subroutinen

Ein GUI-Thread sind Threads, die von einer GUI-Aktion gestartet wurden. Zu den GUI-Aktionen gehört beispielsweise das Auswählen eines Menüpunkts oder das Auslösen eines g-Labels (z. B. durch Drücken einer Schaltfläche).

Der Standardfenstername eines GUI-Threads ist der Name des Fensters, das diesen Thread gestartet hat. Nicht-GUI-Threads verwenden standardmäßig 1.

Jedes Mal, wenn ein GUI-Thread gestartet wird, wird das GUI-Fenster selbst als zuletzt gefundenes Fenster für diesen Thread festgelegt. Dadurch können bei fenster- oder steuerelementspezifischen Befehlen -- z. B. WinMove, WinHide, WinSet, WinSetTitle und ControlGetFocus -- die Fenstertitel- und Fenstertext-Parameter weggelassen werden, damit diese Befehle mit dem GUI-Fenster selbst agieren können (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, setzt man Critical auf die erste Zeile der Subroutine (allerdings werden dadurch auch andere Threads, wie z. B. das Drücken eines Hotkeys, hinausgezögert).

Die internen Variablen A_Gui und A_GuiControl enthalten den Fensternamen und die ID des Steuerelements, das den aktuellen Thread gestartet hat. Weitere Informationen finden Sie unter A_Gui und A_GuiControl.

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 navigiert werden, ist abhängig davon, zu welchem Zeitpunkt sie hinzugefügt wurden. Wenn das Fenster zum ersten Mal angezeigt wird, bekommt das erste eingabefähige Steuerelement mit aktiviertem Tabstop-Style (was auf die meisten zutrifft) den Tastaturfokus.

Bestimmte Steuerelemente können ein Und-Zeichen (&) enthalten, um ein Tastenkürzel zu erstellen, das im Text des Steuerelements je nach Systemeinstellungen als unterstrichenes Zeichen dargestellt wird. Um so ein Tastenkürzel auszulösen, muss der Benutzer die Alt-Taste gedrückt halten und dann das entsprechende Zeichen auf der Tastatur drücken. Drückt man das Tastenkürzel von einem Button, einer CheckBox oder einem Radio-Button, ist der Effekt das gleiche wie, als würde man das Steuerelement anklicken. Drückt man das Tastenkürzel von einer GroupBox oder einem Text-Steuerelement, wird der Tastaturfokus auf das erste eingabefähige Tabstop-Steuerelement gesetzt, welches danach erstellt wurde. 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 Steuerelementen darzustellen, schreibt man zwei aufeinanderfolgende Und-Zeichen. Zum Beispiel: Gui, Add, Button,, Speichern && Beenden.

Fensterdarstellung

Ein GUI-Fenster verwendet als Symbol das Tray-Symbol, welches zum Zeitpunkt der Erstellung des Fensters wirksam war. Daher muss, sofern ein anderes Symbol angezeigt werden soll, das Tray-Symbol vor der Erstellung des Fensters geändert werden. Zum Beispiel: Menu, Tray, Icon, MeinSymbol.ico. Es ist auch möglich, ein Fenster mit einem anderen großen Symbol zu versehen (das große Symbol wird im Alt-Tab-Fenster angezeigt). Dazu verwendet man LoadPicture und SendMessage; zum Beispiel:

Symbolgröße := 32  ; Die ideale Größe für Alt-Tab variiert je nach System und Windows-Version.
hIcon := LoadPicture("Mein Symbol.ico", "Icon1 w" Symbolgröße " h" Symbolgröße, Bildtyp)
Gui +LastFound
SendMessage 0x80, 1, hIcon  ; 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 mit benutzerdefinierter Textfarbe im klassischen Design dargestellt.

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

Allgemeine Bemerkungen

GuiControl und GuiControlGet können genutzt werden, um mit einzelnen Steuerelementen in einem GUI-Fenster zu agieren.

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

Jedes Skript, das den GUI-Befehl irgendwo verwendet, ist automatisch persistent (selbst wenn der GUI-Befehl nie ausgeführt wird). Außerdem wird bei solchen Skripten standardmäßig ein Dialogfenster mit der Anfrage angezeigt, ob die alte Instanz beibehalten oder mit einer neuen Instanz ersetzt werden soll, es sei denn, man überschreibt das mit der #SingleInstance-Direktive.

Siehe auch

GuiControl, GuiControlGet, Menu, Steuerelemente, ListView, TreeView, Control, ControlGet, SplashImage, MsgBox, FileSelectFile, FileSelectFolder

Beispiele

Beispiel #1

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 #2

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  ; Das ButtonOK-Label (falls vorhanden) wird ausgeführt, wenn die Schaltfläche 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 #3

Erstellt ein Tab-Steuerelement mit mehreren Tabs, die jeweils verschiedene Steuerelemente enthalten, mit denen Sie interagieren können:

Gui, Add, Tab2,, Erster Tab|Zweiter Tab|Dritter Tab  ; Tab2 statt Tab 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 die Schaltfläche 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 #4

Erstellt eine 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 #5

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 #6

Erstellt eine 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 seinen Aktivzustand verliert.
return

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

Beispiel #7

Ein animierter Fortschrittsbalken 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 #8

Ein 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 not 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 #9

Ein 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, &?, :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 not 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 not 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 not AusgewählterDateiname  ; Keine Datei ausgewählt.
    return
AktuellerDateiname := AusgewählterDateiname
Gosub AktuelleDateiSpeichern
return

AktuelleDateiSpeichern:  ; Der Aufrufer hat sichergestellt, dass AktuellerDateiname nicht leer ist.
if FileExist(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 die Interaktion mit dem 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 die Interaktion mit dem 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