TreeView

Inhaltsverzeichnis

Einführung und einfaches Beispiel

Ermöglicht die Darstellung einer Hierarchie von mehreren ineinander verschachtelten Elementen. Das wohl bekannteste Beispiel dafür ist der Navigationsbereich am linken Rand eines Explorer-Fensters, mit dem Laufwerke und Ordner ausgewählt werden können.

Eine typische TreeView sieht wie folgt aus:

TreeView

Die Syntax zur Erstellung einer TreeView ist:

GuiCtrl := MeineGui.Add("TreeView", Optionen)
GuiCtrl := MeineGui.AddTreeView(Optionen)

Das folgende Beispiel ist ein lauffähiges Skript, das eine einfache Hierarchie von Elementen erstellt und anzeigt:

MeineGui := Gui()
TV := MeineGui.Add("TreeView")
P1 := TV.Add("Erstes Elternelement")
P1C1 := TV.Add("Erstes Kinderelement von Elternelement 1", P1)  ; P1 als Elternelement für dieses Element festlegen.
P2 := TV.Add("Zweites Elternelement")
P2C1 := TV.Add("Erstes Kinderelement von Elternelement 2", P2)
P2C2 := TV.Add("Zweites Kinderelement von Elternelement 2", P2)
P2C2C1 := TV.Add("Erstes Kinderelement von Elternelement 2", P2C2)

MeineGui.Show()  ; Das Fenster und dessen TreeView anzeigen.

Parameter

Optionen

Typ: Zeichenkette

Neben den allgemeinen Optionen und Styles werden die folgenden unterstützt oder sind erwähnenswert:

BackgroundFarbe: Hintergrundfarbe. 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 vorhanden ist, verwendet die TreeView als Hintergrundfarbe standardmäßig die Standardhintergrundfarbe des Systems. Mit BackgroundDefault kann die Standardhintergrundfarbe des Systems gesetzt werden (in der Regel weiß). Zum Beispiel kann die Standardfarbe einer TreeView via TV.Opt("+BackgroundDefault") wiederhergestellt werden.

Buttons: Geben Sie -Buttons (minus Buttons) an, um die Plus- oder Minuszeichen auf der linken Seite eines Elements, das Kinderelemente hat, zu entfernen.

CFarbe: Textfarbe. Geben Sie für Farbe einen Farbnamen (siehe Farbentabelle) oder RGB-Wert (mit oder ohne 0x-Präfix) an. Beispiele: cRed, cFF2211, c0xFF2211, cDefault.

Checked: Stellt ein Kontrollkästchen auf der linken Seite jedes Elements bereit. Geben Sie beim Hinzufügen eines Elements das Wort Check in den Optionen an, um das Kontrollkästchen vorerst im angehakten Zustand anzuzeigen. Der Benutzer kann das Kontrollkästchen anklicken oder die Leertaste drücken, um ein Häkchen zu setzen oder zu entfernen. Um herauszufinden, welche Elemente aktuell in der TreeView angehakt sind, rufen Sie die GetNext- oder Get-Methode auf.

HScroll: Geben Sie -HScroll (minus HScroll) an, um das horizontale Scrollen im Steuerelement zu deaktivieren (zusätzlich wird der horizontale Scrollbalken entfernt).

ImageListID: Ermöglicht das Hinzufügen von Symbolen zu einer TreeView. Geben Sie für ID die ID-Nummer an, die von einem früheren Aufruf von IL_Create zurückgegeben wurde. Diese Option funktioniert nur beim Erstellen einer TreeView. Alternativ kann die SetImageList-Methode verwendet werden, ohne dass die zuvor genannte Einschränkung gilt. Einzelheiten finden Sie unter ImageLists.

Lines: Geben Sie -Lines (minus Lines) an, um die Verbindungslinien zwischen den Eltern- und Kinderelementen zu verstecken. Das Entfernen solcher Linien verhindert allerdings auch, dass die Plus-/Minuszeichen bei Top-Level-Elementen angezeigt werden.

ReadOnly: Geben Sie -ReadOnly (minus ReadOnly) an, um dem Benutzer das Editieren des Texts/Namens eines Elements zu erlauben. Um ein Element zu editieren, wählen Sie es aus und drücken Sie F2 (siehe WantF2-Option unten). Alternativ können Sie einmal auf ein Element klicken, um es auszuwählen, mindestens eine halbe Sekunde warten und dann erneut auf dasselbe Element klicken, um es zu editieren. Nach dem Editieren kann ein Element unter seinen Geschwisterelementen alphabetisch neu positioniert werden, wie in Beispiel #1.

