TreeView [v1.0.44+]

Inhaltsverzeichnis

Einführung und einfaches Beispiel

Eine Baum-Ansicht zeigt eine Hierarchie von Elementen an, indem untergeordnete Elemente unter ihren übergeordneten Elementen eingerückt werden. Das bekannteste Beispiel dafür ist der Navigationsbereich des Explorers.

Eine typische TreeView sieht wie folgt aus:

TreeView

Die Syntax zur Erstellung einer TreeView ist:

Gui, Add, TreeView, Optionen

Das folgende Skript zeigt, wie eine einfache Hierarchie von Elementen erstellt und angezeigt werden kann:

Gui, Add, TreeView
P1 := TV_Add("Erstes Oberelement")
P1C1 := TV_Add("Erstes Unterelement von Oberelement 1", P1)  ; Geben Sie P1 an, um dieses Element unterzuordnen.
P2 := TV_Add("Zweites Oberelement")
P2C1 := TV_Add("Erstes Unterelement von Oberelement 2", P2)
P2C2 := TV_Add("Zweites Unterelement von Oberelement 2", P2)
P2C2C1 := TV_Add("Erstes Unterelement von Unterelement 2", P2C2)

Gui, Show  ; Anzeigen des Fensters mit TreeView.
return

GuiClose:  ; Beendet das Skript, wenn der Benutzer das TreeView-GUI-Fenster schließt.
ExitApp

Optionen und Styles für "Gui, Add, TreeView, Optionen"

AltSubmit: Teilt dem Skript mehr TreeView-Ereignisse als normal mit. Das heißt, dass das g-Label öfters gestartet wird. Siehe TreeView-Benachrichtigungen für Details.

Background: Geben Sie das Wort Background an und fügen Sie direkt danach einen Farbnamen (siehe Farbentabelle) oder einen RGB-Wert (das 0x-Präfix ist optional) ein. Beispiele: BackgroundSilver, BackgroundFFDD99. Fehlt diese Option, gilt als Hintergrundfarbe die Farbe, die im letzten Parameter von Gui, Color definiert wurde (wenn dies nicht der Fall ist, dann die Standard-Hintergrundfarbe vom Betriebssystem). Mit BackgroundDefault kann die Standard-Hintergrundfarbe des Betriebssystems erzwungen werden (in der Regel weiß). Mit GuiControl, +BackgroundDefault, MeineTreeView kann beispielsweise die Standardfarbe wiederhergestellt werden.

Buttons: Geben Sie -Buttons (minus Buttons) an, um die Plus- oder Minuszeichen zu entfernen, die jeweils auf der linken Seite eines Elements mit Unterelementen zu finden sind.

C: Textfarbe. Geben Sie den Buchstaben C an und fügen Sie direkt danach einen Farbnamen (siehe Farbentabelle) oder einen RGB-Wert (das 0x-Präfix ist optional) ein. Beispiele: cRed, cFF2211, c0xFF2211, cDefault.

Checked: Ermöglicht eine CheckBox auf der linken Seite jeden Elements. Beim Hinzufügen eines Elements kann das Wort Check in die Optionen eingefügt werden, damit die CheckBox zu Beginn markiert ist. Der Benutzer kann entweder die CheckBox anklicken oder die Leertaste drücken, um ein Element zu markieren oder demarkieren. Um herauszufinden, welches Element aktuell in der TreeView markiert ist, ruft man TV_GetNext() oder TV_Get() auf.

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

ImageList: Mit dieser Option können Symbole in eine ListView eingefügt werden. Geben Sie das Wort ImageList an und fügen Sie direkt danach eine ImageListID an, die von IL_Create() zurückgegeben wird. Diese Option funktioniert nur beim Erstellen einer TreeView (allerdings hat TV_SetImageList() diese Einschränkung nicht). Hier ein funktionierendes Beispiel:

ImageListID := IL_Create(10)  ; Erstellt eine ImageList für anfänglich 10 Symbole.
Loop 10  ; Lädt die ImageList mit einigen vordefinierten Systemsymbolen.
    IL_Add(ImageListID, "shell32.dll", A_Index)
