TreeView [v1.0.44+]

Inhaltsverzeichnis

Einführung und einfaches Beispiel

Eine Baumansicht (engl. TreeView) wird verwendet, um eine Hierarchie von mehreren ineinander verschachtelten Elementen darzustellen. 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:

Gui, Add, TreeView, Optionen

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

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

Gui, Show  ; Das Fenster und dessen TreeView anzeigen.
return

GuiClose:  ; Skript beenden, wenn der Benutzer die GUI der TreeView schließt.
ExitApp

Optionen und Styles für den Optionen-Parameter

AltSubmit: Teilt dem Skript mehr TreeView-Ereignisse als normal mit. Mit anderen Worten, das g-Label wird häufiger gestartet. Weitere Informationen finden Sie unter TreeView-Benachrichtigungen.

Background: Geben Sie das Wort Background an, unmittelbar gefolgt von einem Farbnamen (siehe Farbentabelle) oder RGB-Wert (mit oder ohne 0x-Präfix). Beispiele: BackgroundSilver, BackgroundFFDD99. Wenn diese Option nicht vorhanden ist, verwendet die TreeView als Hintergrundfarbe standardmäßig die Farbe, die im letzten Parameter von Gui Color definiert ist (wenn keine definiert ist, dann 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 GuiControl, +BackgroundDefault, MeineTreeView wiederhergestellt werden.

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

C: Textfarbe. 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.

Checked: Stellt eine CheckBox auf der linken Seite jedes Elements bereit. Geben Sie beim Hinzufügen eines Elements das Wort Check in den Optionen an, um die CheckBox vorerst im abgehakten Zustand anzuzeigen. Der Benutzer kann die CheckBox anklicken oder die Leertaste drücken, um ein Häkchen zu setzen oder zu entfernen. Um herauszufinden, welche Elemente aktuell in der TreeView abgehakt sind, rufen Sie TV_GetNext() oder TV_Get() auf.

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

ImageList: Ermöglicht das Hinzufügen von Symbolen zu einer TreeView. Geben Sie das Wort ImageList an, unmittelbar gefolgt von der ImageList-ID, die von einem vorherigen IL_Create()-Aufruf zurückgegeben wurde. Diese Option funktioniert nur beim Erstellen einer TreeView (TV_SetImageList() unterliegt nicht dieser Einschränkung). Hier ein funktionierendes Beispiel:

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)
Gui, Add, TreeView, ImageList%ImageListID%
TV_Add("Elementname", 0, "Icon4")  ; Element zur TreeView hinzufügen und ein Ordnersymbol zuweisen.
Gui Show

Lines: Geben Sie -Lines (minus Lines) an, um die Verbindungslinien zwischen den Eltern- und Kindelementen 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 wie folgt unter seinen Geschwisterelementen alphabetisch neu positioniert werden:

Gui, Add, TreeView, -ReadOnly gMeinBaum  ; Für gMeinBaum siehe TreeView-g-Label.
; ...
MeinBaum:
if (A_GuiEvent == "e")  ; Der Benutzer hat aufgehört, ein Element zu editieren (== ermöglicht einen Groß-/Kleinschreibung-sensitiven Vergleich).
    TV_Modify(TV_GetParent(A_EventInfo), "Sort")  ; Funktioniert auch, wenn das Element kein Elternelement hat.
return

R: Höhe in Zeilen (beim Erstellen). Geben Sie den Buchstaben R an, unmittelbar gefolgt von der Anzahl der Zeilen, für die innerhalb des Steuerelements Platz geschaffen werden soll. Zum Beispiel bewirkt R10, dass das Steuerelement 10 Elemente hoch gemacht wird.

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. Unabhängig von dieser Einstellung erhält das g-Label weiterhin F2-Benachrichtigungen.

(Namenlose numerische Styles): Andere Styles als die oben genannten werden nur selten verwendet und haben daher keine Namen. Eine vollständige Liste finden Sie unter TreeView-Styles.

Interne TreeView-Funktionen

Alle folgenden TreeView-Funktionen arbeiten mit dem Standard-GUI-Fenster des aktuellen Threads (was z.B. mit Gui, 2:Default geändert werden kann). Wenn das Standardfenster nicht existiert oder keine TreeView-Steuerelemente hat, geben alle Funktionen Null zurück, um das Problem zu kennzeichnen.

