TreeView [v1.0.44+]

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:

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 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 Kinderelement 2", P2C2)

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

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

Parameter

Optionen

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 Farbe, die mit dem SteuerelementFarbe-Parameter von Gui Color definiert wurde (wenn keine definiert wurde, 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 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 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).

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. [v1.1.02+]: Alternativ kann TV_SetImageList() 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. Unabhängig von dieser Einstellung erhält das g-Label weiterhin F2-Benachrichtigungen.

GLabel: Das g-Label wird jedes Mal automatisch gestartet, wenn der Benutzer eine Aktion im Steuerelement ausführt. Wenn das Steuerelement die AltSubmit-Option hat, wird das g-Label häufiger gestartet. Einzelheiten finden Sie unter TreeView-Benachrichtigungen.

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 Funktionen

Die folgenden Funktionen arbeiten mit dem Standard-GUI-Fenster des aktuellen Threads (was mit Gui Default geändert werden kann). Wenn das Standardfenster nicht existiert oder keine TreeView-Steuerelemente hat, geben die 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 einer zugeordneten Variable, die ClassNN (wie von Window Spy angezeigt) oder in [v1.1.04+] das HWND 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 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 TV_Modify() 0 anstelle der Element-ID zurück. TV_Add() 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 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 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 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 Kinderelements eines bestimmten Elements zurück.

KinderelementID := 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 Kinderelements des angegebenen Elements zurück. Wenn dort kein Kinderelement 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 angehakte 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 angehakten 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 Kinderelemente 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 Optionen 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 die Option -ReadOnly 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 die TreeView die AltSubmit-Optionen hat, wird das g-Label häufiger gestartet und A_GuiEvent auf einen der folgenden zusätzlichen Werte gesetzt:

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 die Option -ReadOnly 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 Kinderelemente anzuzeigen. Die interne Variable A_EventInfo enthält die ID des Elements.

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

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:

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

[v1.1.02+]: Die TV_SetImageList-Funktion 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:

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.

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) (archiviertes Forum) bietet eine erweiterte TreeView-Funktionalität und ermöglicht das Einfügen, Verschieben und Löschen von Elementen.

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

Beispiele

Erstellt eine editierbare TreeView mit drei Elementen und zeigt sie an. Die TreeView verwendet ein g-Label, 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.

Gui, Add, TreeView, -ReadOnly gMeinBaum
TV_Add("A")
TV_Add("B")
TV_Add("C")
Gui, Show
return

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

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_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