Gui, Add, TreeView, ImageList%ImageListID%
TV_Add("Elementname", 0, "Icon4")  ; Fügt ein Element in die TreeView ein und gibt ihm ein Ordnersymbol.
Gui Show

Lines: Geben Sie -Lines (minus Lines) an, um die Verbindungslinien zwischen den Ober- und Unterelementen zu entfernen. Das Entfernen solcher Linien verhindert allerdings auch, dass die Plus-/Minuszeichen bei auf oberster Ebene befindlichen Elementen angezeigt werden.

ReadOnly: Geben Sie -ReadOnly (minus ReadOnly) an, um die Texte/Namen aller Elemente editierbar zu machen. Um ein Element zu editieren, wählt man es aus und drückt die F2-Taste (siehe die WantF2-Option unten). Oder klicken Sie das Element einmal an, um es auszuwählen, warten Sie mindestens eine halbe Sekunde und klicken Sie dann das Element nochmals an, um es zu editieren. Das folgende Beispiel zeigt, wie ein Element, nachdem es editiert wurde, in Bezug auf seine Nachbarelemente alphabetisch neu positioniert werden kann:

Gui, Add, TreeView, -ReadOnly gMeinTree
; ...
MeinTree:
if (A_GuiEvent == "e")  ; Der Benutzer ist mit dem Editieren des Elements fertig (das == ist für einen Groß-/Kleinschreibung-sensitiven Vergleich).
    TV_Modify(TV_GetParent(A_EventInfo), "Sort")  ; Funktioniert auch, wenn das Element kein Oberelement hat.
return

R: Reihen-Höhe (bei der Erstellung). Geben Sie den Buchstaben R an und fügen Sie direkt danach die Anzahl der Reihen ein, für die innerhalb des Steuerelements Platz geschaffen werden soll. Zum Beispiel würde R10 das Steuerelement 10 Elemente hoch machen.

WantF2: Geben Sie -WantF2 (minus WantF2) an, um die Möglichkeit zu entfernen, das aktuell ausgewählte Element via F2-Taste zu editieren. Diese Einstellung wird ignoriert, sofern -ReadOnly nicht aktiv ist. Abgesehen von dieser Einstellung erhält das g-Label weiterhin F2-Benachrichtigungen.

(Namenlose numerische Styles): Da die restlichen Styles nur selten verwendet werden, haben sie keine Namen. Siehe Style-Tabelle von TreeView.

Interne Funktionen für TreeView

Alle TreeView-Funktionen agieren mit dem Standard-GUI-Fenster des aktuellen Threads (das mit Gui, 2:Default geändert werden kann). Wenn das Standardfenster weder vorhanden ist noch TreeView-Steuerelemente hat, dann geben alle Funktionen Null zurück, um das Problem zu kennzeichnen.

Wenn das Fenster mehrere TreeView-Steuerelemente hat, agieren die Funktionen standardmäßig mit dem zuletzt hinzugefügten Steuerelement. Um das zu ändern, nutzt man Gui, TreeView, TreeViewName - TreeViewName kann TreeView's zugeordnete Variable, ClassNN (wie vom internen Tool Window Spy gezeigt) oder [in v1.1.04+] HWND sein. Einmal geändert, werden alle vorhandenen und zukünftigen Threads die angegebene TreeView verwenden. [v1.1.23+]: A_DefaultTreeView enthält die aktuelle Einstellung.

Hinzufügen, Modifizieren und Entfernen von Elementen

Daten aus einer TreeView abrufen

Symbole setzen

TV_Add

Fügt ein neues Element zur TreeView hinzu und gibt dessen eindeutige Element-ID-Nummer zurück (oder 0 bei Misserfolg).

TV_Add(Name, OberelementID, Optionen)

Name ist der Anzeigetext des Elements, das auch numerisch sein kann (einschließlich numerische Ausdrücke). OberelementID ist die ID-Nummer des neuen Oberelements (wenn dieser Parameter fehlt oder 0 ist, wird das Element auf der obersten Ebene hinzugefügt). Beim Hinzufügen von sehr vielen Elementen kann man die Performance verbessern, indem man GuiControl, -Redraw, MeineTreeView vor der Operation und GuiControl, +Redraw, MeineTreeView nach der Operation verwendet.