Wenn das Fenster mehr als ein TreeView-Steuerelement hat, arbeiten die Funktionen standardmäßig mit dem zuletzt hinzugefügten. Um dies zu ändern, verwenden Sie Gui, TreeView, TreeViewName, wobei TreeViewName entweder der Name der zugeordneten Variable, die ClassNN-Bezeichnung (wie vom internen Tool "Window Spy" angezeigt) oder in [v1.1.04+] die HWND-Nummer (eindeutige ID) der TreeView ist. Einmal geändert, werden alle existierenden und zukünftigen Threads die angegebene TreeView verwenden. [v1.1.23+]: A_DefaultTreeView enthält die aktuelle Einstellung.

Elementfunktionen:

Abruffunktionen:

Sonstige Funktionen:

TV_Add

Fügt ein neues Element zur TreeView hinzu.

ElementID := TV_Add(Name, ElternElementID, Optionen)

Parameter

Name

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

ElternElementID

Wenn leer oder 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

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"). [v1.1.30.01+]: 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 CheckBoxen 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 Kindelemente (falls vorhanden) anzuzeigen. Um das Element später wieder zuzuklappen, verwenden Sie TV_Modify(ElementID, "-Expand"). Wenn es keine Kindelemente hat, gibt TV_Modify() 0 anstelle der Element-ID zurück. TV_Add() hingegen markiert das Element als aufgeklappt, falls später noch Kindelemente 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 TV_Add(). 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 TV_GetSelection().

Sort: In Verbindung mit TV_Modify() bewirkt diese Option, dass die Kindelemente 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 Kindelemente 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 TV_Modify() grundsätzlich effektiver als mit TV_Add().

Rückgabewert

Bei Erfolg gibt diese Funktion 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 GuiControl, -Redraw, MeineTreeView, bevor Sie die Elemente hinzufügen, und danach GuiControl, +Redraw, MeineTreeView.

TV_Modify

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

ElementID := TV_Modify(ElementID , Optionen, NeuerName)

Parameter

ElementID

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

Optionen

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

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

Rückgabewert

Bei Erfolg gibt diese Funktion die ID des Elements zurück. Bei Misserfolg (oder teilweisem Misserfolg) gibt sie 0 zurück.

TV_Delete

Löscht ein bestimmtes Element oder alle Elemente.

IstGelöscht := TV_Delete(ElementID)

Parameter

ElementID

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

Rückgabewert

Bei Erfolg gibt diese Funktion 1 (true) zurück. Bei Misserfolg gibt sie 0 (false) zurück.

TV_GetSelection

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

ElementID := TV_GetSelection()

Rückgabewert

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

TV_GetCount

Gibt die Gesamtzahl der Elemente im Steuerelement zurück.

Anzahl := TV_GetCount()

Rückgabewert

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

TV_GetParent

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

ElternElementID := TV_GetParent(ElementID)

Parameter

ElementID

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

Rückgabewert

Diese Funktion 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.

TV_GetChild

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

KindElementID := TV_GetChild(ElementID)

Parameter

ElementID

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

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

TV_GetPrev

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

VorherigesElementID := TV_GetPrev(ElementID)

Parameter

ElementID

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

Rückgabewert

Diese Funktion 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.

TV_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

Wenn leer oder 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

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 abgehakte Element ab.

Rückgabewert

Diese Funktion 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 abgehakten Elemente zu finden.
    if not ElementID  ; Keine weiteren Elemente verfügbar.
        break
    TV_GetText(ElementText, ElementID)
    MsgBox Das nächste Element ist %ElementID% und enthält "%ElementText%".
}

TV_GetText

Ruft den Text/Namen eines bestimmten Elements ab.

ElementID := TV_GetText(AusgabeVar, ElementID)

Parameter

AusgabeVar

Name der Ausgabevariable, in der der abgerufene Text gespeichert werden soll. Es werden nur bis zu 8191 Zeichen abgerufen. Bei Misserfolg wird sie leer gemacht.

ElementID

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

Rückgabewert

Bei Erfolg gibt diese Funktion die ID des Elements zurück. Bei Misserfolg gibt sie 0 zurück.

TV_Get

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

ElementID := TV_Get(ElementID, Attribut)

Parameter

ElementID

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

Attribut

Geben Sie eine der folgenden Zeichenketten an:

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

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

B oder Bold: Das Element wird gerade fett dargestellt.

Rückgabewert

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").

TV_SetImageList [v1.1.02+]

Setzt oder ersetzt eine ImageList zur Darstellung von Symbolen.

