# GUI-Referenz

AutoIt bietet die Möglichkeit, einfache grafische Benutzeroberflächen (Graphical User Interfaces, GUIs) zu erstellen, die aus einem oder mehreren Fenstern und Steuerelementen (controls) bestehen. Die Steuerelemente, die verwendet werden können, sind:

label | Ein einfacher Text.
button | Eine einfache Schaltfläche.
input | Ein einzeiliges Steuerelement, in das man Text eingeben kann.
edit | Ein mehrzeiliges Steuerelement, in das man Text eingeben kann
checkbox | Ein Kästchen, das angekreuzt ("checked") oder nicht angekreuzt sein kann.
radio | Ein rundes Feld, das markiert oder unmarkiert sein kann (Optionsfeld).
combo | Eine Liste mit einer ausklappbaren Auswahl.
list | Eine Liste.
date | Ein Datumsauswahl-Element.
pic | Ein Bild.
icon | Ein Icon.
progress | Ein Fortschrittsbalken.
tab | Eine Gruppe von Controls, die auf Registerkarten platziert sind.
updown | Pfeiltasten, die zu Textfeldern hinzugefügt werden können, um den Wert bequem zu vergrößern oder verkleinern.
avi | Zeige einen Videoclip im AVI-Format an.
menu | Ein Menü an der oberen Kante des Fensters.
contextmenu | Ein Menü, das erscheint, wenn man innerhalb des Fensters die rechte Maustaste betätigt.
treeview | Eine Strukturansicht, die der Baumdarstellung im Windows Explorer ähnelt.

Hier ein Beispiel eines einzigen GUI-Fensters, das viele der verfügbaren Controls enthält.

## GUI-Konzepte

Wie oben erwähnt, besteht eine GUI aus einem Fenster und Controls. GUIs sind "ereignisbasiert", d.h., sie reagieren auf Ereignisse - z.B. auf den Klick auf einen Button. Die meiste Zeit verbringt man damit, auf Ereignisse zu warten - anders als in normalen Skripten, in denen du selbst kontrollierst, was passiert und wann es passiert. Stelle es dir vor, wie wenn man an der Türe auf den Briefträger wartet - du sitzt da, bis ein Brief in den Briefkasten geworfen wird, holst ihn heraus und entscheidest dann, was du damit machen willst. Genau so funktioniert eine GUI prinzipiell - du wartest darauf, dass der Briefträger zu dir kommt.

## GUI Grundfunktionen

Das sind die wichtigsten Funktionen, die du zum Erstellen einer GUI brauchst. Es sind allerdings nur die grundlegenden Funktionenen, es gibt viel mehr wenn du so weit bist, richtig fortgeschrittene GUIs zu schreiben.

Funktion | Erklärung
GUICreate | Erzeuge ein Fenster.
GUICtrlCreate... | Erstelle ein Control in einem Fenster.
GUISetState | Zeige das Fenster an oder verstecke es.
GUIGetMsg | Frage die GUI ab um zu sehen, ob ein Ereignis aufgetreten ist.
GUIRead | Lese den Status oder Daten eines Controls.

Bevor du überhaupt GUI-Skripte schreiben kannst, musst du die Datei GUIConstants.au3 am Beginn deines Skriptes einbinden. Diese Dateien beinhalten alle Variablen und Konstanten, die zum Schreiben von GUIs benötigt werden.

Zuerst erzeugen wir ein Fenster, nennen es "Hallo Welt" und machen es 200 mal 100 Pixel groß. Wenn ein neues Fenster angelegt wird, ist es versteckt - deshalb müssen wir es anzeigen ("show").

#include <GUIConstants.au3>
GUICreate("Hallo Welt", 200, 100)
GUISetState(@SW_SHOW)
Sleep(2000)

Wenn du das Skript ausführst wirst du sehen, dass sich ein Fenster öffnet und nach 2 Sekunden wieder schließt. Nicht besonders interessant...fügen wir Text und einen OK-Button hinzu. Der Text wird an Position 30, 10 eingefügt, der Button an Position 70, 50 und die Breite des Buttons wird auf 60 Pixel gesetzt.

#include <GUIConstants.au3>
GUICreate("Hallo Welt", 200, 100)
GUICtrlCreateLabel("Hallo Welt! Wie geht's?", 30, 10)
GUICtrlCreateButton("OK", 70, 50, 60)
GUISetState(@SW_SHOW)
Sleep(2000)

Das ist recht gut, aber wie bringen wir es dazu, auf unser Klicken auf den Button zu reagieren? Jetzt müssen wir darauf warten, dass die GUI uns eine Nachricht schickt (der Button wird angeklickt) und dann darauf reagieren (eine MsgBox anzeigen und dann schließen).Dieses Warten wird message loop (Nachrichtenschleife) genannt - du drehst Schleifen und wartest auf Nachrichten, an denen du interessiert bist.

#include <GUIConstants.au3>
GUICreate("Hallo Welt", 200, 100)
GUICtrlCreateLabel("Hallo Welt! Wie geht's?", 30, 10)
$ok = GUICtrlCreateButton("OK", 70, 50, 60)
GUISetState(@SW_SHOW)
While 1
$msg = GUIGetMsg()
If $msg = $ok Then
MsgBox(0, "GUI Ereignis", "Du hast auf OK geklickt!")
ExitLoop
EndIf
Wend

So einfach ist das. Offensichtlich wird es umso komplizierter, je mehr Fenster und Steuerelemente du anlegst, aber das Beispiel zeigt dir die Grundlagen.

Eine Nachricht kann aus einer Control-ID bestehen (so wie $ok im Beispiel oben) oder es kann eine Statusänderung sein wie das Schließen oder Minimieren eines Fensters. Diese Nachrichten haben vordefinierte Werte:

$GUI_EVENT_CLOSE
$GUI_EVENT_MINIMIZE
$GUI_EVENT_RESTORE
$GUI_EVENT_MAXIMIZE

Wenn du also wissen willst, ob jemand den Schließen-Button an deinem Fenster angeklickt hat, fügst du das einfach zu deiner Nachrichtenschleife hinzu:

If $msg = $GUI_EVENT_CLOSE Then MsgBox(0, "Event", "Du hast auf Schließen geklickt!")