Optionen für TV_Add() und TV_Modify()

Der Optionen-Parameter kann eine Zeichenkette mit null oder mehreren Wörtern aus der unteren Liste sein (Groß-/Kleinschreibung ist egal). Trennen Sie alle Wörter jeweils mit einem Leer- oder Tabulatorzeichen. Um eine Option zu entfernen, muss ein Minuszeichen davor gesetzt werden. Um eine Option hinzuzufügen, lässt man das Vorzeichen weg oder setzt ein Pluszeichen davor.

Bold: Zeigt den Namen des Elements in fetter Schrift an. Mit TV_Modify(ElementID, "-Bold") kann das Element wieder normalisiert werden. [v1.1.30.01+]: Direkt nach dem Wort Bold kann optional eine 0 oder 1 erfolgen, um den Startzustand zu bestimmen.

Check: Zeigt ein Häkchen neben dem Element an (wenn die TreeView CheckBoxen hat). Mit TV_Modify(ElementID, "-Check") kann das Häkchen wieder entfernt werden. Direkt nach dem Wort Check kann optional eine 0 oder 1 erfolgen, um den Startzustand zu bestimmen. In diesem Fall ist "Check" das gleiche wie "Check" . VarEnhältEins (der hier verwendete Punkt ist ein Verkettungsoperator).

Expand: Klappt das Element auf, um seine Unterelemente anzuzeigen (falls vorhanden). Mit TV_Modify(ElementID, "-Expand") kann das Element wieder zugeklappt werden. Wenn es keine Unterelemente gibt, wird TV_Modify() eine 0 anstelle der Element-ID zurückgeben. TV_Add() hingegen kennzeichnet das Element als aufgeklappt, für den Fall, dass später Unterelemente hinzugefügt werden. Im Gegensatz zu "Select" (siehe unten) bewirkt das Aufklappen eines Elements nicht, dass sein Oberelement auch automatisch mit aufgeklappt wird. Direkt nach dem Wort Expand kann optional eine 0 oder 1 erfolgen, um den Startzustand zu bestimmen. In diesem Fall ist "Expand" das gleiche wie "Expand" . VarEnhältEins.

First | Sort | N: Diese Optionen gelten nur für TV_Add(). Sie bestimmen die Position des neuen Elements relativ zu seinen Nachbarelementen (Nachbarelemente sind alle Elemente auf gleicher Ebene). Fehlen diese Optionen, wird das neue Element als letztes/unterstes Nachbarelement eingefügt. Verwenden Sie ansonsten First, um das Element als erstes/oberstes Nachbarelement einzufügen, oder Sort, um das Element in Bezug auf seine Nachbarelemente in alphabetischer Reihenfolge einzufügen. Gibt man einen reinen Integer-Wert an (N), wird er als ID-Nummer des Nachbarelements angesehen, wo danach das neue Element eingefügt werden soll (wenn Integer N nur als einzige Option vorhanden ist, muss er nicht in Anführungszeichen gesetzt werden).

Icon: Geben Sie das Wort Icon und direkt danach eine Symbolnummer an, um ein Symbol auf der linken Seite des Elementnamens anzuzeigen. Fehlt diese Option, wird das erste Symbol in der ImageList verwendet. Um ein leeres Symbol darzustellen, fügt man eine Nummer ein, die größer ist als die Anzahl der Symbole in der ImageList. Wenn das Steuerelement keine ImageList hat, werden weder Symbole angezeigt noch Speicher für so eins reserviert.

Select: Wählt das Element aus. Da jeweils nur ein einziges Element ausgewählt sein kann, wird jedes zuvor ausgewählte Element automatisch abgewählt. Darüber hinaus wird jedes Oberelement des neu ausgewählten Elements aufgeklappt, falls erforderlich. Mit TV_GetSelection() kann die aktuelle Auswahl herausgefunden werden.

