Eine TreeView (auf Deutsch: Baumansicht) wird in der Regel verwendet, um eine hierarchisch gegliederte Liste darzustellen, die aus mehreren ineinander geschachtelten Elementen besteht. Das wohl bekannteste Beispiel dafür ist der Navigationsbereich des Explorers, der Laufwerke und Ordner hierarchisch darstellt.
Eine typische TreeView sieht wie folgt aus:
Die Syntax zur Erstellung einer TreeView ist:
Gui, Add, TreeView, Optionen
Hier sehen Sie ein funktionierendes 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
AltSubmit: Teilt dem Skript mehr TreeView-Ereignisse als normal mit. Das heißt, dass das g-Label öfters gestartet wird. Weitere Informationen finden Sie unter TreeView-Benachrichtigungen.
Background: Geben Sie das Wort Background an, unmittelbar gefolgt von einem Farbnamen (siehe Farbentabelle) oder RGB-Wert (das 0x-Präfix ist optional). Beispiele: BackgroundSilver
, BackgroundFFDD99
. Wenn diese Option nicht vorhanden ist, verwendet TreeView als Hintergrundfarbe standardmäßig die im letzten Parameter von Gui Color definierte Farbe (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 (das 0x-Präfix ist optional). Beispiele: cRed
, cFF2211
, c0xFF2211
, cDefault
.
Checked: Zeigt auf der linken Seite jeden Elements eine CheckBox an. Fügt man ein Element via TV_Add hinzu, kann das Wort Check in den Optionen angegeben werden, 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: Das Mittel, mit dem Symbole zu einer TreeView hinzugefügt werden. Geben Sie das Wort ImageList an, unmittelbar gefolgt von der ImageListID, die von einem vorherigen IL_Create()-Aufruf zurückgegeben wurde. Diese Option funktioniert nur, während eine TreeView erstellt wird (TV_SetImageList() hingegen unterliegt nicht dieser Einschränkung). Hier ein funktionierendes Beispiel:
ImageListID := IL_Create(10) ; ImageList für vsl. 10 Symbole erstellen. Loop 10 ; ImageList mit einigen Standard-Systemsymbolen befüllen. IL_Add(ImageListID, "shell32.dll", A_Index) Gui, Add, TreeView, ImageList%ImageListID% TV_Add("Elementname", 0, "Icon4") ; Element zur TreeView hinzufügen und 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 zu erlauben, den Text/Namen eines Elements zu editieren. Um ein Element zu editieren, wählen Sie es aus und drücken Sie F2 (weitere Informationen finden Sie unter WantF2). Alternativ können Sie ein Element einmal anklicken, um es auszuwählen, mindestens eine halbe Sekunde warten und dann das gleiche Element erneut anklicken, um es zu editieren. Nach dem Editieren kann ein Element unter seinen Geschwisterelementen alphabetisch neu positioniert werden; zum Beispiel:
Gui, Add, TreeView, -ReadOnly gMeinTree ; Für gMeinTree siehe TreeView-g-Label. ; ... MeinTree: 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. R10
beispielsweise macht das Steuerelement 10 Elemente hoch.
WantF2: Geben Sie -WantF2
(minus WantF2) an, um den Benutzer daran zu hindern, mithilfe von F2 das aktuell ausgewählte Element zu editieren. Diese Einstellung wird ignoriert, wenn -ReadOnly ebenfalls wirksam ist. Unabhängig von dieser Einstellung erhält das g-Label weiterhin F2-Benachrichtigungen.
(Namenlose numerische Styles): Andere Styles als die oben genannten werden selten verwendet und haben dementsprechend keine Namen. Eine vollständige Liste finden Sie unter TreeView-Styles.
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, geben alle Funktionen Null zurück, um das Problem zu kennzeichnen.
Wenn das Fenster mehrere TreeView-Steuerelemente aufweist, agieren die Funktionen standardmäßig mit dem zuletzt hinzugefügten Steuerelement. Um das zu ändern, verwenden Sie Gui, TreeView, TreeViewName
- hierbei ist TreeViewName entweder der Name der zugeordneten Variable, die ClassNN-Bezeichnung (wie vom internen Tool Window Spy gezeigt) oder [in v1.1.04+] die HWND-Nummer (eindeutige ID) der TreeView. Einmal geändert, werden alle vorhandenen und zukünftigen Threads die angegebene TreeView verwenden. [v1.1.23+]: A_DefaultTreeView enthält die aktuelle Einstellung.
Element-Funktionen:
Abruffunktionen:
Sonstige Funktionen:
Fügt ein neues Element zur TreeView hinzu und gibt seine eindeutige Element-ID-Nummer zurück (oder 0 bei Misserfolg).
TV_Add(Name, ElternElementID, Optionen)
Name ist der Anzeigetext des Elements, das textuell oder numerisch sein kann (einschließlich numerische Ergebnisse von Ausdrücken). ElternElementID ist die ID-Nummer des Elternelements des neuen Elements (wenn dieser Parameter weggelassen wird oder 0 ist, wird das Element als Top-Level-Element hinzugefügt). Um das Hinzufügen sehr vieler Elemente leistungsfähiger zu machen, verwenden Sie GuiControl, -Redraw, MeineTreeView
, bevor Sie die Elemente hinzufügen, und danach GuiControl, +Redraw, MeineTreeView
.
Der Optionen-Parameter ist eine Zeichenkette bestehend aus null oder mehr Wörtern von der unteren Liste (nicht Groß-/Kleinschreibung-sensitiv). Trennen Sie alle Wörter jeweils mit einem 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 erfolgen, 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 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 Kindelemente anzuzeigen (sofern vorhanden). Um das Element später wieder zuzuklappen, verwenden Sie TV_Modify(ElementID, "-Expand")
. Wenn es keine Kindelemente hat, wird TV_Modify() eine 0 anstelle der Element-ID zurückgeben. TV_Add() hingegen markiert das Element als aufgeklappt, falls später noch Kindelemente hinzugefügt werden. Im Gegensatz zu "Select" (siehe unten) wird beim Aufklappen eines Elements nicht automatisch sein Elternelement aufgeklappt. 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 Geschwisterelementen (ein Geschwisterelement befindet sich auf derselben Ebene). Wenn keine dieser Optionen vorhanden ist, wird das neue Element als letztes/unterstes Geschwisterelement hinzugefügt. Geben Sie ansonsten First an, um das Element als erstes/oberstes Geschwisterelement hinzuzufügen, oder Sort, um das Element unter seinen Geschwisterelementen in alphabetischer Reihenfolge einzufügen. Wenn eine Nummer (N) angegeben ist, wird sie als ID-Nummer des Geschwisterelements vermutet, nach der das neue Element eingefügt werden soll (wenn die Nummer die einzige vorhandene Option ist, muss sie nicht in Anführungszeichen gesetzt werden).
Icon: Geben Sie das Wort Icon an, unmittelbar gefolgt von der Nummer eines Symbols, das auf der linken Seite des Elementnamens angezeigt werden soll. Fehlt diese Option, wird das erste Symbol in der ImageList verwendet. Um ein leeres Symbol darzustellen, geben Sie eine Nummer größer als die Anzahl der Symbole in der ImageList an. Wenn dem Steuerelement keine ImageList zugewiesen wurde, wird weder ein Symbol angezeigt noch dafür Platz reserviert.
Select: Wählt das Element aus. Da jeweils nur ein einziges Element ausgewählt werden kann, wird das zuvor ausgewählte Element automatisch abgewählt. Darüber hinaus wird diese Option alle Elternelemente des neu ausgewählten Elements aufklappen, falls erforderlich. Um die aktuelle Auswahl festzustellen, verwenden Sie TV_GetSelection().
Sort: In Verbindung mit TV_Modify() wird diese Option die Kindelemente des angegebenen Elements in alphabetischer Reihenfolge sortieren. Um stattdessen alle Top-Level-Elemente zu sortieren, verwenden Sie TV_Modify(0, "Sort")
. Wenn es keine Kindelemente hat, wird nicht die ID des geänderten Elements, sondern 0 zurückgegeben.
Vis: Stellt sicher, dass das Element vollständig sichtbar ist, gegebenenfalls durch Scrollen der TreeView und/oder Aufklappen seines Elternelements.
VisFirst: Das gleiche wie oben, außer dass die TreeView zusätzlich gescrollt wird, damit das Element ganz oben erscheint, wenn möglich. Diese Option ist in Verbindung mit TV_Modify() in der Regel effektiver als mit TV_Add().
Ändert die Attribute und/oder den Namen eines Elements.
TV_Modify(ElementID , Optionen, NeuerName)
Diese Funktion gibt bei Erfolg die ID des Elements und bei Misserfolg (oder teilweisem Misserfolg) eine 0 zurück. Verwendet man nur den ersten Parameter, wird das angegebene Element ausgewählt. Lässt man NeuerName weg, bleibt der aktuelle Name unverändert. Für Optionen können die Optionen aus der oberen Liste verwendet werden.
Löscht ein bestimmtes Element oder alle Elemente.
TV_Delete(ElementID)
Lässt man ElementID weg, werden alle Elemente in der TreeView gelöscht. Ansonsten wird nur ElementID gelöscht. Diese Funktion gibt bei Erfolg eine 1 und bei Misserfolg eine 0 zurück.
Gibt die ID-Nummer des ausgewählten Elements zurück.
TV_GetSelection()
Gibt die Anzahl aller Elemente im Steuerelement zurück.
TV_GetCount()
Diese Funktion gibt diesen Wert ohne Verzögerung zurück, weil das Steuerelement diesen stets zwischenspeichert.
Gibt das Elternelement eines bestimmten Elements als Element-ID zurück.
TV_GetParent(ElementID)
Top-Level-Elemente haben keine Elternelemente und geben daher 0 zurück.
Gibt die ID-Nummer des ersten/obersten Kindelements eines bestimmten Elements zurück (oder 0, wenn keines vorhanden ist).
TV_GetChild(ElternElementID)
Gibt die ID-Nummer des Geschwisterelements zurück, das sich oberhalb eines bestimmten Elements befindet (oder 0, wenn keines vorhanden ist).
TV_GetPrev(ElementID)
Gibt die ID-Nummer des nächsten Elements zurück, das sich unterhalb eines bestimmten Elements befindet (oder 0, wenn keines vorhanden ist).
TV_GetNext(ElementID, ElementTyp)
Diese Funktion verfügt über folgende Modi:
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%". }
Ruft den Text/Namen der angegebenen ElementID ab 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 gibt sie eine 0 zurück (und macht AusgabeVar zudem leer).
Gibt die ID-Nummer eines bestimmten Elements zurück, unter Beachtung des angegebenen Attributs.
TV_Get(ElementID, Attribut)
Wenn das angegebene Element das angegebene Attribut aufweist, 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 (oder anders gesagt, ob seine Kindelemente gerade sichtbar sind); geben Sie "C", "Check" oder "Checked" an, um zu ermitteln, ob das Element ein Häkchen hat; oder 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")
.
Setzt oder ersetzt eine ImageList zum Darstellen von Symbolen.
TV_SetImageList(ImageListID , SymbolTyp)
ImageListID ist die Nummer, die von einem vorherigen IL_Create()-Aufruf zurückgegeben wurde. SymbolTyp wird normalerweise weggelassen, um standardmäßig 0 zu verwenden. Geben Sie ansonsten eine 2 für Zustandssymbole an (Zustandssymbole werden noch nicht direkt unterstützt, aber können via SendMessage verwendet werden). Bei Erfolg gibt TV_SetImageList() die ImageListID zurück, die vorher mit der TreeView verknüpft war (oder 0, wenn nicht). Jede nicht mehr verwendete ImageList sollte normalerweise mit IL_Destroy(ImageListID) zerstört werden.
Ein g-Label wie z. B. gMeineSubroutine
kann in den Optionen des Steuerelements eingefügt werden. Dies führt dazu, dass jedes Mal das Label MeineSubroutine gestartet wird, wenn der Benutzer eine Aktion im Steuerelement durchführt. Diese Subroutine hat Zugriff auf die internen Variablen A_Gui und A_GuiControl, um zu ermitteln, welches Fenster und welche TreeView für das Ereignis verantwortlich war. Noch wichtiger ist, dass sie zudem auf A_GuiEvent zugreifen kann. Diese interne Variable enthält eine der folgenden Zeichenketten oder Buchstaben (aus Gründen der Kompatibilität mit zukünftigen Versionen sollte ein Skript nicht davon ausgehen, dass dies 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 via Drag-and-Drop 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 (kleines D): Das gleiche wie oben, außer dass beim Drag-and-Drop 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 Variable A_EventInfo enthält die ID des Elements.
S: Ein neues Element wurde ausgewählt, entweder durch den Benutzer oder das Skript selbst. Die Variable A_EventInfo enthält die ID des neu ausgewählten Elements.
Wenn die TreeView das Wort AltSubmit in ihren Optionen verwendet, wird ihr g-Label öfters gestartet 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 ist es ratsam, kein Popup-Menü in Reaktion auf dieses Ereignis anzuzeigen. Verwenden Sie stattdessen das GuiContextMenu-Label, da es auch die MENÜ-Taste erkennt. Zum Beispiel:
GuiContextMenu: ; Startet bei einem Rechtsklick oder MENÜ-Tastendruck. if (A_GuiControl != "MeineTreeView") ; Diese Überprüfung ist optional. Das Menü wird nur bei einem Klick 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 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 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 Tastaturlayouts via Chr(A_EventInfo)
in das entsprechende Zeichen übersetzt werden. F2 wird unabhängig von WantF2 erfasst. Enter hingegen wird nicht erfasst; um es dennoch zu erfassen, können Sie, wie unten beschrieben, eine Standardschaltfläche nutzen.
+ (Pluszeichen): Ein Element wurde aufgeklappt, um seine Kindelemente anzuzeigen. Die Variable A_EventInfo enthält die ID des Elements.
- (Minuszeichen): Ein Element wurde zugeklappt, um seine Kindelemente zu verstecken. Die Variable A_EventInfo enthält die ID des Elements.
Der Befehl Gui Submit funktioniert nicht mit einem TreeView-Steuerelement. Demzufolge kann das Skript die zugeordnete Variable der TreeView (falls vorhanden) zum Speichern anderer Daten verwenden, 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
Neben der Möglichkeit, mit der Tastatur von Element zu Element zu navigieren, kann der Benutzer auch eine inkrementelle Suche durchführen, indem er die ersten paar Zeichen eines Elementnamens eingibt. Dies führt dazu, dass die Auswahl zum nächst passenden Element springt.
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 Leistung beim Hinzufügen von Elementen schon lange vorher merklich abnehmen. Um diesen Leistungsverfall etwas abzuschwächen, können Sie den in TV_Add() beschriebenen Tipp bzgl. Redraw verwenden.
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 länger benötigt wird. Dies ist jedoch nicht erforderlich, wenn das Skript schon bald beendet wird, da in diesem Fall alle ImageLists automatisch zerstört werden.
Ein Skript kann mehr als eine TreeView pro Fenster erstellen. Informationen darüber, wie man mit einer anderen als der Standard-TreeView agieren kann, finden Sie unter interne Funktionen.
Um eine TreeView zum Beispiel größer/kleiner zu machen, zu verstecken, oder um die Schrift einer TreeView zu ändern, verwenden Sie GuiControl.
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.
ListView, Andere Steuerelemente, Gui, GuiContextMenu, GuiControl, GuiControlGet, TreeView-Styles
Das folgende Beispiel ist ein funktionierendes Skript, das umfangreicher als das Beispiel ganz oben ist. Es erstellt und zeigt eine TreeView mit allen Ordnern, die sich im Alle-Benutzer-Startmenü befinden. Wenn der Benutzer einen Ordner auswählt, wird dessen Inhalt in einer ListView auf der rechten Seite angezeigt (so ähnlich wie der Windows Explorer). Zusätzlich zeigt ein StatusBar-Steuerelement Informationen über den aktuell ausgewählten Ordner an.
; Der folgende Ordner definiert den Root-Ordner der TreeView. Beachten Sie, dass das ; Laden lange dauern kann, wenn ein komplettes 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 anzupassen: Gui +Resize ; Eine ImageList erstellen und mit einigen Standard-Systemsymbolen befüllen: ImageListID := IL_Create(5) Loop 5 IL_Add(ImageListID, "shell32.dll", A_Index) ; Eine TreeView und ListView nebeneinandersetzen, ähnlich zum 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 machen für vertikalen Scrollbalken. 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 durchfü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. ; Ansonsten 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 ; Vollständigen 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 ; Leistung 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 ; Ansonsten 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