VorherigeImageListID := TV_SetImageList(ImageListID , SymbolTyp)

Parameter

ImageListID

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

SymbolTyp

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

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

G-Label-Benachrichtigungen (Primär)

Es ist möglich, ein g-Label wie z.B. gMeineSubroutine in den Optionen des Steuerelements anzugeben. Dadurch wird jedes Mal, wenn der Benutzer eine Aktion im Steuerelement ausführt, das Label MeineSubroutine gestartet. Diese Subroutine kann die internen Variablen A_Gui und A_GuiControl verwenden, um zu ermitteln, welches Fenster und welche TreeView für das Ereignis verantwortlich waren. Noch wichtiger ist, dass sie A_GuiEvent verwenden kann, die eine der folgenden Zeichenketten oder Buchstaben enthält (aus Kompatibilitätsgründen mit zukünftigen Versionen sollte ein Skript nicht davon ausgehen, dass das die einzig möglichen Werte sind):

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

D: Der Benutzer hat begonnen, ein Element via Maus zu ziehen (derzeit wird das Ziehen von Elementen intern nicht unterstützt). Die interne Variable A_EventInfo enthält die ID des Elements.

d (kleines D): Dasselbe wie oben, außer dass beim Ziehen die rechte statt linke Maustaste verwendet wurde.

e (kleines E): Der Benutzer hat aufgehört, ein Element zu editieren (der Benutzer kann Elemente nur editieren, wenn -ReadOnly in den Optionen der TreeView vorhanden ist). Die interne Variable A_EventInfo enthält die ID des Elements.

S: Ein neues Element wurde ausgewählt, entweder durch den Benutzer oder durch das Skript selbst. Die interne Variable A_EventInfo enthält die ID des neuen Elements.

G-Label-Benachrichtigungen (Sekundär)

Wenn das Wort AltSubmit in den Optionen der TreeView vorhanden ist, wird das g-Label häufiger gestartet und A_GuiEvent kann die folgenden zusätzlichen Werte enthalten:

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

RightClick: Der Benutzer hat ein Element mit der rechten Maustaste angeklickt. Die interne Variable A_EventInfo enthält die ID des Elements. In den meisten Fällen ist es ratsam, kein Kontextmenü als Reaktion auf dieses Ereignis anzuzeigen. Verwenden Sie stattdessen das GuiContextMenu-Label, da es auch die MENÜ-Taste erkennt. Zum Beispiel:

GuiContextMenu:  ; Startet bei Rechtsklick oder Drücken der MENÜ-Taste.
if (A_GuiControl != "MeineTreeView")  ; Diese Überprüfung ist optional. Das Menü wird nur für Klicks innerhalb der TreeView angezeigt.
    return
; Das Menü auf den Koordinaten A_GuiX und A_GuiY anzeigen. 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 begonnen, ein Element zu editieren (der Benutzer kann Elemente nur editieren, wenn -ReadOnly in den Optionen der TreeView vorhanden ist). Die interne Variable A_EventInfo enthält die ID des Elements.

F: Die TreeView hat den Tastaturfokus erhalten.

f (kleines F): Die TreeView hat den Tastaturfokus verloren.

K: Der Benutzer hat eine Taste gedrückt, während die TreeView den Fokus hatte. 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 übersetzt werden. F2 wird unabhängig von WantF2 erfasst. Enter hingegen wird nicht erfasst; um es zu erfassen, verwenden Sie eine Standardschaltfläche, wie unten beschrieben.

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

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

Bemerkungen

Der Befehl Gui Submit funktioniert nicht mit einem TreeView-Steuerelement. Demzufolge kann die zugeordnete Variable der TreeView (falls vorhanden) verwendet werden, um andere Daten zu speichern, ohne befürchten zu müssen, dass diese jemals überschrieben werden.

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

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

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 TV_Add() beschriebenen Tipp bzgl. Redraw.

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.

Ein Skript kann mehr als eine TreeView pro Fenster erstellen. Um mit einer anderen TreeView zu arbeiten, siehe interne Funktionen.

Mit GuiControl kann eine TreeView z.B. größer/kleiner gemacht, versteckt oder mit einer anderen Schrift versehen werden.

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

ListView, Andere Steuerelemente, Gui, GuiContextMenu, GuiControl, GuiControlGet, TreeView-Styles

Beispiele