Sort: Bei TV_Modify() wird diese Option die Unterelemente des angegebenen Elements in alphabetischer Reihenfolge sortieren. Mit TV_Modify(0, "Sort") können stattdessen alle auf oberster Ebene befindliche Elemente sortiert werden. Wenn es keine Unterelemente gibt, wird eine 0 anstelle der ID des modifizierten Elements zurückgegeben.

Vis: Sorgt dafür, dass das Element durch Scrollen der TreeView und/oder Aufklappen seiner Oberelemente sichtbar bleibt, falls erforderlich.

VisFirst: Das gleiche wie oben, außer dass die TreeView zusätzlich gescrollt wird, so dass das Element ganz oben erscheint, wenn möglich. Diese Option ist in Verbindung mit TV_Modify() in der Regel effektiver als mit TV_Add().

TV_Modify

Modifiziert die Attribute und/oder den Namen eines Elements.

TV_Modify(ElementID , Optionen, NeuerName)

Sie gibt bei Erfolg die ID des Elements und bei Misserfolg (oder teilweisem Misserfolg) eine 0 zurück. Sollte nur der erste Parameter vorhanden sein, wird das Element ausgewählt. Wenn NeuerName fehlt, bleibt der aktuelle Name unverändert. Eine Liste von den Optionen finden Sie weiter unten.

TV_Delete

Entfernt ein bestimmtes Element oder alle Elemente.

TV_Delete(ElementID)

Wenn ElementID fehlt, werden alle Elemente in der TreeView gelöscht. Ansonsten wird nur die angegebene ElementID gelöscht. Sie gibt bei Erfolg eine 1 und bei Misserfolg eine 0 zurück.

TV_GetSelection

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

TV_GetSelection()

TV_GetCount

Gibt die Anzahl aller Elemente im Steuerelement zurück.

TV_GetCount()

Diese Funktion gibt den Wert ohne Verzögerung zurück, weil das Steuerelement die Zählung immer im Blick behält.

TV_GetParent

Gibt das Oberelement eines bestimmten Elements als Element-ID zurück.

TV_GetParent(ElementID)

Auf oberster Ebene befindliche Elemente haben keine übergeordneten Elemente und geben daher eine 0 zurück.

TV_GetChild

Gibt die ID-Nummer des ersten/obersten Unterelements eines bestimmten Elements zurück (oder 0, wenn es keine gibt).

TV_GetChild(OberelementID)

TV_GetPrev

Gibt die ID-Nummer des Nachbarelements zurück, das sich über einem bestimmten Element befindet (oder 0, wenn kein Element vorhanden ist).

TV_GetPrev(ElementID)

TV_GetNext

Gibt die ID-Nummer des nächsten Elements zurück, das sich unter einem bestimmten Element befindet (oder 0, wenn kein Element vorhanden ist).

TV_GetNext(ElementID, Elementtyp)

Folgende Modi sind verfügbar:

  1. Fehlen alle Parameter, wird die ID-Nummer des ersten/obersten Elements in der TreeView zurückgegeben (oder 0, wenn kein Element vorhanden ist).
  2. Wenn nur der ElementID-Parameter vorhanden ist, wird die ID-Nummer des Nachbarelements zurückgegeben, das sich unter dem angegebenen Element befindet (oder 0, wenn kein Element vorhanden ist). Wenn ElementID eine 0 ist, wird die ID-Nummer des ersten/obersten Elements in der TreeView zurückgegeben (oder 0, wenn kein Element vorhanden ist).
  3. Wenn Elementtyp "Full" oder "F" ist, wird das nächste Element abgerufen, unabhängig seines Verhältnisses zum angegebenen Element. Auf diese Weise kann das Skript die Baumstruktur Element für Element durchgehen. Zum Beispiel:
    ElementID := 0  ; Beginnt die Suche beim ersten Element.
    Loop
    {
        ElementID := TV_GetNext(ElementID, "Full")  ; Ersetzen Sie "Full" mit "Checked", um alle markierten Elemente zu finden.
        if not ElementID  ; Keine weiteren Elemente verfügbar.
            break
        TV_GetText(Elementtext, ElementID)
        MsgBox Das nächste Element ist %ElementID%, das den Text "%Elementtext%" beinhaltet.
    }
  4. Wenn Elementtyp entweder "Check", "Checked" oder "C" ist, erfolgt das gleiche Verhalten wie oben, außer dass Elemente ohne Häkchen übersprungen werden. Auf diese Weise können alle markierten Elemente in der TreeView einzeln abgerufen werden.