WantF2: Geben Sie -WantF2 (minus WantF2) an, um den Benutzer daran zu hindern, das aktuell ausgewählte Element mit F2 zu editieren. Diese Einstellung wird ignoriert, es sei denn, -ReadOnly ist ebenfalls wirksam.

Wn: Setzt die Breite des Steuerelements. Zum Beispiel bewirkt w400, dass das Steuerelement 400 Pixel breit gemacht wird. Wenn diese Option weggelassen wird, ist die Breite standardmäßig das 30-fache der aktuellen Schriftgröße.

Rn oder Hn: Setzt die Höhe des Steuerelements. Zum Beispiel bewirkt r7, dass im Steuerelement Platz für 7 Zeilen geschaffen wird, oder h400, dass die Gesamthöhe des Steuerelements auf 400 Pixel gesetzt wird. Wenn beide Optionen weggelassen werden, ist die Höhe standardmäßig 5 Zeilen.

(Namenlose numerische Styles): Andere Styles als die oben genannten werden nur selten verwendet und haben daher keine Namen. Eine Liste von Styles finden Sie in der TreeView-Styles-Tabelle.

Interne Methoden für TreeViews

Neben den regulären Methoden/Eigenschaften eines GUI-Steuerelements besitzt dieses Steuerelement die folgenden Methoden:

Element-Methoden:

Abrufmethoden:

Sonstige Methoden:

Add

Fügt ein neues Element zur TreeView hinzu.

ElementID := TV.Add(Name, ElternElementID, Optionen)

Parameter

Name

Typ: Zeichenkette

Der Anzeigetext des Elements, der textuell oder numerisch sein kann (einschließlich numerischer Ergebnisse von Ausdrücken).

ElternElementID

Typ: Integer

Wenn weggelassen, wird standardmäßig 0 verwendet, d.h. das Element wird als Top-Level-Element hinzugefügt. Andernfalls geben Sie die ID-Nummer des Elternelements des neuen Elements an.

Optionen

Typ: Zeichenkette

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

Bold: Stellt den Namen des Elements in fetter Schrift dar. Um dessen Schrift später wieder zu normalisieren, verwenden Sie TV.Modify(ElementID, "-Bold"). Direkt nach dem Wort Bold kann optional eine 0 oder 1 angegeben werden, um den Startzustand zu bestimmen.

Check: Zeigt ein Häkchen links neben dem Element an (sofern die TreeView über Kontrollkästchen verfügt). Um das Häkchen später wieder zu entfernen, verwenden Sie TV.Modify(ElementID, "-Check"). Direkt nach dem Wort Check kann optional eine 0 oder 1 angegeben werden, um den Startzustand zu bestimmen. Mit anderen Worten, "Check" ist dasselbe wie "Check" . VarEnhältEins (wobei der Punkt ein Verkettungsoperator ist).

Expand: Klappt das Element auf, um seine Kinderelemente (falls vorhanden) anzuzeigen. Um das Element später wieder zuzuklappen, verwenden Sie TV.Modify(ElementID, "-Expand"). Wenn es keine Kinderelemente hat, gibt die Modify-Methode 0 anstelle der Element-ID zurück. Die Add-Methode hingegen markiert das Element als aufgeklappt, falls später noch Kinderelemente hinzugefügt werden. Im Gegensatz zur Select-Option unten wird beim Aufklappen eines Elements nicht automatisch das Elternelement aufgeklappt. Direkt nach dem Wort Expand kann optional eine 0 oder 1 angegeben werden, um den Startzustand zu bestimmen. Mit anderen Worten, "Expand" ist dasselbe wie "Expand" . VarEnhältEins.

First | Sort | N: Diese Optionen gelten nur für die Add-Methode. Sie bestimmen die Position des neuen Elements relativ zu seinen Geschwisterelementen (ein Geschwisterelement befindet sich auf derselben Ebene). Wenn keine dieser Optionen vorhanden ist, wird das neue Element als letztes/unterstes Geschwisterelement hinzugefügt. Andernfalls geben Sie das Wort First an, um das Element als erstes/oberstes Geschwisterelement hinzuzufügen, oder das Wort Sort, um das Element unter seinen Geschwisterelementen in alphabetischer Reihenfolge einzufügen. Wenn eine Nummer (N) angegeben ist, wird diese als ID-Nummer des Geschwisterelements vermutet, hinter dem das neue Element eingefügt werden soll (wenn N die einzige Option ist, muss sie nicht in Anführungszeichen gesetzt werden).