Das folgende Beispiel ist ein lauffähiges Skript, das umfangreicher ist als das obige Beispiel. 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_StartMenuCommon
TreeViewBreite := 280
ListViewBreite := A_ScreenWidth - TreeViewBreite - 30

; Dem Benutzer erlauben, das Fenster zu maximieren oder dessen Größe zu ändern:
Gui +Resize

; 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:
Gui, Add, TreeView, vMeineTreeView r20 w%TreeViewBreite% gMeineTreeView ImageList%ImageListID%
Gui, Add, ListView, vMeineListView r20 w%ListViewBreite% x+10, Name|Änderungsdatum

; 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)

; Statusleiste erstellen, um Anzahl der Dateien und Gesamtgröße anzuzeigen:
Gui, 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:
SplashTextOn, 200, 25, TreeView-StatusBar-Beispiel, Lade Baumstruktur...
UnterordnerInBaumEinfügen(TreeRoot)
SplashTextOff

; Das Fenster anzeigen und in den Leerlauf gehen. Das Skript wird benachrichtigt, wenn der Benutzer eine gültige Aktion ausführt:
Gui, Show,, %TreeRoot%  ; Root-Ordner in der Titelleiste anzeigen.
return

UnterordnerInBaumEinfügen(Ordner, ElternElementID = 0)
{
    ; Diese Funktion fügt alle Unterordner eines Ordners zur TreeView hinzu.
    ; Sie ruft sich selbst rekursiv auf, um Unterordner in beliebiger Tiefe zu erfassen.
    Loop %Ordner%\*.*, 2  ; Alle Unterordner des Ordners abrufen.
        UnterordnerInBaumEinfügen(A_LoopFileFullPath, TV_Add(A_LoopFileName, ElternElementID, "Icon4"))
}

MeineTreeView:  ; Diese Subroutine verarbeitet Benutzeraktionen (z.B. Klicken).
if (A_GuiEvent != "S")  ; Ein anderes Ereignis als "Neues Baumelement auswählen".
    return  ; Nichts tun.
; Andernfalls die ListView mit dem Inhalt des ausgewählten Ordners füllen.
; Zuerst den vollständigen Pfad des ausgewählten Ordners ermitteln:
TV_GetText(AusgewähltesElementText, A_EventInfo)
ElternID := A_EventInfo
Loop  ; Kompletten Pfad des ausgewählten Ordners zusammensetzen.
{
    ElternID := TV_GetParent(ElternID)
    if not ElternID  ; Keine weiteren Elternelemente.
        break
    TV_GetText(ElternText, ElternID)
    AusgewähltesElementText := ElternText "\" AusgewähltesElementText
}
AusgewähltesElementPfad := TreeRoot "\" AusgewähltesElementText

; Dateien in die ListView einfügen:
LV_Delete()  ; Alle Zeilen löschen.
GuiControl, -Redraw, MeineListView  ; Performanz verbessern durch Abschalten von Redraw beim Laden.
DateienAnzahl := 0  ; Für die untere Schleife initialisieren.
GesamtGröße := 0
Loop %AusgewähltesElementPfad%\*.*  ; Nur die Dateien in der ListView anzeigen.
{
    LV_Add("", A_LoopFileName, A_LoopFileTimeModified)
    DateienAnzahl += 1
    GesamtGröße += A_LoopFileSize
}
GuiControl, +Redraw, MeineListView

; Die drei Segmente der Statusleiste mit Infos über den aktuell ausgewählten Ordner aktualisieren:
SB_SetText(DateienAnzahl . " Dateien", 1)
SB_SetText(Round(GesamtGröße / 1024, 1) . " KB", 2)
SB_SetText(AusgewähltesElementPfad, 3)
return

GuiSize:  ; ListView und TreeView kleiner/größer machen, wenn Benutzer die Fenstergröße ändert.
if (A_EventInfo = 1)  ; Das Fenster wurde minimiert. Keine Aktion notwendig.
    return
; Andernfalls wurde das Fenster kleiner/größer gemacht oder maximiert. Größe der Steuerelemente anpassen.
GuiControl, Move, MeineTreeView, % "H" . (A_GuiHeight - 30)  ; -30 für StatusBar und Abstände.
GuiControl, Move, MeineListView, % "H" . (A_GuiHeight - 30) . " W" . (A_GuiWidth - TreeViewBreite - 30)
return

GuiClose:  ; Skript beenden, wenn der Benutzer die GUI der TreeView schließt.
ExitApp