TV_GetText

Ermittelt den Text/Namen von einer bestimmten ElementID und speichert ihn in AusgabeVar.

TV_GetText(AusgabeVar, ElementID)

Wenn der Text länger als 8191 ist, werden nur die ersten 8191 Zeichen abgerufen. Bei Erfolg gibt die Funktion die ID des Elements zurück. Bei Misserfolg eine 0 (zudem wird AusgabeVar leer gemacht).

TV_Get

Gibt die ID-Nummer eines bestimmten Elements zurück, sofern es das angegebene Attribut hat.

TV_Get(ElementID, Attribut)

Wenn das angegebene Element das angegebene Attribut hat, wird seine ElementID zurückgegeben. Ansonsten wird eine 0 zurückgegeben. Geben Sie für Attribut "E", "Expand" oder "Expanded" an, um zu ermitteln, ob das Element gerade aufgeklappt ist (also wenn die Unterelemente angezeigt werden); geben Sie "C", "Check" oder "Checked" an, um zu ermitteln, ob das Element ein Häkchen hat; geben Sie "B" oder "Bold" an, um zu ermitteln, ob das Element gerade in fetter Schrift dargestellt wird.

Hinweis: Da eine IF-Anweisung jeden Wert ungleich 0 als "wahr" ansieht, sind die folgenden zwei Zeilen funktionsgemäß identisch: if TV_Get(ElementID, "Checked") = ElementID and if TV_Get(ElementID, "Checked").

TV_SetImageList [v1.1.02+]

Setzt oder ersetzt die ImageList von TreeView.

TV_SetImageList(ImageListID , Symboltyp)

ImageListID ist die Nummer, die von einem vorherigen IL_Create()-Aufruf zurückgegeben wurde. Symboltyp wird normalerweise weggelassen - in diesem Fall gilt standardmäßig 0. Geben Sie ansonsten eine 2 für Statussymbole an (Statussymbole werden nur via SendMessage unterstützt). Bei Erfolg gibt TV_SetImageList() die ImageListID zurück, die zuvor mit der TreeView verbunden wurde (oder eine 0, wenn dies nicht der Fall ist). Jede nicht mehr benötigte ImageList kann mit IL_Destroy(ImageListID) zerstört werden.

g-Label-Benachrichtigungen (Primär)

Ein g-Label wie gMeineSubroutine kann in den Optionen des Steuerelements eingefügt werden. Diese Option lässt das Label MeineSubroutine automatisch starten, wann immer der Benutzer eine Aktion im Steuerelement durchführt. Diese Subroutine kann auf die internen Variablen A_Gui und A_GuiControl zurückgreifen, um herauszufinden, welches Fenster oder TreeView das Ereignis erzeugt hat. Noch wichtiger ist, dass sie auf A_GuiEvent zurückgreifen kann, die eine der folgenden Zeichenketten oder Buchstaben enthalten kann (für die Kompatibilität mit zukünftigen Versionen sollte ein Skript nicht davon ausgehen, dass das die einzigen möglichen Werte sind):

DoubleClick: Der Benutzer hat ein Element doppelt angeklickt. Die Variable A_EventInfo enthält die ID des Elements.

D: Der Benutzer hat den Versuch gestartet, ein Element zu verschieben (es gibt derzeit keine interne Unterstützung für das Verschieben von Elementen). Die Variable A_EventInfo enthält die ID des Elements.

d (kleingeschriebenes D): Das gleiche wie oben, außer dass das Verschieben mit Rechtsklick begonnen wurde, statt mit Linksklick.