Icon: Geben Sie das Wort Icon an, unmittelbar gefolgt von der Nummer des Symbols, das links neben dem Elementnamen angezeigt werden soll. Wenn diese Option fehlt, wird das erste Symbol in der ImageList verwendet. Um ein leeres Symbol anzuzeigen, geben Sie eine Nummer größer als die Anzahl der Symbole in der ImageList an. Wenn dem Steuerelement keine ImageList zugewiesen wurde, wird kein Symbol angezeigt und kein Platz dafür reserviert.

Select: Wählt das Element aus. Da immer nur ein Element ausgewählt werden kann, wird das zuvor ausgewählte Element automatisch abgewählt. Außerdem bewirkt diese Option, dass alle Elternelemente des neuen Elements, das ausgewählt wurde, aufgeklappt werden, falls erforderlich. Um die aktuelle Auswahl zu ermitteln, verwenden Sie die GetSelection-Methode.

Sort: In Verbindung mit der Modify-Methode bewirkt diese Option, dass die Kinderelemente des angegebenen Elements in alphabetischer Reihenfolge sortiert werden. Um stattdessen alle Top-Level-Elemente zu sortieren, verwenden Sie TV.Modify(0, "Sort"). Wenn es keine Kinderelemente hat, wird 0 anstelle der ID des geänderten Elements zurückgegeben.

Vis: Stellt sicher, dass das Element vollständig sichtbar ist, ggf. durch Scrollen der TreeView und/oder Aufklappen des Elternelements.

VisFirst: Dasselbe wie oben, außer dass die TreeView zusätzlich gescrollt wird, um das Element nach Möglichkeit ganz oben anzuzeigen. Diese Option ist in Verbindung mit der Modify-Methode grundsätzlich effektiver als mit der Add-Methode.

Rückgabewert

Typ: Integer

Bei Erfolg gibt diese Methode die eindeutige ID-Nummer des neuen Elements zurück. Bei Misserfolg gibt sie 0 zurück.

Bemerkungen

Um das Hinzufügen sehr vieler Elemente performanter zu machen, verwenden Sie TV.Opt("-Redraw"), bevor Sie die Elemente hinzufügen, und danach TV.Opt("+Redraw"). Weitere Informationen finden Sie unter Redraw.

Modify

Ändert die Attribute und/oder den Namen eines Elements.

ElementID := TV.Modify(ElementID , Optionen, NeuerName)

Parameter

ElementID

Typ: Integer

Die ID-Nummer des Elements, das geändert werden soll.

Optionen

Typ: Zeichenkette

Wenn dieser und der NeuerName-Parameter weggelassen werden, wird das Element ausgewählt. Andernfalls geben Sie eine oder mehrere Optionen aus der obigen Liste an.

NeuerName

Typ: Zeichenkette

Wenn weggelassen, bleibt der aktuelle Name unverändert. Andernfalls geben Sie den neuen Namen des Elements an.

Rückgabewert

Typ: Integer

Diese Methode gibt die ID des Elements zurück.

Delete

Löscht ein bestimmtes Element oder alle Elemente.

TV.Delete(ElementID)

Parameter

ElementID

Typ: Integer

Wenn weggelassen, werden alle Elemente in der TreeView gelöscht. Andernfalls geben Sie die ID-Nummer des Elements an, das gelöscht werden soll.

GetSelection

Gibt die ID-Nummer des ausgewählten Elements zurück.

ElementID := TV.GetSelection()

Rückgabewert

Typ: Integer

Diese Methode gibt die ID-Nummer des ausgewählten Elements zurück.

GetCount

Gibt die Gesamtzahl der Elemente im Steuerelement zurück.

Anzahl := TV.GetCount()

Rückgabewert

Typ: Integer

Diese Methode gibt die Gesamtzahl der Elemente im Steuerelement zurück. Der Wert wird immer sofort zurückgegeben, da das Steuerelement diese Zählung zwischenspeichert.

GetParent

Gibt die ID-Nummer des Elternelements eines bestimmten Elements zurück.

