class Gui extends Object
Bietet eine Schnittstelle zum Erstellen eines Fensters, Hinzufügen von Steuerelementen, Ändern des Fensters und Abrufen von Informationen über das Fenster. Solche Fenster können zur Dateneingabe oder als individuelle Benutzerschnittstellen verwendet werden.
Gui-Objekte können mit Gui() erstellt und mit GuiFromHwnd abgerufen werden.
"MeineGui" wird hier stellvertretend für ein beliebiges Gui-Objekt (und als Variablenname in den Beispielen) verwendet, da "Gui" die Klasse selbst ist.
Zusätzlich zu den von Object geerbten Methoden und Eigenschaften haben Gui-Objekte die folgenden vordefinierten Methoden und Eigenschaften.
Erstellt ein neues Fenster.
MeineGui := Gui(Optionen, Titel, EreignisObj) MeineGui := Gui.Call(Optionen, Titel, EreignisObj)
Typ: Zeichenkette
Jede von Gui.Opt unterstützte Option.
Typ: Zeichenkette
Wenn weggelassen, wird standardmäßig A_ScriptName verwendet. Andernfalls geben Sie den Fenstertitel an.
Typ: Objekt
Ein "Event-Sink" oder Objekt, mit dem Ereignisse verbunden werden sollen. Wenn EreignisObj angegeben ist, können OnEvent, OnNotify und OnCommand verwendet werden, um Methoden für EreignisObj zu registrieren, die beim Auslösen eines Ereignisses aufgerufen werden.
Typ: Objekt
Diese Methode oder Funktion gibt ein Gui-Objekt zurück.
Erstellt ein neues Steuerelement und fügt es dem Fenster hinzu.
GuiCtrl := MeineGui.Add(Steuerelement , Optionen, Text) GuiCtrl := MeineGui.AddSteuerelement(Optionen, Text)
Typ: Zeichenkette
Dies kann folgendes sein: ActiveX, Button, CheckBox, ComboBox, Custom, DateTime, DropDownList (oder DDL), Edit, GroupBox, Hotkey, Link, ListBox, ListView, MonthCal, Picture (oder Pic), Progress, Radio, Slider, StatusBar, Tab, Tab2, Tab3, Text, TreeView, UpDown
Zum Beispiel:
MeineGui := Gui() MeineGui.Add("Text",, "Bitte tragen Sie Ihren Namen ein:") MeineGui.AddEdit("vName") MeineGui.Show
Typ: Zeichenkette
Wenn leer oder weggelassen, wird das Steuerelement mit seinen Standardeinstellungen hinzugefügt. Andernfalls geben Sie die folgenden Optionen und Styles an, die jeweils durch mindestens ein Leer- oder Tabulatorzeichen voneinander getrennt sind.
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:
Rn: Textzeilen (wobei n eine beliebige Zahl ist, sogar eine Floating-Point-Zahl wie 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 (es 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.
Wn: Breite (wobei n eine beliebige Zahl in Pixel ist). Wenn weggelassen, wird die Breite einiger Steuerelemente automatisch anhand ihres Inhalts berechnet; Tabs sind standardmäßig das 30-fache der aktuellen Schriftgröße plus das 3-fache des horizontalen Abstands breit; vertikale ProgressBars standardmäßig das 2-fache der aktuellen Schriftgröße breit; und horizontale ProgressBars, horizontale Sliders, DropDownLists, ComboBoxes, ListBoxes, GroupBoxes, Edits und Hotkeys standardmäßig das 15-fache der aktuellen Schriftgröße breit (außer GroupBoxes, die das 18-fache breit sind, um Platz für Abstände zu schaffen).
Hn: Höhe (wobei n eine beliebige Zahl in Pixel ist). Wenn sowohl H als auch R weggelassen werden, sind DropDownLists, ComboBoxes, ListBoxes und leere mehrzeilige Edits standardmäßig 3 Zeilen hoch; GroupBoxes standardmäßig 2 Zeilen hoch; vertikale Sliders und vertikale ProgressBars standardmäßig 5 Zeilen hoch; horizontale Sliders standardmäßig 30 Pixel hoch (außer wenn eine Dicke angegeben wurde); horizontale ProgressBars standardmäßig das 2-fache der aktuellen Schriftgröße hoch; Hotkeys standardmäßig 1 Zeile hoch; und Tabs standardmäßig 10 Zeilen hoch. Alle anderen Steuerelemente erhalten automatisch eine Höhe, die auf ihrem Inhalt basiert. Beachten Sie bei DropDownLists und ComboBoxes, dass H die kombinierte Höhe des immer sichtbaren Teils und des Listenteils ist (bei einem zu niedrigen Wert wird immer mindestens ein Listeneintrag angezeigt). Außerdem ist es bei allen Arten von Steuerelementen in der Regel besser, die Anzahl der Zeilen mit der R- statt H-Option anzugeben, um zu vermeiden, dass ein Steuerelement unvollständige bzw. nur teilweise sichtbare Textzeilen anzeigt.
WP±n, HP±n (wobei n eine beliebige Zahl in Pixel ist) können verwendet werden, um die Breite und/oder Höhe eines Steuerelements genau auf die Breite oder Höhe des zuvor hinzugefügten Steuerelements zu setzen, die optional um eine beliebige Zahl erhöht oder verringert werden kann. Zum Beispiel würde wp
die Breite eines Steuerelements auf die Breite des vorherigen Steuerelements setzen, und wp-50
auf die Breite des vorherigen Steuerelements, aber um 50 verringert.
Xn, Yn: X-Position, Y-Position (wobei n eine beliebige Zahl ist): 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).
X+n, Y+n (wobei n eine beliebige Zahl in Pixel ist): Es ist möglich, ein optionales Pluszeichen einzufügen, 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
.
Für X+ und Y+ kann der Buchstabe M als Ersatz für den aktuellen Abstand (Margin) des Fensters verwendet werden. 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 relative X-Koordinate allein (mit XP oder X+) standardmäßig yp
impliziert.
XP±n, YP±n (wobei n eine beliebige Zahl ist) können verwendet werden, um Steuerelemente relativ zur linken oberen Ecke des zuvor hinzugefügten Steuerelements zu positionieren, was oft nützlich ist, um Steuerelemente mit einer GroupBox zu umschließen.
XM±n, YM±n (wobei n eine beliebige Zahl in Pixel ist) können verwendet 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 folgen).
XS±n und YS±n (wobei n eine beliebige Zahl in Pixel ist): Diese haben einen ähnlichen Effekt wie XM und YM, beziehen sich aber 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). Zum Beispiel:
MeineGui := Gui() MeineGui.Add("Edit", "w600") ; Ein relativ breites Eingabefeld ganz oben im Fenster hinzufügen. MeineGui.Add("Text", "Section", "Vorname:") ; Position dieses Steuerelements speichern und eine neue Sektion beginnen. MeineGui.Add("Text",, "Nachname:") MeineGui.Add("Edit", "ys") ; Eine neue Spalte innerhalb dieser Sektion beginnen. MeineGui.Add("Edit") MeineGui.Show
Nach XS und YS kann optional ein Plus-/Minuszeichen und eine Zahl folgen. Außerdem ist es möglich, sowohl das Wort Section als auch XS/YS in den Optionen eines Steuerelements anzugeben, um zu bewirken, dass das Steuerelement die alte Sektion verwendet, aber eine neue Sektion für nachfolgende Steuerelemente etabliert.
Wenn X und/oder Y weggelassen werden, passt sich ein GUI-Layout automatisch an künftige Änderungen bzgl. der Größe von Steuerelementen oder der Schrift an. Wenn Sie hingegen für jedes Steuerelement eine absolute Position angeben, müssen Sie möglicherweise die Position aller Steuerelemente unterhalb und/oder auf der rechten Seite des Steuerelements, dessen Größe geändert wurde, manuell verschieben.
Wenn sowohl X als auch Y weggelassen werden, wird das Steuerelement unterhalb des zuvor hinzugefügten Steuerelements positioniert, wobei der Standardabstand verwendet wird. Aufeinanderfolgende Text- oder Link-Steuerelemente werden mit zusätzlichen vertikalen Abständen versehen, damit sie besser ausgerichtet sind, wenn danach eine rechts befindliche Spalte mit Steuerelementen wie Edit, DDL usw. hinzugefügt wird. Um nur den vertikalen Standardabstand zu verwenden, geben Sie y+m
oder einen beliebigen Wert für X an.
Wenn nur eine Komponente weggelassen wird, hängt ihr Standardwert davon ab, mit welcher Option die andere Komponente angegeben wurde:
X angegeben | Standard für Y |
---|---|
Xn oder XM | Unterhalb aller vorherigen Steuerelemente (maximale Y-Ausdehnung plus Margin). |
XS | Unterhalb aller vorherigen Steuerelemente seit der letzten Verwendung der Section-Option. |
X+n oder XP+ungleich 0 | Dasselbe wie der obere Rand des vorherigen Steuerelements (YP). |
XP oder XP+0 | Unterhalb des vorherigen Steuerelements (unterer Rand plus Margin). |
Y angegeben | Standard für X |
Yn oder YM | Rechts von allen vorherigen Steuerelementen (maximale X-Ausdehnung plus Margin). |
YS | Rechts von allen vorherigen Steuerelementen seit der letzten Verwendung der Section-Option. |
Y+n oder YP+ungleich 0 | Dasselbe wie der linke Rand des vorherigen Steuerelements (XP). |
YP oder YP+0 | Rechts vom vorherigen Steuerelement (rechter Rand plus Margin). |
Benutzereingaben speichern und verarbeiten
V: Setzt den Namen des Steuerelements. Geben Sie direkt nach dem Buchstaben V den Namen an; das V selbst ist nicht im Namen enthalten. Wenn Sie z.B. vMeinEdit
angeben, hat das Steuerelement den Namen "MeinEdit".
Ereignisse: Ereignishandler (z.B. eine Funktion, die automatisch aufgerufen wird, wenn der Benutzer ein Steuerelement anklickt oder ändert) können nicht in den Optionen des Steuerelements angegeben werden. Stattdessen kann OnEvent verwendet werden, um eine Rückruffunktion oder -methode für das gewünschte Ereignis zu registrieren.
Häufig verwendete Optionen und Styles für Steuerelemente
Hinweis: Vorzeichenlose Optionen werden standardmäßig hinzugefügt. Zum Beispiel ist Wrap
dasselbe wie +Wrap
. Mit -Wrap
kann es hingegen wieder entfernt werden.
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.
C: Textfarbe (funktioniert nicht bei Schaltflächen und Statusleisten). Geben Sie den Buchstaben C an, unmittelbar gefolgt von einem Farbnamen (siehe Farbentabelle) oder RGB-Wert (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 die Interaktion mit diesem Steuerelement später wieder zu erlauben, verwenden Sie GuiCtrl.Enabled. Hinweis: Um ein Edit-Steuerelement stattdessen in den schreibgeschützten Zustand zu versetzen, fügen Sie ReadOnly
in dessen Optionen ein. Direkt nach dem Wort Disabled kann optional eine 0 oder 1 angegeben werden, um den Startzustand zu bestimmen (0 für aktiviert, 1 für deaktiviert). Mit anderen Worten, Disabled
ist dasselbe wie "Disabled" VarMitEins
.
Hidden: Versteckt zunächst das Steuerelement. Mit GuiCtrl.Visible kann es später wieder sichtbar gemacht werden. Direkt nach dem Wort Hidden kann optional eine 0 oder 1 angegeben werden, um den Startzustand zu bestimmen (0 für sichtbar, 1 für versteckt). Mit anderen Worten, Hidden
ist dasselbe wie "Hidden" VarMitEins
.
Left: Macht den Text linksbündig innerhalb der verfügbaren Breite des Steuerelements. Diese Option beeinflusst die folgenden Steuerelemente: Text, Edit, Button, CheckBox, Radio, UpDown, Slider, Tab, Tab2, GroupBox, DateTime.
Right: Macht den Text rechtsbündig innerhalb der verfügbaren Breite des Steuerelements. Bei CheckBox- und Radio-Steuerelementen bewirkt diese Option außerdem, dass das Auswahlfeld auf der rechten statt linken Seite des Steuerelements positioniert wird. Diese Option beeinflusst die folgenden Steuerelemente: Text, Edit, Button, CheckBox, Radio, UpDown, Slider, Tab, Tab2, GroupBox, DateTime, Link.
Center: Zentriert den Text des Steuerelements horizontal. Diese Option beeinflusst die folgenden Steuerelemente: 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
(minus Tabstop) für ein eingabefähiges Steuerelement an, das übersprungen werden soll, wenn der Benutzer Tab zum Navigieren drückt.
Wrap: Aktiviert den automatischen Zeilenumbruch im Text des Steuerelements. Da der automatische Zeilenumbruch standardmäßig bei fast allen Arten von Steuerelementen aktiv ist, wird in der Regel -Wrap
verwendet, um diese Option zu deaktivieren.
VScroll: Stattet das Steuerelement mit einem vertikalen Scrollbalken aus, sofern möglich.
HScroll: Stattet das Steuerelement mit einem horizontalen Scrollbalken aus, sofern möglich. Der Rest dieses Absatzes gilt nur für die ListBox. Die horizontale Scrollbreite ist standardmäßig die 3-fache Breite der Listbox. Um eine andere Scrollbreite zu bestimmen, geben Sie direkt nach dem Wort HScroll eine Zahl an. Zum Beispiel ermöglicht HScroll500
einen scrollbaren Bereich von 500 Pixeln innerhalb der ListBox. Wenn die angegebene Scrollbreite allerdings kleiner als die Breite der ListBox ist, wird kein Scrollbalken angezeigt (obwohl das bloße Vorhandensein von HScroll
es überhaupt erst möglich macht, den horizontalen Scrollbalken später via MeinScrollbalken.Opt("+HScroll500")
hinzuzufügen).
Selten verwendete Optionen und Styles für Steuerelemente
BackgroundTrans: Verwendet einen transparenten Hintergrund, der jedes Steuerelement, das sich hinter einem Text-, Picture- oder GroupBox-Steuerelement befindet, durchscheinen lässt. Zum Beispiel würde ein transparentes Text-Steuerelement, das über einem Picture-Steuerelement angezeigt wird, die Illusion erzeugen, als gehöre der Text zum Bild. Mit GuiCtrl.Opt("+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: Es ist möglich, dass BackgroundTrans nicht ordnungsgemäß mit Steuerelementen innerhalb eines Tab-Steuerelements funktioniert, das eine ListView enthält. Wenn ein Steuerelement diese Option nicht unterstützt, wird ein Fehler ausgelöst.
BackgroundFarbe: Ändert die Hintergrundfarbe des Steuerelements. Geben Sie für Farbe einen Farbnamen (siehe Farbentabelle) oder RGB-Wert (mit oder ohne 0x-Präfix) an. Beispiele: BackgroundSilver
, BackgroundFFDD99
. Wenn diese Option nicht verwendet wird, oder wenn +Background
ohne Suffix verwendet wird, verwendet ein Text-, Picture-, GroupBox-, CheckBox-, Radio-, Slider-, Tab- oder Link-Steuerelement zu Beginn die via Gui.BackColor definierte Hintergrundfarbe (wenn keine definiert ist oder handelt es sich um ein anderes Steuerelement, wird die Standardhintergrundfarbe des Systems verwendet). Mit BackgroundDefault
oder -Background
kann die Standardhintergrundfarbe des Systems erzwungen werden. Zum Beispiel kann die Standardfarbe eines Steuerelements via LV.Opt("+BackgroundDefault")
wiederhergestellt werden. Wenn ein Steuerelement diese Option nicht unterstützt, wird ein Fehler ausgelöst.
Border: Umrahmt das Steuerelement mit einer dünnen Linie. Die meisten Steuerelemente haben bereits einen typspezifischen Rahmen und benötigen daher diese Option nicht. Wird ein bereits existierendes Steuerelement mit einem Rahmen versehen, kann es notwendig sein, die Breite und Höhe des Steuerelements um 1 Pixel zu vergrößern, um eine korrekte Darstellung zu gewährleisten.
Redraw: Wenn diese Option mit GuiCtrl.Opt verwendet wird, aktiviert oder deaktiviert sie das Neuzeichnen (visuelle Aktualisierungen) für ein Steuerelement durch Senden einer WM_SETREDRAW-Meldung. Weitere Informationen finden Sie unter Neuzeichnung.
Theme: Mit dieser Option kann die aktuelle Design-Einstellung des Fensters für das neue Steuerelement ü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 +/-Theme.
(Namenloser Style): Geben Sie ein Plus- oder Minuszeichen und direkt danach eine dezimale oder hexadezimale Zahl an, um einen Style hinzuzufügen oder zu entfernen. Wenn das Vorzeichen weggelassen wird, 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 Zahl an, um einen erweiterten Style hinzuzufügen oder zu entfernen. Wenn das Vorzeichen weggelassen wird, wird der Style standardmäßig hinzugefügt. Zum Beispiel würde E0x200
den WS_EX_CLIENTEDGE-Style hinzufügen, der Steuerelemente wie z.B. Picture mit einem abgesenkten Rahmen ausstattet. Weitere erweiterte Styles, die nur selten verwendet werden und daher hier nicht aufgeführt sind, finden Sie unter Extended Window Styles | Microsoft Docs.
Typ: Objekt
Diese Methode gibt ein GuiControl-Objekt zurück.
Entfernt das Fenster und alle darin enthaltenen Steuerelemente und gibt die zugehörigen Speicher- und Systemressourcen frei.
MeineGui.Destroy()
Wenn MeineGui.Destroy()
nicht verwendet wird, wird das Fenster automatisch zerstört, sobald das Gui-Objekt gelöscht wird (weitere Informationen finden Sie unter Allgemeine Bemerkungen). Alle GUI-Fenster werden automatisch zerstört, sobald das Skript beendet wird.
Lässt die Taskleistenschaltfläche des Fensters einmal aufblinken.
MeineGui.Flash(Blinken)
Typ: Boolesch
Wenn weggelassen, wird standardmäßig true verwendet.
Wenn true, wird die Taskleistenschaltfläche des Fensters aufblinken. Dazu wird die Farbe der Titelleiste und/oder der Taskleistenschaltfläche (falls vorhanden) invertiert.
Wenn false, werden die Originalfarben der Titelleiste und Taskleistenschaltfläche wiederhergestellt (das tatsächliche Verhalten variiert aber je nach OS-Version).
Das folgende Beispiel lässt das Fenster dreimal aufblinken, da jedes Paar von "Gui Flash" die Farben des Fensters invertiert und wiederherstellt:
Loop 6 { MeineGui.Flash Sleep 500 ; Es reagiert sehr empfindlich auf diesen Wert; Änderungen können zu unerwarteten Ergebnissen führen. }
Ruft die Position und Größe des Clientbereichs des Fensters ab.
MeineGui.GetClientPos(&X, &Y, &Breite, &Höhe)
Typ: VarRef
Wenn weggelassen, werden die entsprechenden Werte nicht gespeichert. Andernfalls geben Sie Referenzen an, die auf Ausgabevariablen verweisen, in denen die X- und Y-Koordinate der oberen linken Ecke des Clientbereichs gespeichert werden sollen.
Typ: VarRef
Wenn weggelassen, werden die entsprechenden Werte nicht gespeichert. Andernfalls geben Sie Referenzen an, die auf Ausgabevariablen verweisen, in denen die Breite und Höhe des Clientbereichs gespeichert werden sollen.
Breite ist der horizontale Abstand zwischen dem linken und rechten Rand des Clientbereichs und Höhe ist der vertikale Abstand zwischen dem oberen und unteren Rand (in Pixel).
Der Clientbereich ist der Teil des Fensters, der Steuerelemente enthalten kann. Das ist der Bereich ohne Titelleiste, Standardmenüleiste und Rahmen. Die Position und Größe des Clientbereichs sind weniger abhängig von Version und Design des Betriebssystems als die Werte, die von Gui.GetPos zurückgegeben werden.
Im Gegensatz zu WinGetClientPos wendet diese Methode die DPI-Skalierung auf Breite und Höhe an (es sei denn, die -DPIScale
-Option wurde verwendet).
Ruft die Position und Größe des Fensters ab.
MeineGui.GetPos(&X, &Y, &Breite, &Höhe)
Typ: VarRef
Wenn weggelassen, werden die entsprechenden Werte nicht gespeichert. Andernfalls geben Sie Referenzen an, die auf Ausgabevariablen verweisen, in denen die X- und Y-Koordinate der oberen linken Ecke des Fensters gespeichert werden sollen, in Bildschirmkoordinaten.
Typ: VarRef
Wenn weggelassen, werden die entsprechenden Werte nicht gespeichert. Andernfalls geben Sie Referenzen an, die auf Ausgabevariablen verweisen, in denen die Breite und Höhe des Fensters gespeichert werden sollen.
Breite ist der horizontale Abstand zwischen dem linken und rechten Rand des Fensters und Höhe ist der vertikale Abstand zwischen dem oberen und unteren Rand des Fensters (in Pixel).
Da die Koordinaten, die von dieser Methode zurückgegeben werden, auch die Titelleiste, die Menüleiste und den Rahmen des Fensters einbeziehen, können sie je nach Version und Design des Betriebssystems variieren. Um konsistentere Werte auf verschiedenen Systemen zu erhalten, sollten Sie stattdessen Gui.GetClientPos verwenden.
Im Gegensatz zu WinGetPos wendet diese Methode die DPI-Skalierung auf Breite und Höhe an (es sei denn, die -DPIScale
-Option wurde verwendet).
Versteckt das Fenster.
MeineGui.Hide()
Macht das Fenster sichtbar (falls nötig) und maximiert es.
MeineGui.Maximize()
Macht das Fenster sichtbar (falls nötig) und minimiert es.
MeineGui.Minimize()
Verschiebt das Fenster und/oder ändert dessen Größe.
MeineGui.Move(X, Y, Breite, Höhe)
Typ: Integer
Wenn einer der Parameter weggelassen wird, bleibt die Position in dieser Dimension unverändert. Andernfalls geben Sie die X- und Y-Koordinate der oberen linken Ecke der neuen Position des Fensters an, in Bildschirmkoordinaten.
Typ: Integer
Wenn einer der Parameter weggelassen wird, bleibt die Größe in dieser Dimension unverändert. Andernfalls geben Sie die neue Breite und Höhe des Fensters (in Pixel) an.
Im Gegensatz zu WinMove wendet diese Methode die DPI-Skalierung auf Breite und Höhe an (es sei denn, die -DPIScale
-Option wurde verwendet).
MeineGui.Move(10, 20, 200, 100) MeineGui.Move(VarX+10, VarY+5, VarW*2, VarH*1.5) ; Linke und rechte Seite um 10 Pixel erweitern. MeineGui.GetPos(&x,, &w) MeineGui.Move(x-10,, w+20)
Registriert eine Funktion oder Methode, die aufgerufen wird, wenn ein bestimmtes Ereignis ausgelöst wird.
MeineGui.OnEvent(EreignisName, Rückruf , HinzufügenEntfernen)
Weitere Informationen finden Sie unter OnEvent.
Setzt verschiedene Optionen und Styles für das Aussehen und Verhalten des Fensters.
MeineGui.Opt(Optionen)
Typ: Zeichenkette
Beliebig viele der folgenden Optionen und Styles, die jeweils durch mindestens ein Leer- oder Tabulatorzeichen voneinander getrennt sind.
Aus Performanzgründen ist es besser, alle Optionen auf einer Zeile zu setzen, bevor das Fenster erstellt wird (also bevor andere Methoden wie z.B. Gui.Add verwendet werden).
Der Effekt des Parameters ist kumulativ (summierend), d.h. dieser Parameter ändert nur die explizit angegebenen Optionen, alle anderen bleiben unverändert.
Geben Sie ein Pluszeichen an, um die Option hinzuzufügen, oder ein Minuszeichen, um sie zu entfernen. Zum Beispiel: MeineGui.Opt("+Resize -MaximizeBox")
.
AlwaysOnTop: Gibt dem Fenster die Eigenschaft, immer im Vordergrund zu sein, also immer vor allen anderen Fenstern sichtbar zu sein, was den gleichen Effekt hat wie WinSetAlwaysOnTop.
Border: Stattet das Fenster mit einem dünnen Rahmen aus. Diese Option wird selten verwendet.
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 eine Farbe mit WinSetTransColor transparent gemacht wurde.
Disabled: Deaktiviert das Fenster, um den Benutzer daran zu hindern, mit den darin enthaltenen Steuerelementen zu interagieren. Diese Option wird oft auf ein Fenster mit Unterfenstern angewendet (siehe Owner).
DPIScale: Verwenden Sie MeineGui.Opt("-DPIScale")
, um die standardmäßig aktive DPI-Skalierung zu deaktivieren. Wenn die DPI-Skalierung aktiviert ist, werden Koordinaten und Größen, die an die Gui- und GuiControl-Methoden/Eigenschaften übergeben oder von diesen abgerufen werden, automatisch gemäß dem Bildschirm-DPI-Wert skaliert. Bei einem DPI-Wert von z.B. 144 (150 %) würde MeineGui.Show("w100")
die GUI 150 (100 * 1.5) Pixel breit machen, während eine Änderung der Fensterbreite auf 200 Pixel via Maus oder WinMove dazu führen würde, dass MeineGui.GetClientPos(,,&W)
W auf 133 (200 // 1.5) setzt. A_ScreenDPI enthält den aktuellen DPI-Wert des Systems.
Die DPI-Skalierung betrifft nur Gui- und GuiControl-Methoden/Eigenschaften, d.h. Koordinaten aus anderen Quellen wie ControlGetPos oder WinGetPos werden nicht funktionieren. Es gibt eine Reihe von Möglichkeiten, damit umzugehen:
MeineGui.Opt("+DPIScale")
) und ausgeschaltet (MeineGui.Opt("-DPIScale")
) werden. Die Änderung der Einstellung hat keinen Einfluss auf bereits definierte Positionen oder Größen.x*(A_ScreenDPI/96)
logische Koordinaten bzw. GUI-Koordinaten (in diesem Fall x) in physische Koordinaten bzw. Nicht-GUI-Koordinaten um.LastFound: Macht das Fenster zum zuletzt gefundenen Fenster (geschieht automatisch in einem GUI-Thread), damit Funktionen wie WinGetStyle und WinSetTransparent mit diesem Fenster arbeiten können, sogar wenn es versteckt ist (d.h. DetectHiddenWindows ist nicht notwendig). Diese Option ist besonders nützlich, um die Eigenschaften des Fensters vor dem Anzeigen zu ändern. Zum Beispiel:
MeineGui.Opt("+LastFound") WinSetTransColor(BeliebigeFarbe " 150") MeineGui.Show()
MaximizeBox: Aktiviert die Titelleistenschaltfläche zum Maximieren des Fensters. Diese Option ist in Resize inbegriffen.
MinimizeBox (standardmäßig vorhanden): Aktiviert die Titelleistenschaltfläche zum Minimieren des Fensters.
MinSize und MaxSize: Bestimmt die minimale und/oder maximale Fenstergröße, z.B. wenn der Benutzer an den Rändern des Fensters zieht, um es kleiner/größer zu machen. Geben Sie +MinSize
und/oder +MaxSize
an (also ohne Suffix), um die aktuelle Fenstergröße als Grenzwert zu verwenden (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, z.B. MeineGui.Opt("+Resize +MinSize640x480")
. Diese Dimensionen (in Pixel) spezifizieren die Größe des Clientbereichs des Fensters (das ist der Bereich ohne Rahmen, Titelleiste und Menüleiste). Geben Sie jede Zahl als Dezimalzahl an, nicht als Hexadezimalzahl.
Eine der Dimensionen kann weggelassen werden, um sie unverändert zu lassen (z.B. +MinSize640x
oder +MinSizex480
). Außerdem kann Min/MaxSize mehrfach angegeben werden, um für eine Dimension die aktuelle Fenstergröße und für die andere eine explizite Größe zu verwenden. Zum Beispiel würde +MinSize +MinSize640x
die aktuelle Fenstergröße für die Höhe und 640 Pixel für die Breite verwenden.
Wenn MinSize und MaxSize nie verwendet werden, werden die Standardwerte des Betriebssystems verwendet. Mit MeineGui.Opt("-MinSize -MaxSize")
können die Standardwerte wiederhergestellt werden. Hinweis: Das Fenster muss +Resize haben, damit der Benutzer es kleiner/größer machen kann.
OwnDialogs: MeineGui.Opt("+OwnDialogs")
bewirkt, dass alle nachfolgenden MsgBox-, InputBox-, FileSelect- oder DirSelect-Dialogfenster im aktuellen Thread (z.B. eine ereignisbehandelnde Funktion eines Button-Steuerelements) dem aktuellen Fenster untergeordnet werden. Solche Dialogfenster sind modal, d.h. der Benutzer kann erst mit dem GUI-Fenster interagieren, wenn er das Dialogfenster schließt. ToolTip-Fenster können hingegen nicht modal gemacht werden, selbst wenn sie einem Fenster untergeordnet werden; diese werden immer über ihrem übergeordneten Fenster angezeigt. Untergeordnete Dialogfenster werden automatisch zerstört, sobald ihr übergeordnetes Fenster zerstört wird.
Normalerweise ist es nicht notwendig, diese Einstellung wieder auszuschalten, da sie keinen Einfluss auf andere Threads hat. Wenn ein Thread jedoch sowohl untergeordnete als auch nicht-untergeordnete Dialogfenster anzeigen muss, verwenden Sie MeineGui.Opt("-OwnDialogs")
, um diese Einstellung auszuschalten.
Owner: Mit +Owner
kann das Fenster einem anderen Fenster untergeordnet werden. Untergeordnete Fenster haben standardmäßig keine eigene Taskleistenschaltfläche und werden, sofern sichtbar, immer über ihrem übergeordneten Fenster angezeigt. Außerdem werden sie automatisch zerstört, sobald ihr übergeordnetes Fenster zerstört wird, sofern dieses Fenster von demselben Skript erstellt wurde (also dieselbe Prozess-ID hat). Owner
kann vor oder nach der Erstellung des übergeordneten Fensters verwendet werden. Es gibt zwei Möglichkeiten, wie +Owner
verwendet werden kann:
MeineGui.Opt("+Owner" AndereGui.Hwnd) ; Die GUI zum Unterfenster von AndereGui machen. MeineGui.Opt("+Owner") ; Die GUI zum Unterfenster des Hauptfensters des Skripts machen, um eine Taskleistenschaltfläche zu verhindern.
Direkt nach +Owner
kann die HWND-Nummer (eindeutige ID) eines beliebigen Top-Level-Fensters angegeben werden.
Mit MeineGui.Opt("+Disabled")
kann die Interaktion mit dem übergeordneten Fenster verboten werden, während eines seiner untergeordneten Fenster angezeigt wird. Später (also wenn der Zeitpunkt gekommen ist, das untergeordnete Fenster via Cancel/Destroy zu schließen) kann die Interaktion mit dem übergeordneten Fenster via MeineGui.Opt("-Disabled")
wieder erlaubt werden. Machen Sie das vor dem Cancel/Destroy, damit das übergeordnete Fenster automatisch reaktiviert wird.
Parent: Geben Sie +Parent
und direkt danach die HWND-Nummer (eindeutige ID) eines Fensters oder Steuerelements an, die/das diesem Fenster übergeordnet werden soll. Mit -Parent
kann die GUI wieder in ein Top-Level-Fenster umgewandelt werden. Diese Option kann auch nach der Erstellung des Fensters verwendet werden. Bekannte Einschränkungen:
+Parent
-Option nicht mit einem existierenden Fenster, wenn das neue übergeordnete Fenster immer im Vordergrund ist und das untergeordnete Fenster nicht.+Parent
-Option kann während der GUI-Erstellung fehlschlagen, wenn das übergeordnete Fenster extern ist, aber nach der GUI-Erstellung funktionieren. Dies liegt an den Unterschieden bei der Zuweisung der Styles.Resize: Ermöglicht das Ändern der Fenstergröße und aktiviert 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 ebenfalls entfernt.
Theme: Geben Sie -Theme
an, um alle danach erstellten Steuerelemente im klassischen Design darzustellen. Mit +Theme
kann das neue Design wieder eingeschaltet werden. Hinweis: Diese Option funktioniert nicht, wenn das klassische Design aktiv ist. Um diese Option nur für ein bestimmtes Steuerelement zu ändern, fügen Sie +Theme
oder -Theme
in dessen Optionen ein, während es erstellt wird.
ToolWindow: Stattet das Fenster mit einer kleineren Titelleiste aus und versteckt dessen Taskleistenschaltfläche. Diese Option versteckt immer die Schaltflächen zum Maximieren und Minimieren des Fensters, egal ob die Styles WS_MAXIMIZEBOX und WS_MINIMIZEBOX vorhanden sind.
(Namenloser Style): Geben Sie ein Plus- oder Minuszeichen und direkt danach eine dezimale oder hexadezimale Zahl 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 Zahl an, um einen erweiterten Style hinzuzufügen oder zu entfernen. Zum Beispiel würde +E0x40000
den WS_EX_APPWINDOW-Style hinzufügen, der eine Taskleistenschaltfläche für ein Fenster bereitstellt, das sonst keine hätte. Weitere erweiterte Styles, die nur selten verwendet werden und daher hier nicht aufgeführt sind, finden Sie unter Extended Window Styles | Microsoft Docs.
Macht das Fenster sichtbar (falls nötig) und entminimiert oder entmaximiert es.
MeineGui.Restore()
Bestimmt Schriftart, Schriftgröße, Schriftstil und/oder Schriftfarbe für danach erstellte Steuerelemente.
MeineGui.SetFont(Optionen, SchriftName)
Typ: Zeichenkette
Beliebig viele Optionen. Jede Option ist entweder ein einzelner Buchstabe gefolgt von einem Wert oder ein einzelnes Wort. Mehrere Optionen müssen mit einem Leerzeichen voneinander getrennt werden. Zum Beispiel: cBlue s12 bold
.
Die folgenden Wörter werden 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 unverändert). Es ist möglich, Norm zu verwenden, um alle Attribute auszuschalten und dann selektiv andere einzuschalten. Zum Beispiel bewirkt norm italic
, dass die Schrift normalisiert und anschließend kursiv gemacht wird.
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- und StatusBar-Steuerelemente können nicht mit einer benutzerdefinierten Farbe versehen werden. Alternativ kann auch die C-Option verwendet werden, um die Schriftfarbe für einzelne Steuerelemente bei ihrer Erstellung zu bestimmen. Zum Beispiel: MeineGui.Add("Text", "cRed", "Mein Text")
.
S: Größe (in Punkten). Zum Beispiel: s12
(Dezimalzahl, nicht Hexadezimalzahl).
W: Breite (Dicke). Eine Zahl zwischen 1 und 1000 (400 ist normal und 700 ist fett). Zum Beispiel: w600
(Dezimalzahl, nicht Hexadezimalzahl).
Q: Textdarstellungsqualität. Zum Beispiel: q3
. Nach Q muss eine Nummer aus der folgenden Tabelle angegeben werden:
Nummer | Windows-Konstante | Beschreibung |
---|---|---|
0 | DEFAULT_QUALITY | Die Darstellung der Schrift spielt keine Rolle. |
1 | DRAFT_QUALITY | Die exakte Übereinstimmung mit logischen Schriftattributen (fett, kursiv usw.) 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 usw.). |
3 | NONANTIALIASED_QUALITY | Die Schrift wird nie antialiasiert (geglättet). |
4 | ANTIALIASED_QUALITY | Die Schrift wird antialiasiert (geglättet), wenn die Schrift dies unterstützt und nicht zu klein oder zu groß ist. |
5 | CLEARTYPE_QUALITY | Die Schrift wird (wenn möglich) mit der ClearType-Antialiasing-Methode gerendert. |
Weitere Informationen zur Bedeutung dieser Werte finden Sie unter Microsoft Docs: CreateFont.
Standardmäßig wird die höchste Qualitätseinstellung verwendet. Daher wird dieses Feature eher dazu verwendet, die Kantenglättung auszuschalten, um den Text in bestimmten Fällen besser lesbar zu machen.
Typ: Zeichenkette
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 Standard-GUI-Schriftart des Systems 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:
MeineGui.SetFont(, "MS Sans Serif") MeineGui.SetFont(, "Arial") MeineGui.SetFont(, "Verdana") ; Bevorzugte Schrift.
Die beiden Parameter können weggelassen werden, um die Standard-GUI-Schriftart des Systems, inklusive Größe und Farbe, wiederherzustellen. Andernfalls werden alle nicht angegebenen Schriftattribute von der vorherigen Schrift übernommen.
Das Betriebssystem stellt außerdem Standarddialogfenster bereit, die der Benutzer zum Auswählen einer Schriftart, einer Farbe oder eines Symbols verwenden kann. Solche Dialogfenster können via DllCall in Kombination mit comdlg32\ChooseFont, comdlg32\ChooseColor bzw. shell32\PickIconDlg angezeigt werden. Suchen Sie im Forum nach Beispielen.
Standardmäßig bewirkt dies, dass das Fenster sichtbar gemacht, entminimiert (falls nötig) und aktiviert wird.
MeineGui.Show(Optionen)
Typ: Zeichenkette
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 Fenstergröße automatisch an die Größe und Position aller darin enthaltenen Steuerelemente angepasst.
Für Optionen können beliebig viele der folgenden Zeichenketten angegeben werden (jede Zahl muss dezimal sein, nicht hexadezimal):
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 (in Pixel) des Clientbereichs an.
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: MeineGui.Show("xCenter y0")
.
yCenter: Zentriert das Fenster vertikal auf dem Bildschirm.
AutoSize: Passt die Fenstergröße automatisch an die Größe und Position aller sichtbaren Steuerelemente im Fenster an. Diese Option ist besonders nützlich, wenn neue Steuerelemente hinzugefügt werden, oder wenn bereits vorhandene Steuerelemente größer/kleiner, sichtbar oder unsichtbar gemacht werden. Zum Beispiel: MeineGui.Show("AutoSize Center")
.
Zusätzlich kann eine der folgenden Angaben gemacht werden:
Minimize: Minimiert das Fenster und aktiviert das darunter liegende Fenster.
Maximize: Maximiert und aktiviert das Fenster.
Restore: Entminimiert oder entmaximiert das Fenster, falls nötig. Zusätzlich wird das Fenster sichtbar gemacht und aktiviert, falls nötig.
NoActivate: Entminimiert oder entmaximiert das Fenster, falls nötig. Zusätzlich wird das Fenster sichtbar gemacht, ohne es zu aktivieren.
NA: Macht das Fenster sichtbar, ohne es zu aktivieren. Wenn das Fenster minimiert ist, bleibt es minimiert, kann aber in der Z-Rangfolge aufsteigen (die aktuelle Rangfolge kann im Alt-Tab-Fenster eingesehen 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 darunter liegende Fenster. Funktionsgemäß ist diese Option identisch mit Gui.Hide, ermöglicht es aber, ein verstecktes Fenster zu verschieben oder größer/kleiner zu machen, ohne es sichtbar zu machen. Zum Beispiel: MeineGui.Show("Hide x55 y66 w300 h200")
.
Sammelt die Werte von benannten Steuerelementen und bildet daraus ein Object. Kann optional das Fenster verstecken.
BenannteStrlmnteWerte := MeineGui.Submit(Verstecken)
Typ: Boolesch
Wenn weggelassen, wird standardmäßig true verwendet.
Wenn true, wird das Fenster versteckt.
Wenn false, wird das Fenster nicht versteckt.
Typ: Objekt
Diese Methode gibt ein Objekt zurück, das für jedes benannte Steuerelement eine eigene Eigenschaft hat, gemäß BenannteStrlmnteWerte.%GuiCtrl.Name% := GuiCtrl.Value
, mit den unten genannten Ausnahmen. Es sind nur Steuerelemente enthalten, die eingabefähig sind, GuiCtrl.Value unterstützen und einen Namen haben. Mit BenannteStrlmnteWerte.StrlmntName
kann ein einzelner Wert abgerufen werden. Mit OwnProps können alle benannten Steuerelemente enumeriert werden.
Bei DropDownList, ComboBox, ListBox und Tab wird nicht die Positionsnummer, sondern der Text des ausgewählten Listeneintrags/Tabs gespeichert, wenn dem Steuerelement die AltSubmit-Option fehlt oder wenn der Text der ComboBox nicht mit einem Listeneintrag übereinstimmt. Andernfalls wird Value (die Positionsnummer des Elements) gespeichert.
Wenn nur einem Radio-Steuerelement in einer Radio-Gruppe einen Namen zugeordnet wurde, speichert Submit die Nummer des aktuell eingeschalteten Steuerelements, nicht Value. 1 ist das erste Radio-Steuerelement (entsprechend der ursprünglichen Erstellungsreihenfolge), 2 das zweite und so weiter. Wenn kein Radio-Steuerelement eingeschaltet ist, wird 0 gesetzt.
Folgende sind ausgeschlossen, da sie nicht eingabefähig sind: Text, Pic, GroupBox, Button, Progress, Link, StatusBar.
Ebenfalls ausgeschlossen: ListView, TreeView, ActiveX, Custom.
Enumeriert die Steuerelemente des Fensters.
For Strlmnt in MeineGui
For Hwnd, Strlmnt in MeineGui
Gibt einen neuen Enumerator zurück. Diese Methode wird typischerweise nicht direkt aufgerufen. Stattdessen wird das Gui-Objekt direkt an eine For-Schleife übergeben, die __Enum einmal aufruft und dann den Enumerator pro Schleifenwiederholung einmal aufruft. Jeder Aufruf des Enumerators gibt das nächste Steuerelement zurück. Die Variablen der For-Schleife entsprechen den folgenden Parametern des Enumerators:
Typ: Integer
Die HWND-Nummer des Steuerelements. Dies ist nur im 2-Parameter-Modus verfügbar.
Typ: Objekt
Das GuiControl-Objekt des Steuerelements.
Zum Beispiel:
For Hwnd, GuiCtrlObj in MeineGui MsgBox "Steuerelement Nr. " A_Index " ist " GuiCtrlObj.ClassNN
Konstruiert eine neue Gui-Instanz.
MeineGui.__New(Optionen, Titel, EreignisObj)
Eine Gui-Unterklasse kann __New überschreiben und super.__New(Optionen, Titel, this)
aufrufen, um ihre eigenen Ereignisse zu behandeln. In diesem Fall werden Ereignisse für das Hauptfenster (z.B. Close) keinen expliziten Gui-Parameter übergeben, da this
bereits eine Referenz enthält, die auf die Gui verweist.
Die Gui merkt sich eine Referenz zu EreignisObj für den Aufruf von Ereignishandlern und gibt sie wieder frei, wenn das Fenster zerstört wird. Wenn EreignisObj selbst eine Referenz zur Gui enthält, würde dies normalerweise einen Zirkelbezug erzeugen, der verhindert, dass die Gui automatisch zerstört wird. Eine Ausnahme wird gemacht, wenn EreignisObj die Gui selbst ist, um in diesem Fall einen Zirkelbezug zu vermeiden.
Es wird eine Ausnahme ausgelöst, wenn das Fenster bereits konstruiert oder zerstört wurde.
Ermittelt oder setzt die Hintergrundfarbe des Fensters.
AktuelleFarbe := MeineGui.BackColor
MeineGui.BackColor := NeueFarbe
AktuelleFarbe ist ein 6-stelliger RGB-Wert der aktuellen Farbe, die zuvor mit dieser Eigenschaft gesetzt wurde, oder eine leere Zeichenkette, wenn die Standardfarbe verwendet wird.
NeueFarbe ist entweder einer der 16 primären HTML-Farbnamen, ein hexadezimaler RGB-Farbwert (mit oder ohne 0x-Präfix), ein rein numerischer RGB-Farbwert, oder das Wort Default (oder eine leere Zeichenkette) für dessen Standardfarbe. Beispielwerte: "Silver"
, "FFFFAA"
, 0xFFFFAA
, "Default"
, ""
.
Ein Fenster verwendet als Hintergrundfarbe standardmäßig die Standardschaltflächenfarbe des Systems.
Die Farbe der Menüleiste und aller darin enthaltenen Untermenüs kann wie folgt geändert werden: MeineMenüleiste.SetColor "White"
.
Mit WinSetTransColor kann der Hintergrund transparent gemacht werden. Wenn Sie dies jedoch tun, ohne zuvor eine benutzerdefinierte Fensterfarbe via Gui.BackColor zugewiesen zu haben, werden Button-Steuerelemente ebenfalls transparent. Um das zu verhindern, weisen Sie zuerst eine benutzerdefinierte Farbe zu und machen Sie diese dann transparent. Zum Beispiel:
MeineGui.BackColor := "EEAA99" WinSetTransColor("EEAA99", MeineGui)
Die folgende Zeile kann hinzugefügt werden, um den Rahmen und die Titelleiste eines Fensters zu entfernen: MeineGui.Opt("-Caption")
Weiter unten finden Sie ein Beispiel für eine Bildschirmanzeige (OSD), das zeigt, wie diese Methode in der Praxis verwendet werden kann.
Ruft das GuiControl-Objekt des fokussierten Steuerelements im Fenster ab.
GuiCtrlObj := MeineGui.FocusedCtrl
Hinweis: Um den gewünschten Effekt zu erzielen, darf das Fenster weder minimiert noch versteckt sein.
Ruft das Fensterhandle (HWND) des Fensters ab.
AktuelleHwnd := MeineGui.Hwnd
Die HWND-Nummer (eindeutige ID) einer GUI wird oft in Verbindung mit PostMessage, SendMessage und DllCall verwendet. Diese Nummer kann auch direkt in einem FensterTitel-Parameter verwendet werden.
Ermittelt oder setzt die Größe der horizontalen Abstände zwischen den Rändern und danach erstellten Steuerelementen.
AktuellerWert := MeineGui.MarginX
MeineGui.MarginX := NeuerWert
AktuellerWert ist die Anzahl der Pixel des aktuellen horizontalen Abstands.
NeuerWert ist die Anzahl der Pixel, die auf der linken und rechten Seite des Fensters freigelassen werden sollen, wenn Steuerelemente aufgrund einer fehlenden X-Koordinate automatisch positioniert werden. Dieser Abstand wird auch verwendet, um den horizontalen Abstand zwischen automatisch positionierten Steuerelementen zu bestimmen. Außerdem wird dieser Abstand zur Berechnung der Fenstergröße herangezogen, wenn Gui.Show zum ersten Mal verwendet wird (wenn keine explizite Größe angegeben ist).
Standardmäßig ist dieser Abstand proportional zur Größe der aktuell ausgewählten Schrift (1.25 mal Schriftbreite für Links & Rechts).
Ermittelt oder setzt die Größe der vertikalen Abstände zwischen den Rändern und danach erstellten Steuerelementen.
AktuellerWert := MeineGui.MarginY
MeineGui.MarginY := NeuerWert
AktuellerWert ist die Anzahl der Pixel des aktuellen vertikalen Abstands.
NeuerWert ist die Anzahl der Pixel, die auf der oberen und unteren Seite des Fensters freigelassen werden sollen, wenn Steuerelemente aufgrund einer fehlenden Y-Koordinate automatisch positioniert werden. Dieser Abstand wird auch verwendet, um den vertikalen Abstand zwischen automatisch positionierten Steuerelementen zu bestimmen. Außerdem wird dieser Abstand zur Berechnung der Fenstergröße herangezogen, wenn Gui.Show zum ersten Mal verwendet wird (wenn keine explizite Größe angegeben ist).
Standardmäßig ist dieser Abstand proportional zur Größe der aktuell ausgewählten Schrift (0.75 mal Schrifthöhe für Unten & Oben).
Ermittelt oder setzt die Menüleiste des Fensters.
AktuelleLeiste := MeineGui.MenuBar
MeineGui.MenuBar := NeueLeiste
AktuelleLeiste und NeueLeiste sind ein MenuBar-Objekt, das mit MenuBar() erstellt wurde. Zum Beispiel:
DateiMenü := Menu() DateiMenü.Add "Ö&ffnen`tCtrl+F", (*) => FileSelect() ; Siehe untere Bemerkungen zu Ctrl+F. DateiMenü.Add "&Beenden", (*) => ExitApp() HilfeMenü := Menu() HilfeMenü.Add "Inf&o", (*) => MsgBox("Nicht implementiert") Menüs := MenuBar() Menüs.Add "&Datei", DateiMenü ; Die zwei oben erstellten Untermenüs hinzufügen. Menüs.Add "&?", HilfeMenü MeineGui := Gui() MeineGui.MenuBar := Menüs MeineGui.Show "w300 h200"
In der ersten Zeile oben sehen Sie Ctrl+F
, das nach Ö&ffnen
folgt (mit einem Tabulatorzeichen dazwischen). Dabei handelt es sich um ein Tastaturkurzbefehl, den der Benutzer drücken kann, um die Aktion des Menüpunkts auszuführen, ohne dass der Benutzer erst dorthin navigieren muss. Tastaturkurzbefehle mit den regulären Modifikatortasten 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 mit ungewöhnlichen Mitteln wie IME oder Alt+NNNN ausgelöst werden.
Wenn eine bestimmte Tastenkombination nicht automatisch funktioniert, können Sie ggf. einen kontextabhängigen Hotkey verwenden. 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.
Mit MeineGui.MenuBar := ""
(d.h. eine leere Zeichenkette zuweisen) können Sie die aktuelle Menüleiste aus dem Fenster entfernen.
Ermittelt oder setzt einen benutzerdefinierten Namen für das Fenster.
AktuellerName := MeineGui.Name
MeineGui.Name := NeuerName
Ermittelt oder setzt den Titel des Fensters.
AktuellerTitel := MeineGui.Title
MeineGui.Title := NeuerTitel
Ruft das GuiControl-Objekt ab, das dem angegebenen Namen, Text, ClassNN oder HWND zugeordnet ist.
GuiCtrlObj := MeineGui[Name]
GuiCtrlObj := MeineGui.__Item[Name]
Mit Tab kann der Tastaturfokus jeweils auf das nächste eingabefähige Steuerelement in einem GUI-Fenster gesetzt werden (Steuerelemente mit deaktiviertem Tabstop-Style werden übersprungen). Die Reihenfolge der Navigation richtet sich nach der Reihenfolge, in der die Steuerelemente ursprünglich hinzugefügt wurden. Wenn das Fenster zum ersten Mal angezeigt wird, bekommt das erste eingabefähige Steuerelement mit aktiviertem Tabstop-Style (den die meisten standardmäßig haben) den Tastaturfokus, es sei denn, dieses Steuerelement ist eine Schaltfläche (Button) und es existiert eine Standardschaltfläche, dann wird stattdessen die Standardschaltfläche fokussiert.
Bestimmte Steuerelemente können ein Und-Zeichen (&) enthalten, um einen Tastaturkurzbefehl zu erstellen, der im Text des Steuerelements je nach Systemeinstellung als unterstrichenes Zeichen dargestellt wird. Um einen solchen Tastaturkurzbefehl auszulösen, muss der Benutzer Alt gedrückt halten und dann das entsprechende Zeichen auf der Tastatur drücken. Drückt man den Tastaturkurzbefehl bei Button-, CheckBox- oder Radio-Steuerelementen, ist der Effekt das gleiche wie, als würde man das Steuerelement anklicken. Drückt man den Tastaturkurzbefehl bei GroupBox- oder Text-Steuerelementen, springt der Tastaturfokus auf das erste danach erstellte eingabefähige Steuerelement mit aktivem Tabstop-Style. Wenn mehrere Steuerelemente den gleichen Tastaturkurzbefehl verwenden und drückt man diesen, springt der Tastaturfokus zwischen diesen Steuerelementen abwechselnd hin und her.
Um ein direkt geschriebenes Und-Zeichen in einem der oben genannten Steuerelementen anzuzeigen, geben Sie wie folgt zwei aufeinanderfolgende Und-Zeichen an: MeineGui.Add("Button",, "Speichern && Beenden")
.
Ein GUI-Fenster verwendet als Symbol das Tray-Symbol, welches zum Zeitpunkt der Erstellung des Fensters wirksam war. Daher muss, wenn ein anderes Symbol angezeigt werden soll, das Tray-Symbol vor der Erstellung des Fensters geändert werden. Zum Beispiel: TraySetIcon("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). Zum Beispiel mit LoadPicture und SendMessage:
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) MeineGui := Gui() SendMessage(0x0080, 1, hIcon, MeineGui) ; 0x0080 ist WM_SETICON; und 1 bedeutet ICON_BIG (0 wäre ICON_SMALL). MeineGui.Show()
Aufgrund von Systemeinschränkungen werden CheckBox-, Radio- und GroupBox-Steuerelemente mit benutzerdefinierter Textfarbe im klassischen Design dargestellt.
Siehe auch: Margin (Abstände innerhalb eines Fensters).
Das GuiControl-Objekt kann verwendet werden, um mit einzelnen Steuerelementen in einem GUI-Fenster zu arbeiten.
Jedes GUI-Fenster kann bis zu 11000 Steuerelemente enthalten. Aber Vorsicht: Bei mehr als 5000 Steuerelementen kann das System instabil werden, abhängig vom Typ des Steuerelements.
Das GUI-Fenster wird automatisch zerstört, sobald das Gui-Objekt gelöscht wird, was geschieht, wenn dessen Referenzanzahl 0 erreicht. Dies geschieht jedoch in der Regel nicht, wenn das Fenster sichtbar ist, da Show die Referenzanzahl automatisch um 1 erhöht. Während das Fenster sichtbar ist, kann der Benutzer mit dem Fenster interagieren und Ereignisse auslösen, die vom Skript behandelt werden. Wenn das Fenster vom Benutzer geschlossen oder mit Hide, Show oder Submit versteckt wird, wird diese zusätzliche Referenz freigegeben.
Um ein GUI-Fenster "künstlich am Leben" zu erhalten, ohne Show aufzurufen oder eine Referenz zu seinem Gui-Objekt aufrecht zu erhalten, kann das Skript die Referenzanzahl des Objekts mit ObjAddRef um 1 erhöhen (in diesem Fall muss ObjRelease aufgerufen werden, wenn das Fenster nicht mehr benötigt wird). Dies kann z.B. der Fall sein, wenn ein verstecktes GUI-Fenster für den Empfang von Meldungen verwendet wird, oder wenn das Fenster mit "externen" Mitteln wie WinShow angezeigt wird (mit diesem Skript oder einem anderen).
Wenn das Skript aus irgendeinem Grund nicht persistent ist, wird es nach dem Schließen des letzten sichtbaren GUI-Fensters beendet; entweder nach Abschluss des letzten Threads oder sofort, wenn keine Threads laufen.
GuiControl-Objekt, GuiFromHwnd, GuiCtrlFromHwnd, Steuerelemente, ListView, TreeView, Menu-Objekt, Control-Funktionen, MsgBox, FileSelect, DirSelect
MeineGui := Gui(, "Fenstertitel") MeineGui.Opt("+AlwaysOnTop +Disabled -SysMenu +Owner") ; +Owner verhindert eine Taskleistenschaltfläche. MeineGui.Add("Text",, "Beliebiger Anzeigetext.") MeineGui.Show("NoActivate") ; NoActivate verhindert, dass ein anderes Fenster seinen Aktivzustand verliert.
Erstellt ein einfaches Eingabefenster zum Abfragen des Vor- und Nachnamens.
MeineGui := Gui(, "Einfaches Eingabebeispiel") MeineGui.Add("Text",, "Vorname:") MeineGui.Add("Text",, "Nachname:") MeineGui.Add("Edit", "vVorname ym") ; Die ym-Option beginnt eine neue Spalte für Steuerelemente. MeineGui.Add("Edit", "vNachname") MeineGui.Add("Button", "default", "OK").OnEvent("Click", BenutzereingabeVerarbeiten) MeineGui.OnEvent("Close", BenutzereingabeVerarbeiten) MeineGui.Show() BenutzereingabeVerarbeiten(*) { Gespeichert := MeineGui.Submit() ; Inhalt benannter Steuerelemente in ein Objekt speichern. MsgBox("Sie haben '" Gespeichert.Vorname " " Gespeichert.Nachname "' eingegeben.") }
Erstellt ein Tab-Steuerelement mit mehreren Tabs, die jeweils verschiedene Steuerelemente für Interaktionszwecke enthalten.
MeineGui := Gui() Tab := MeineGui.Add("Tab3",, ["Erster Tab","Zweiter Tab","Dritter Tab"]) MeineGui.Add("CheckBox", "vMeineCheckBox", "Kontrollkästchen") Tab.UseTab(2) MeineGui.Add("Radio", "vMeinRadio", "Optionsfeld 1") MeineGui.Add("Radio",, "Optionsfeld 2") Tab.UseTab(3) MeineGui.Add("Edit", "vMeinEdit r5") ; r5 bedeutet 5 Zeilen hoch. Tab.UseTab() ; d.h. danach hinzugefügte Steuerelemente gehören nicht zum Tab-Steuerelement. Btn := MeineGui.Add("Button", "default xm", "OK") ; xm positioniert die Schaltfläche in die untere linke Ecke. Btn.OnEvent("Click", BenutzereingabeVerarbeiten) MeineGui.OnEvent("Close", BenutzereingabeVerarbeiten) MeineGui.OnEvent("Escape", BenutzereingabeVerarbeiten) MeineGui.Show() BenutzereingabeVerarbeiten(*) { Gespeichert := MeineGui.Submit() ; Inhalt benannter Steuerelemente in ein Objekt speichern. MsgBox("Ihre Eingabe:`n" Gespeichert.MeineCheckBox "`n" Gespeichert.MeinRadio "`n" Gespeichert.MeinEdit) }
Erstellt eine ListBox mit Dateien aus einem Verzeichnis.
MeineGui := Gui() MeineGui.Add("Text",, "Eine Datei zum Ausführen auswählen.") LB := MeineGui.Add("ListBox", "w640 r10") LB.OnEvent("DoubleClick", DateiÖffnen) Loop Files, "C:\*.*" ; Ordner und Platzhaltermuster je nach Bedarf anpassen. LB.Add([A_LoopFilePath]) MeineGui.Add("Button", "Default", "OK").OnEvent("Click", DateiÖffnen) MeineGui.Show() DateiÖffnen(*) { if MsgBox("Wollen Sie wirklich die folgende Datei öffnen?`n`n" LB.Text,, 4) = "No" return ; Andernfalls versuchen zu starten: try Run(LB.Text) if A_LastError MsgBox("Die angegebene Datei konnte nicht gestartet werden. Scheinbar fehlt das entsprechende Programm.") }
Zeigt jedes Mal eine kontextabhängige Hilfe via Tooltip an, wenn der Benutzer den Mauszeiger über ein bestimmtes Steuerelement bewegt.
MeineGui := Gui() MeinEdit := MeineGui.Add("Edit") ; Tooltiptext in eine benutzerdefinierte Eigenschaft speichern: MeinEdit.ToolTip := "Der Tooltip für das Steuerelement mit dem Namen MeinEdit." MeineDDL := MeineGui.Add("DropDownList",, ["Rot","Grün","Blau"]) MeineDDL.ToolTip := "Wählen Sie eine Farbe aus." MeineGui.Add("CheckBox",, "Dieses Steuerelement hat keinen Tooltip.") MeineGui.Show() OnMessage(0x0200, On_WM_MOUSEMOVE) On_WM_MOUSEMOVE(wParam, lParam, msg, Hwnd) { static AltesHwnd := 0 if (Hwnd != AltesHwnd) { Text := "", ToolTip() ; Vorherigen Tooltip verstecken. AktStrlmnt := GuiCtrlFromHwnd(Hwnd) if AktStrlmnt { if !AktStrlmnt.HasProp("ToolTip") return ; Kein Tooltip für dieses Steuerelement. Text := AktStrlmnt.ToolTip SetTimer () => ToolTip(Text), -1000 SetTimer () => ToolTip(), -4000 ; ToolTip verstecken. } AltesHwnd := Hwnd } }
Erstellt eine Bildschirmanzeige (OSD) via transparentem Fenster.
MeineGui := Gui() MeineGui.Opt("+AlwaysOnTop -Caption +ToolWindow") ; +ToolWindow verhindert Taskleistenschaltfläche und Alt-Tab-Zugriff. MeineGui.BackColor := "EEAA99" ; Kann eine beliebige RGB-Farbe sein (wird weiter unten transparent gemacht). MeineGui.SetFont("s32") ; Große Schriftgröße setzen (32 Punkte). KoordText := MeineGui.Add("Text", "cLime", "XXXXX YYYYY") ; XX & YY dienen zum automatischen Anpassen der Fenstergröße. ; Macht alle Pixel dieser Farbe unsichtbar und den Text selbst transparent (150): WinSetTransColor(MeineGui.BackColor " 150", MeineGui) SetTimer(OSDAktualisieren, 200) OSDAktualisieren() ; Erste Aktualisierung sofort machen, anstatt auf den Timer zu warten. MeineGui.Show("x0 y400 NoActivate") ; NoActivate verhindert, dass ein anderes Fenster seinen Aktivzustand verliert. OSDAktualisieren(*) { MouseGetPos &MausX, &MausY KoordText.Value := "X" MausX ", Y" MausY }
Erstellt einen animierten Fortschrittsbalken auf einem Hintergrundbild.
MeineGui := Gui() MeineGui.BackColor := "White" MeineGui.Add("Picture", "x0 y0 h350 w450", A_WinDir "\Web\Wallpaper\Windows\img0.jpg") MeinBtn := MeineGui.Add("Button", "Default xp+20 yp+250", "Animation starten") MeinBtn.OnEvent("Click", LeisteAnimieren) MeinProgress := MeineGui.Add("Progress", "w416") MeinText := MeineGui.Add("Text", "wp") ; wp bedeutet "vorherige Breite verwenden". MeineGui.Show() LeisteAnimieren(*) { Loop Files, A_WinDir "\*.*", "R" { if (A_Index > 100) break MeinProgress.Value := A_Index MeinText.Value := A_LoopFileName Sleep 50 } MeinText.Value := "Animation beendet." }
Erstellt einen einfachen Bildbetrachter.
MeineGui := Gui("+Resize") MeinBtn := MeineGui.Add("Button", "default", "Neues Bild &laden") MeinBtn.OnEvent("Click", NeuesBildLaden) MeinRadio := MeineGui.Add("Radio", "ym+5 x+10 checked", "&Originalgröße") MeineGui.Add("Radio", "ym+5 x+10", "&Kompletter Bildschirm") MeinPic := MeineGui.Add("Pic", "xm") MeineGui.Show() NeuesBildLaden(*) { Bild := FileSelect(,, "Bild auswählen:", "Bilder (*.gif; *.jpg; *.bmp; *.png; *.tif; *.ico; *.cur; *.ani; *.exe; *.dll)") if Bild = "" return if (MeinRadio.Value) ; Bild mit aktueller Größe anzeigen. { Breite := 0 Höhe := 0 } else ; Zweites Optionsfeld ausgewählt: Bildgröße 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. } MeinPic.Value := Format("*w{1} *h{2} {3}", Breite, Höhe, Bild) ; Bild laden. MeineGui.Title := Bild MeineGui.Show("xCenter y0 AutoSize") ; Fenstergröße an Bildgröße anpassen. }
Erstellt einen einfachen Texteditor mit Menüleiste.
; MeineGui-Fenster erstellen: MeineGui := Gui("+Resize", "Unbenannt") ; Größe des Fensters veränderbar machen. ; Untermenüs für die Menüleiste erstellen: DateiMenü := Menu() DateiMenü.Add("&Neu", MenüDateiNeu) DateiMenü.Add("Ö&ffnen...", MenüDateiÖffnen) DateiMenü.Add("&Speichern", MenüDateiSpeichern) DateiMenü.Add("Speichern &unter...", MenüDateiSpeichernUnter) DateiMenü.Add() ; Trennlinie. DateiMenü.Add("&Beenden", MenüDateiBeenden) HilfeMenü := Menu() HilfeMenü.Add("Inf&o", MenüHilfeInfo) ; Untermenüs in die Menüleiste einfügen: MeineMenüleiste := MenuBar() MeineMenüleiste.Add("&Datei", DateiMenü) MeineMenüleiste.Add("&?", HilfeMenü) ; Fenster mit der Menüleiste ausstatten: MeineGui.MenuBar := MeineMenüleiste ; Haupt-Eingabefeld erstellen: HauptEdit := MeineGui.Add("Edit", "WantTab W600 R20") ; Ereignisse hinzufügen: MeineGui.OnEvent("DropFiles", Gui_DropFiles) MeineGui.OnEvent("Size", Gui_Size) MenüDateiNeu() ; Standardeinstellungen anwenden. MeineGui.Show() ; Fenster anzeigen. MenüDateiNeu(*) { HauptEdit.Value := "" ; Eingabefeld leeren. DateiMenü.Disable("3&") ; &Speichern grau machen. MeineGui.Title := "Unbenannt" } MenüDateiÖffnen(*) { MeineGui.Opt("+OwnDialogs") ; Benutzer zwingen, das FileSelect-Dialogfenster zu schließen, bevor er zum Hauptfenster zurückkehren kann. AusgewählteDateiName := FileSelect(3,, "Datei öffnen", "Text-Dokumente (*.txt)") if AusgewählteDateiName = "" ; Keine Datei ausgewählt. return global AktuelleDateiName := InhaltLesen(AusgewählteDateiName) } MenüDateiSpeichern(*) { InhaltSpeichern(AktuelleDateiName) } MenüDateiSpeichernUnter(*) { MeineGui.Opt("+OwnDialogs") ; Benutzer zwingen, das FileSelect-Dialogfenster zu schließen, bevor er zum Hauptfenster zurückkehren kann. AusgewählteDateiName := FileSelect("S16",, "Datei speichern", "Text-Dokumente (*.txt)") if AusgewählteDateiName = "" ; Keine Datei ausgewählt. return global AktuelleDateiName := InhaltSpeichern(AusgewählteDateiName) } MenüDateiBeenden(*) ; Benutzer hat "Beenden" in DateiMenü ausgewählt. { WinClose() } MenüHilfeInfo(*) { Info := Gui("+owner" MeineGui.Hwnd) ; Hauptfenster zum Elternfenster des Info-Fensters machen. MeineGui.Opt("+Disabled") ; Interaktion mit dem Hauptfenster verbieten. Info.Add("Text",, "Beliebiger Text.") Info.Add("Button", "Default", "OK").OnEvent("Click", Info_Close) Info.OnEvent("Close", Info_Close) Info.OnEvent("Escape", Info_Close) Info.Show() Info_Close(*) { MeineGui.Opt("-Disabled") ; Interaktion mit dem Hauptfenster erlauben (muss vor dem nächsten Schritt erfolgen). Info.Destroy() ; Info-Fenster zerstören. } } InhaltLesen(DateiName) { try DateiInhalt := FileRead(DateiName) ; Inhalt der Datei lesen und in die Variable speichern. catch { MsgBox("'" DateiName "' konnte nicht geöffnet werden.") return } HauptEdit.Value := DateiInhalt ; Text in das Steuerelement einfügen. DateiMenü.Enable("3&") ; &Speichern entgrauen. MeineGui.Title := DateiName ; Dateinamen in der Titelleiste anzeigen. return DateiName } InhaltSpeichern(DateiName) { try { if FileExist(DateiName) FileDelete(DateiName) FileAppend(HauptEdit.Value, DateiName) ; Inhalt in eine Datei speichern. } catch { MsgBox("Überschreiben der Datei '" DateiName "' fehlgeschlagen.") return } ; Bei Erfolg den Dateinamen in der Titelleiste anzeigen (falls es mit MenüDateiSpeichernUnter aufgerufen wurde): MeineGui.Title := DateiName return DateiName } Gui_DropFiles(thisGui, Ctrl, DateiArray, *) ; Ziehen & Ablegen unterstützen. { AktuelleDateiName := InhaltLesen(DateiArray[1]) ; Nur die erste Datei lesen (sofern mehrere Dateien vorhanden sind). } Gui_Size(thisGui, MinMax, Breite, Höhe) { if MinMax = -1 ; Das Fenster wurde minimiert. Keine Aktion notwendig. return ; Andernfalls wurde das Fenster maximiert oder dessen Größe geändert. Größe des Eingabefeldes entsprechend anpassen. HauptEdit.Move(,, Breite-20, Höhe-20) }
Zeigt durch Referenzzyklen verursachte Probleme auf.
; Klicken Sie auf Open oder doppelklicken Sie auf das Tray-Symbol, um eine ; andere GUI anzuzeigen. Verwenden Sie die Menüpunkte, die ESC-Taste oder die ; Schließen-Schaltfläche, um zu sehen, wie es reagiert. A_TrayMenu.Add("&Open", RefZyklusGuiZeigen) Persistent RefZyklusGuiZeigen(*) { static n := 0 g := Gui(, "GUI Nr. " (++n)), g.n := n g.MenuBar := mb := MenuBar() ; g -> mb mb.Add("Gui", m := Menu()) ; mb -> m m.Add("Hide", (*) => g.Hide()) ; (*) -> g m.Add("Destroy", (*) => g.Destroy()) ; Für ein GUI-Ereignis kann der Rückruf-Parameter verwendet werden, um ; einen Referenzzyklus zu vermeiden (die Verwendung desselben Namens ; verhindert eine versehentliche Erfassung). ; Allerdings unterbricht Hide() nicht die *anderen* Referenzzyklen. g.OnEvent("Escape", (g, *) => g.Hide()) ; Die Erfassung der Variablen kann zu unseren Gunsten ausfallen. g.OnEvent("Close", (*) => g := unset) g.Show("w300 h200") ; __Delete wird nicht aufgerufen aufgrund des Referenzzyklus: ; g -> mb -> m -> (*) -> g ; es sei denn, g wird durch Auslösen des Close-Ereignisses ungesetzt gemacht ; oder MenuBar und Ereignishandler werden durch Destroy freigegeben. g.__Delete := this => MsgBox("GUI Nr. " this.n " gelöscht") }