e (kleingeschriebenes E): Der Benutzer ist mit dem Editieren des Elements fertig (der Benutzer kann es nur editieren, wenn -ReadOnly in den Optionen vorhanden ist). Die Variable A_EventInfo enthält die ID des Elements.

S: Ein neues Element wurde ausgewählt, entweder vom Benutzer oder vom Skript selbst. Die Variable A_EventInfo enthält die ID des neu ausgewählten Elements.

g-Label-Benachrichtigungen (Sekundär)

Wenn die TreeView das Wort AltSubmit in ihren Optionen hat, wird ihr g-Label öfters aufgerufen und A_GuiEvent folgende zusätzliche Werte enthalten:

Normal: Der Benutzer hat ein Element mit der linken Maustaste angeklickt. Die Variable A_EventInfo enthält die ID des Elements.

RightClick: Der Benutzer hat ein Element mit der rechten Maustaste angeklickt. Die Variable A_EventInfo enthält die ID des Elements. In den meisten Fällen sollte man verhindern, ein Menü im Zusammenhang mit dieser Meldung anzeigen zu lassen. Ein GuiContextMenu-Label ist dafür besser geeignet, weil es auch die MENÜ-Taste erkennt. Zum Beispiel:

GuiContextMenu:  ; Startet, wenn man einen Rechtsklick macht oder die MENÜ-Taste drückt.
if (A_GuiControl <> "MeineTreeView")  ; Diese Überprüfung ist optional. Sie zeigt das Menü nur an, wenn Klicks innerhalb der ListView gemacht werden.
    return
; Zeigt das Menü bei den Koordinaten A_GuiX und A_GuiY an. Diese Koordinaten
; sind auch dann korrekt, wenn der Benutzer die MENÜ-Taste drückt:
Menu, MeinKontextmenü, Show, %A_GuiX%, %A_GuiY%
return

E: Der Benutzer hat mit dem Editieren des Elements begonnen (der Benutzer kann es nur editieren, wenn -ReadOnly in den Optionen vorhanden ist). Die Variable A_EventInfo enthält die ID des Elements.

F: Die TreeView hat den Tastaturfokus erhalten.

f: Die TreeView hat den Tastaturfokus verloren.

K: Der Benutzer hat eine Taste gedrückt, während die TreeView den Fokus hat. A_EventInfo enthält den virtuellen Tastencode der Taste - eine Zahl zwischen 1 und 255. Wenn die Taste alphabetisch ist, kann sie bei den meisten Tastaturbelegungen via Chr(A_EventInfo) in das entsprechende Zeichen umgewandelt werden. F2-Eingaben werden erfasst, unabhängig von WantF2. Enter-Eingaben werden hingegen nicht erfasst; um sie dennoch zu erfassen, nutzt man eine Standardschaltfläche, wie unten beschrieben.

+ (Pluszeichen): Ein Element wurde aufgeklappt, um seine Unterelemente anzuzeigen. Die Variable A_EventInfo enthält die ID des Elements.

- (Minuszeichen): Ein Element wurde zugeklappt, um seine Unterelemente zu verstecken. Die Variable A_EventInfo enthält die ID des Elements.

Bemerkungen

Der Befehl Gui Submit hat keine Auswirkung auf ein TreeView-Steuerelement. Demzufolge kann das Skript die zugeordnete Variable der TreeView zum Speichern von weiteren Daten verwenden (falls vorhanden), um andere Daten zu speichern, ohne befürchten zu müssen, dass sie jemals überschrieben wird.

Um die Eingabe einer Enter-Taste bei einer fokussierten TreeView zu erfassen, nutzt man eine Standardschaltfläche (die man natürlich verstecken kann). Zum Beispiel:

Gui, Add, Button, Hidden Default, OK
...
ButtonOK:
GuiControlGet, FokussiertesSteuerelement, FocusV
if (FokussiertesSteuerelement <> "MeineTreeView")
    return
MsgBox % "Sie haben ENTER gedrückt. Die ID des ausgewählten Elements ist " . TV_GetSelection()
return