ElternElementID := TV.GetParent(ElementID)

Parameter

ElementID

Typ: Integer

Die ID-Nummer des Elements, das geprüft werden soll.

Rückgabewert

Typ: Integer

Diese Methode gibt die ID-Nummer des Elternelements des angegebenen Elements zurück. Wenn das Element kein Elternelement hat, gibt sie 0 zurück, was für alle Top-Level-Elemente gilt.

GetChild

Gibt die ID-Nummer des ersten/obersten Kinderelements eines bestimmten Elements zurück.

KinderelementID := TV.GetChild(ElementID)

Parameter

ElementID

Typ: Integer

Die ID-Nummer des Elements, das geprüft werden soll. Wenn 0, wird die ID-Nummer des ersten/obersten Elements in der TreeView zurückgegeben.

Rückgabewert

Typ: Integer

Diese Methode gibt die ID-Nummer des ersten/obersten Kinderelements des angegebenen Elements zurück. Wenn dort kein Kinderelement vorhanden ist, gibt sie 0 zurück.

GetPrev

Gibt die ID-Nummer des Geschwisterelements zurück, das sich oberhalb eines bestimmten Elements befindet.

VorherigesElementID := TV.GetPrev(ElementID)

Parameter

ElementID

Typ: Integer

Die ID-Nummer des Elements, das geprüft werden soll.

Rückgabewert

Typ: Integer

Diese Methode gibt die ID-Nummer des Geschwisterelements zurück, das sich oberhalb des angegebenen Elements befindet. Wenn dort kein Geschwisterelement vorhanden ist, gibt sie 0 zurück.

GetNext

Gibt die ID-Nummer des nächsten Elements zurück, das sich unterhalb eines bestimmten Elements befindet.

NächstesElementID := TV.GetNext(ElementID, ElementTyp)

Parameter

ElementID

Typ: Integer

Wenn weggelassen, wird standardmäßig 0 verwendet, d.h. es wird die ID-Nummer des ersten/obersten Elements in der TreeView zurückgegeben. Andernfalls geben Sie die ID-Nummer des Elements an, das geprüft werden soll.

ElementTyp

Typ: Zeichenkette

Wenn weggelassen, wird die ID-Nummer des Geschwisterelements abgerufen, das sich unterhalb des angegebenen Elements befindet. Andernfalls geben Sie eine der folgenden Zeichenketten an:

Full oder F: Ruft das nächste Element unabhängig von seiner Beziehung zum angegebenen Element ab. Dadurch kann das Skript auf einfache Weise die gesamte TreeView Element für Element durchgehen. Siehe das Beispiel unten.

Check, Checked oder C: Ruft nur das nächste angehakte Element ab.

Rückgabewert

Typ: Integer

Diese Methode gibt die ID-Nummer des nächsten Elements zurück, das sich unterhalb des angegebenen Elements befindet. Wenn dort kein nächstes Element vorhanden ist, gibt sie 0 zurück.

Bemerkungen

Das folgende Beispiel durchläuft die gesamte TreeView Element für Element:

ElementID := 0  ; Die Suche beim ersten Element beginnen.
Loop
{
    ElementID := TV.GetNext(ElementID, "Full")  ; Ersetzen Sie "Full" mit "Checked", um alle angehakten Elemente zu finden.
    if not ElementID  ; Keine weiteren Elemente verfügbar.
        break
    ElementText := TV.GetText(ElementID)
    MsgBox('Das nächste Element ist ' ElementID ' und enthält "' ElementText '".')
}

GetText

Ruft den Text/Namen eines bestimmten Elements ab.

Text := TV.GetText(ElementID)

Parameter

ElementID

Typ: Integer

Die ID-Nummer des Elements, dessen Text abgerufen werden soll.

Rückgabewert

Typ: Zeichenkette

Diese Methode gibt den abgerufenen Text zurück. Es werden nur bis zu 8191 Zeichen abgerufen.

Get

Gibt die ID-Nummer eines bestimmten Elements zurück, unter Beachtung des angegebenen Attributs.

ElementID := TV.Get(ElementID, Attribut)

Parameter

ElementID

Typ: Integer

Die ID-Nummer des Elements, das geprüft werden soll.

Attribut

Typ: Zeichenkette

Geben Sie eine der folgenden Zeichenketten an:

E, Expand oder Expanded: Das Element ist gerade aufgeklappt (d.h. seine Kinderelemente werden angezeigt).

C, Check oder Checked: Das Element hat ein Häkchen.

B oder Bold: Das Element wird gerade fett dargestellt.

Rückgabewert

Typ: Integer

Wenn das angegebene Element das angegebene Attribut hat, wird dessen ID zurückgegeben. Andernfalls wird 0 zurückgegeben.

Bemerkungen

Da eine IF-Anweisung jeden Wert ungleich 0 als "wahr" ansieht, sind die folgenden zwei Zeilen funktionsgleich: if TV.Get(ElementID, "Checked") = ElementID und if TV.Get(ElementID, "Checked").

SetImageList

Setzt oder ersetzt eine ImageList zur Darstellung von Symbolen.

VorherigeImageListID := TV.SetImageList(ImageListID , SymbolTyp)

Parameter

ImageListID

Typ: Integer

Die ID-Nummer, die von einem früheren Aufruf von IL_Create zurückgegeben wurde.

SymbolTyp

Typ: Integer

Wenn weggelassen, wird standardmäßig 0 verwendet. Andernfalls geben Sie 2 für Zustandssymbole an (Zustandssymbole werden nur indirekt via SendMessage unterstützt).

Rückgabewert

Typ: Integer

Bei Erfolg gibt diese Methode die ImageList-ID zurück, die zuvor mit der TreeView verknüpft war. Bei Misserfolg gibt sie 0 zurück. Jede nicht mehr verwendete ImageList sollte normalerweise mit IL_Destroy zerstört werden.

Ereignisse

Damit das Skript auf die folgenden Ereignisse reagieren kann, muss eine Rückruffunktion oder -methode via GuiControl.OnEvent registriert werden:

EreignisAuslösende Aktion
ClickDas Steuerelement wurde angeklickt.
DoubleClickDas Steuerelement wurde doppelt angeklickt.
ContextMenuDer Benutzer hat einen Rechtsklick auf das Steuerelement gemacht oder Menü oder Umschalt+F10 gedrückt, während das Steuerelement fokussiert war.
FocusDas Steuerelement hat den Tastaturfokus erhalten.
LoseFocusDas Steuerelement hat den Tastaturfokus verloren.
ItemCheckBei einem Element wurde ein Häkchen gesetzt oder entfernt.
ItemEditDie Beschriftung eines Elements wird vom Benutzer editiert.
ItemExpandEin Element wurde auf- oder zugeklappt.
ItemSelectEin Element wurde ausgewählt.

Weitere (selten verwendete) Benachrichtigungen können mit GuiControl.OnNotify erkannt und verarbeitet werden. Diese Benachrichtigungen sind in Microsoft Docs dokumentiert. Microsoft Docs zeigt normalerweise keine numerischen Werte für die Benachrichtigungscodes an; diese können im Windows SDK oder durch Suchen im Internet gefunden werden.

ImageLists

Eine ImageList (übersetzt Bildliste) ist eine Gruppe von gleich großen Symbolen, die im Speicher abgelegt sind. Zu Beginn ist jede ImageList leer. Das Skript ruft IL_Add wiederholt auf, um Symbole zur Liste hinzuzufügen, wobei jedem Symbol eine fortlaufende Nummer zugewiesen wird, beginnend bei 1. Dies ist die Nummer, auf die sich das Skript bezieht, um ein bestimmtes Symbol links neben dem Namen eines Elements anzuzeigen. Das folgende Beispiel zeigt, wie Symbole in die TreeView eingefügt werden können:

MeineGui := Gui()
ImageListID := IL_Create(10)  ; Eine ImageList mit einer anfänglichen Kapazität von 10 Symbolen erstellen.
Loop 10  ; ImageList mit einigen Standardsymbolen des Systems füllen.
    IL_Add(ImageListID, "shell32.dll", A_Index)
TV := MeineGui.Add("TreeView", "ImageList" . ImageListID)
TV.Add("Elementname", 0, "Icon4")  ; Element zur TreeView hinzufügen und ein Ordnersymbol zuweisen.
MeineGui.Show()

Die TV_SetImageList-Methode kann als Alternative zur ImageList-Option verwendet werden.

Ausführliche Informationen zu allen ImageList-Funktionen finden Sie auf der ListView-Seite.