Neben der Möglichkeit, mit der Tastatur von Element zu Element zu navigieren, könnte der Benutzer auch eine inkrementelle Suche durchführen, indem er die ersten Zeichen eines Elementnamens eingibt. Dabei springt die Auswahl auf das nächst passende Element.

Zwar kann man ein Text mit beliebiger Länge in den Elementen einer TreeView speichern, allerdings werden nur die ersten 260 Zeichen angezeigt.

Zwar kann die TreeView theoretisch maximal 65.536 Elemente haben, allerdings ist der Performance-Verlust beim Hinzufügen neuer Elemente bereits früher spürbar. Diesen Verlust kann man etwas reduzieren, indem man sich den Hinweis bzgl. des Neuzeichnens in TV_Add anschaut.

Im Gegensatz zu den ImageLists einer ListView werden ImageLists einer TreeView nicht automatisch zerstört, wenn die TreeView zerstört wird. Demzufolge sollte ein Skript IL_Destroy(ImageListID) nach dem Zerstören eines TreeView-Fensters aufrufen, wenn die ImageList nicht weiter benötigt wird. Dies ist jedoch nicht erforderlich, wenn das Skript bald beendet wird, da alle ImageLists automatisch zu diesem Zeitpunkt zerstört werden.

Ein Skript kann mehr als ein TreeView pro Fenster erstellen. Wie man mit einer anderen TreeView anstelle der Standard-TreeView agieren kann, erfahren Sie unter Interne Funktionen.

GuiControl kann z. B. genutzt werden, um eine TreeView größer/kleiner zu machen, zu verstecken, oder um die Schrift einer TreeView zu ändern.

Tree View eXtension (TVX) erweitert TreeViews mit der Möglichkeit, Elemente zu verschieben, einzufügen und zu löschen. Siehe dazu www.autohotkey.com/forum/topic19021.html.

Siehe auch

ListView, Andere Steuerelemente, Gui, GuiContextMenu, GuiControl, GuiControlGet, Style-Tabelle von TreeView

Beispiele

Beispiel #1

Das folgende Skript ist aufwendiger als das Beispiel ganz oben. Es erstellt und zeigt eine TreeView an, die alle Startmenüordner von allen Benutzern enthält. Wenn der Benutzer einen Ordner auswählt, wird sein Inhalt auf der rechten Seite angezeigt (wie beim Windows Explorer). Darüber hinaus zeigt ein StatusBar-Steuerelement Informationen über den aktuell ausgewählten Ordner an:

; Der folgende Ordner wird der Stammordner für die TreeView. Beachten Sie, dass das Laden lange dauern kann,
; wenn ein komplettes Laufwerk wie C:\ angegeben ist:
Stammordner := A_StartMenuCommon
TreeViewBreite := 280
ListViewBreite := A_ScreenWidth - TreeViewBreite - 30

; Erlaubt dem Benutzer, das Fenster zu maximieren oder dessen Größe beliebig anzupassen:
Gui +Resize

; Erstellt eine ImageList und fügt einige vordefinierte Systemsymbole ein:
ImageListID := IL_Create(5)
Loop 5 
    IL_Add(ImageListID, "shell32.dll", A_Index)
; Erstellt eine TreeView und ListView, um ein Windows Explorer nachzuahmen:
Gui, Add, TreeView, vMeineTreeView r20 w%TreeViewBreite% gMeineTreeView ImageList%ImageListID%
Gui, Add, ListView, vMeineListView r20 w%ListViewBreite% x+10, Name|Bearbeitet

; Setzt die Spaltenbreiten der ListView (optional):
Spalte2Breite := 70  ; Kürzen, um nur den YYYYMMDD-Teil sichtbar zu machen.
LV_ModifyCol(1, ListViewBreite - Spalte2Breite - 30)  ; Genug Platz für vertikalen Scrollbalken machen.
LV_ModifyCol(2, Spalte2Breite)

; Erstellt eine Statusleiste, um Infos über die Anzahl an Dateien und ihre Gesamtgrößen anzuzeigen:
Gui, Add, StatusBar
SB_SetParts(60, 85)  ; Erstellt drei Bereiche in der Leiste (der dritte Bereich füllt die restliche Breite).