Im Gegensatz zu den ImageLists einer ListView werden ImageLists einer TreeView nicht automatisch zerstört, wenn die TreeView zerstört wird. Daher sollte IL_Destroy nach dem Zerstören eines TreeView-Fensters aufgerufen werden, wenn die ImageList nicht länger benötigt wird. Dies ist jedoch nicht erforderlich, wenn das Skript in Kürze beendet wird, da in diesem Fall alle ImageLists automatisch zerstört werden.

Bemerkungen

Um einen Enter-Tastendruck in einer fokussierten TreeView zu erfassen, verwenden Sie eine Standardschaltfläche (die bei Bedarf versteckt werden kann). Zum Beispiel:

MeineGui.Add("Button", "Hidden Default", "OK").OnEvent("Click", ButtonOK)
...
ButtonOK(*) {
    global
    if MeineGui.FocusedCtrl != TV
        return
    MsgBox("Sie haben ENTER gedrückt. Die ID des ausgewählten Elements ist " TV.GetSelection())
}

Zusätzlich zur elementweisen Navigation mit der Tastatur kann der Benutzer auch eine inkrementelle Suche durchführen, indem er die ersten paar Zeichen eines Elementnamens eingibt. Dadurch springt die Auswahl auf das nächst passende Element.

Obwohl ein beliebig langer Text in einem TreeView-Element gespeichert werden kann, werden nur die ersten 260 Zeichen angezeigt.

Auch wenn die TreeView theoretisch maximal 65536 Elemente enthalten kann, wird die Performanz beim Hinzufügen von Elementen schon lange vorher merklich abnehmen. Um diesen Performanzverlust etwas abzumildern, verwenden Sie den in der Add-Methode beschriebenen Tipp bzgl. Redraw.

Ein Skript kann mehr als eine TreeView pro Fenster erstellen.

Um eine TreeView z.B. größer/kleiner zu machen, zu verstecken oder mit einer anderen Schrift zu versehen, schauen Sie sich das GuiControl-Objekt an.

ListView, Andere Steuerelemente, Gui(), ContextMenu-Ereignis, Gui-Objekt, GuiControl-Objekt, TreeView-Styles

Beispiele

Erstellt eine editierbare TreeView mit drei Elementen und zeigt sie an. Die TreeView verwendet ein GuiControl.OnEvent, um die Benutzereingaben zu verarbeiten. Jedes Mal, wenn der Benutzer mit dem Editieren eines Elements fertig ist, wird es alphabetisch unter den Geschwisterelementen neu positioniert. Um dieses Beispiel zu testen, editieren Sie ein Element mit F2 oder einem verzögerten Doppelklick.

MeineGui := Gui()
TV := MeineGui.Add("TreeView", "-ReadOnly")
TV.Add("A")
TV.Add("B")
TV.Add("C")
TV.OnEvent("ItemEdit", TV_Edit)  ; TV_Edit jedes Mal aufrufen, nachdem ein Element editiert wurde.
MeineGui.Show()

TV_Edit(TV, Element)
{
    TV.Modify(TV.GetParent(Element), "Sort")  ; Funktioniert auch, wenn das Element kein Elternelement hat.
}

Das folgende Beispiel ist ein lauffähiges Skript, das umfangreicher ist als das Beispiel ganz oben. Es erstellt und zeigt eine TreeView, die sämtliche Ordner des Alle-Benutzer-Startmenüs enthält. Wenn der Benutzer einen Ordner auswählt, wird dessen Inhalt in einer ListView auf der rechten Seite angezeigt (wie beim Windows Explorer). Zusätzlich zeigt ein StatusBar-Steuerelement Informationen über den aktuell ausgewählten Ordner an.

; Der folgende Ordner definiert den Stammordner der TreeView. Beachten Sie, dass
; das Laden lange dauern kann, wenn ein ganzes Laufwerk wie C:\ angegeben ist:
TreeRoot := A_MyDocuments
TreeViewBreite := 280
ListViewBreite := A_ScreenWidth/2 - TreeViewBreite - 30

; GUI-Fenster erstellen und Root-Ordner in der Titelleiste anzeigen:
MeineGui := Gui("+Resize", TreeRoot)  ; Dem Benutzer erlauben, das Fenster zu maximieren oder dessen Größe zu ändern.

; Eine ImageList erstellen und mit einigen Standardsymbolen des Systems füllen:
ImageListID := IL_Create(5)
Loop 5 
    IL_Add(ImageListID, "shell32.dll", A_Index)