; Fügt Ordner und deren Unterordner in die Baumstruktur ein. Zeigt ein Ladebildschirm an, wenn es etwas länger dauert:
SplashTextOn, 200, 25, Beispiel mit TreeView und StatusBar, Lade Baumstruktur ...
UnterordnerInBaumEinfügen(Stammordner)
SplashTextOff

; Zeigt das Fenster an und geht in den Leerlauf. Das Betriebssystem benachrichtigt das Skript, wenn der Benutzer eine berechtigte Aktion durchführt:
Gui, Show,, %Stammordner%  ; Zeigt das Quellverzeichnis (Stammordner) in der Titelleiste an.
return

UnterordnerInBaumEinfügen(Ordner, OberelementID = 0)
{
    ; Diese Funktion fügt alle Unterordner eines bestimmten Ordners in die TreeView ein.
    ; Außerdem ruft sie sich selbst rekursiv auf, um Unterordner in jeder Ebene zu sammeln.
    Loop %Ordner%\*.*, 2  ; Ermittelt alle Unterordner des Ordners.
        UnterordnerInBaumEinfügen(A_LoopFileFullPath, TV_Add(A_LoopFileName, OberelementID, "Icon4"))
}

MeineTreeView:  ; Diese Subroutine behandelt Benutzeraktionen (beispielsweise Klicken).
if (A_GuiEvent <> "S")  ; also ein Ereignis anders als "das Auswählen eines neuen Baumelements".
    return  ; Nichts tun.
; Fülle ansonsten die ListView mit dem Inhalt des ausgewählten Ordners.
; Bestimme zuerst den vollständigen Pfad des ausgewählten Ordners:
TV_GetText(AusgewählterElementtext, A_EventInfo)
OberelementID := A_EventInfo
Loop  ; Vollständigen Pfad zum ausgewählten Ordner zusammensetzen.
{
    OberelementID := TV_GetParent(OberelementID)
    if not OberelementID  ; Keine weiteren Oberelemente.
        break
    TV_GetText(Oberelementtext, OberelementID)
    AusgewählterElementtext := Oberelementtext "\" AusgewählterElementtext
}
AusgewählterVollpfad := Stammordner "\" AusgewählterElementtext

; Dateien in die ListView einfügen:
LV_Delete()  ; Alle Reihen leeren.
GuiControl, -Redraw, MeineListView  ; Verbessert die Performance durch Deaktivieren der Neuzeichnung während des Ladens.
Dateienanzahl := 0  ; Vorher für die untere Schleife initialisieren.
Gesamtgröße := 0
Loop %AusgewählterVollpfad%\*.*  ; Der Einfachheit halber werden die Ordner weggelassen, nur um die Dateien in der ListView anzuzeigen.
{
    LV_Add("", A_LoopFileName, A_LoopFileTimeModified)
    Dateienanzahl += 1
    Gesamtgröße += A_LoopFileSize
}
GuiControl, +Redraw, MeineListView

; Aktualisiert die drei Bereiche der Statusleiste, um Infos über den aktuell ausgewählten Ordner anzuzeigen:
SB_SetText(Dateienanzahl . " Dateien", 1)
SB_SetText(Round(Gesamtgröße / 1024, 1) . " KB", 2)
SB_SetText(AusgewählterVollpfad, 3)
return

GuiSize:  ; Vergrößert/Verkleinert die ListView und TreeView, wenn der Benutzer das Fenster skaliert.
if (A_EventInfo = 1)  ; Das Fenster wurde minimiert. Keine Aktion notwendig.
    return
; Ansonsten wurde die Größe des Fensters geändert oder maximiert. Die Größe des Steuerelements anpassen.
GuiControl, Move, MeineTreeView, % "H" . (A_GuiHeight - 30)  ; -30 für Statusleiste und Abstände.
GuiControl, Move, MeineListView, % "H" . (A_GuiHeight - 30) . " W" . (A_GuiWidth - TreeViewBreite - 30)
return

GuiClose:  ; Beendet das Skript, wenn der Benutzer das TreeView-GUI-Fenster schließt.
ExitApp