; Eine TreeView und ListView nebeneinandersetzen, ähnlich dem Windows Explorer:
TV := MeineGui.Add("TreeView", "r20 w" TreeViewBreite " ImageList" ImageListID)
LV := MeineGui.Add("ListView", "r20 w" ListViewBreite " x+10", ["Name", "Änderungsdatum"])

; Statusleiste erstellen, um Anzahl der Dateien und Gesamtgröße anzuzeigen:
SB := MeineGui.Add("StatusBar")
SB.SetParts(60, 85)  ; Leiste in drei Segmente aufteilen (das dritte Segment füllt die restliche Breite aus).

; Ordner und ihre Unterordner zur TreeView hinzufügen. Status anzeigen, falls das Laden länger dauert:
M := Gui("ToolWindow -SysMenu Disabled AlwaysOnTop", "Lade Baumstruktur..."), M.Show("w200 h0")
VerzListe := UnterordnerInBaumEinfügen(TreeRoot, Map())
M.Hide()

; TV_ItemSelect aufrufen, wenn ein neues Element ausgewählt wird:
TV.OnEvent("ItemSelect", TV_ItemSelect)

; Gui_Size aufrufen, wenn die Fenstergröße geändert wird:
MeineGui.OnEvent("Size", Gui_Size)

; Spaltenbreiten der ListView setzen (dies ist optional):
Spalte2Breite := 70  ; Kürzen, um nur den YYYYMMDD-Teil anzuzeigen.
LV.ModifyCol(1, ListViewBreite - Spalte2Breite - 30)  ; Platz für den vertikalen Scrollbalken schaffen.
LV.ModifyCol(2, Spalte2Breite)

; Das Fenster anzeigen. Das Skript wird benachrichtigt, wenn der Benutzer eine gültige Aktion ausführt:
MeineGui.Show()

UnterordnerInBaumEinfügen(Ordner, VerzListe, ElternElementID := 0)
{
    ; Diese Funktion fügt alle Unterordner eines Ordners zur TreeView hinzu
    ; und speichert deren Pfade zusammen mit einer ID in ein Objekt für den späteren Gebrauch.
    ; Sie ruft sich selbst rekursiv auf, um Unterordner in beliebiger Tiefe zu erfassen.
    Loop Files, Ordner "\*.*", "D"  ; Alle Unterordner des Ordners abrufen.
    {
        ElementID := TV.Add(A_LoopFileName, ElternElementID, "Icon4")
        VerzListe[ElementID] := A_LoopFilePath
        VerzListe := UnterordnerInBaumEinfügen(A_LoopFilePath, VerzListe, ElementID)
    }
    return VerzListe
}

TV_ItemSelect(thisCtrl, Element)  ; Diese Funktion wird aufgerufen, wenn ein neues Element ausgewählt wird.
{
    ; Dateien in die ListView einfügen:
    LV.Delete()  ; Alle Zeilen löschen.
    LV.Opt("-Redraw")  ; Performanz verbessern durch Abschalten von Redraw beim Laden.
    GesamtGröße := 0  ; Für die untere Schleife initialisieren.
    Loop Files, VerzListe[Element] "\*.*"  ; Nur die Dateien in der ListView anzeigen.
    {
        LV.Add(, A_LoopFileName, A_LoopFileTimeModified)
        GesamtGröße += A_LoopFileSize
    }
    LV.Opt("+Redraw")

    ; Die drei Segmente der Statusleiste mit Infos über den aktuell ausgewählten Ordner aktualisieren:
    SB.SetText(LV.GetCount() " Dateien", 1)
    SB.SetText(Round(GesamtGröße / 1024, 1) " KB", 2)
    SB.SetText(VerzListe[Element], 3)
}

Gui_Size(thisGui, MinMax, Breite, Höhe)  ; ListView und TreeView kleiner/größer machen, wenn Benutzer die Fenstergröße ändert.
{
    if MinMax = -1  ; Das Fenster wurde minimiert. Keine Aktion notwendig.
        return
    ; Andernfalls wurde das Fenster kleiner/größer gemacht oder maximiert. Größe der Steuerelemente anpassen.
    TV.GetPos(,, &TV_W)
    TV.Move(,,, Höhe - 30)  ; -30 für StatusBar und Abstände.
    LV.Move(,, Breite - TV_W - 30, Höhe - 30)
}