ListView

Inhaltsverzeichnis

Einführung und einfaches Beispiel

Die ListView ist eines der umfangreichsten Steuerelemente, das vom Betriebssystem zur Verfügung gestellt wird. Eine ListView (auf Deutsch: Listenansicht) wird häufig verwendet, um eine Tabelle in Form von Zeilen und Spalten darzustellen. Das wohl bekannteste Beispiel dafür ist die detaillierte Auflistung von Dateien und Ordnern im Explorer.

Eine typische ListView sieht wie folgt aus:

ListView

Auch wenn es recht umfangreich erscheinen mag, sind die grundlegenden Features einer ListView relativ einfach zu bedienen. Die Syntax zum Erstellen einer ListView ist:

Gui, Add, ListView, Optionen, SpalteTitel1|SpalteTitel2|...

Das folgende Beispiel ist ein lauffähiges Skript, das alle Dateien im Ordner "Eigene Dateien" des Benutzers in einer ListView auflistet:

; Zweispaltige ListView erstellen:
Gui, Add, ListView, r20 w700 gMeineListView, Name|Größe (KB)

; Name und Größe jeder Datei in einem Ordner in die ListView einfügen:
Loop, %A_MyDocuments%\*.*
    LV_Add("", A_LoopFileName, A_LoopFileSizeKB)

LV_ModifyCol()  ; Breite jeder Spalte an ihren Inhalt anpassen.
LV_ModifyCol(2, "Integer")  ; Aus Sortierungsgründen Spalte 2 als Integer kennzeichnen.

; Das Fenster anzeigen und in den Leerlauf gehen. Das Skript wird jedes Mal benachrichtigt, wenn der Benutzer eine Zeile doppelt anklickt.
Gui, Show
return

MeineListView:
if (A_GuiEvent = "DoubleClick")
{
    LV_GetText(ZeileText, A_EventInfo)  ; Text des ersten Feldes der Zeile abrufen.
    ToolTip Sie haben die Zeile %A_EventInfo% doppelt angeklickt. Text: "%ZeileText%"
}
return

GuiClose:  ; Skript automatisch beenden, wenn das Fenster geschlossen wird.
ExitApp

Optionen und Styles für den Optionen-Parameter

AltSubmit: Teilt dem Skript mehr ListView-Ereignisse als normal mit. Mit anderen Worten, das g-Label wird häufiger gestartet. Weitere Informationen finden Sie unter ListView-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 ListView 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 ListView via GuiControl, +BackgroundDefault, MeineListView wiederhergestellt werden.

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 jeder Zeile bereit. Geben Sie beim Hinzufügen einer Zeile 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.

Count: Geben Sie das Wort Count an, unmittelbar gefolgt von der Anzahl der Zeilen, die die ListView letztendlich enthalten soll. Dies ist kein Limit: Nach Erreichen dieser Anzahl können weiterhin neue Zeilen hinzugefügt werden. Stattdessen dient diese Option eher als Hinweis, dass das Steuerelement den Speicher nur einmal reservieren soll und nicht jedes Mal, wenn eine neue Zeile hinzugefügt wird, was die Performanz beim Hinzufügen neuer Zeilen (und bis zu einem gewissen Grad auch beim Sortieren) deutlich verbessert. Um die Performanz noch weiter zu verbessern, verwenden Sie GuiControl, -Redraw, MeineListView, bevor Sie eine große Anzahl von Zeilen hinzufügen. Verwenden Sie anschließend GuiControl, +Redraw, MeineListView, um die Neuzeichnung wieder zu aktivieren (wodurch auch das Steuerelement neu gezeichnet wird).

Grid: Zeigt horizontale und vertikale Linien an, um die Grenzen zwischen den Zeilen und Spalten zu verdeutlichen.

Hdr: Geben Sie -Hdr (minus Hdr) an, um die Kopfzeile (Spaltenüberschriften) zu verstecken. Um sie später wieder sichtbar zu machen, verwenden Sie GuiControl, +Hdr, MeineListView.

LV: Geben Sie die Zeichenkette LV an, unmittelbar gefolgt von der Zahl eines erweiterten ListView-Styles. Diese Styles sind etwas völlig anderes als die generischen erweiterten Styles. Zum Beispiel bewirkt -E0x200, dass der generische erweiterte Style WS_EX_CLIENTEDGE (Standardrahmen des Steuerelements) entfernt wird, während -LV0x20 den erweiterten ListView-Style LVS_EX_FULLROWSELECT entfernt.

LV0x10: Geben Sie -LV0x10 an, um den Benutzer daran zu hindern, die Spaltenüberschriften zwecks Neuanordnung nach links oder rechts zu verschieben. Normalerweise ist das in der Regel nicht notwendig, weil die physische Neuanordnung der Spalten keinen Einfluss auf die vom Skript gesehene Spaltenanordnung hat. Die erste Spalte wird aus Sicht des Skripts immer Spalte 1 sein, auch dann, wenn der Benutzer sie z.B. physisch ganz nach rechts verschoben hat.

LV0x20: Geben Sie -LV0x20 an, damit eine Zeile nur durch Anklicken des ersten Feldes ausgewählt werden kann (normalerweise kann sie durch Anklicken eines beliebigen Feldes ausgewählt werden). Diese Option hat den Vorteil, dass der Benutzer leichter ein Rechteck über mehrere Zeilen ziehen kann, um sie auszuwählen.

Multi: Geben Sie -Multi (minus Multi) an, um den Benutzer daran zu hindern, mehr als eine Zeile auszuwählen.

NoSortHdr: Verhindert, dass die Kopfzeile angeklickt werden kann. Die Spaltenüberschriften werden nicht mehr als normale Schaltflächen dargestellt, sondern bekommen ein flacheres Aussehen. Im Gegensatz zu den meisten anderen ListView-Styles kann dieser Style nicht mehr geändert werden, nachdem die ListView erstellt wurde.

NoSort: Verhindert die automatische Sortierung beim Anklicken einer Spaltenüberschrift. Die Spaltenüberschrift verhält sich jedoch weiterhin visuell wie eine Schaltfläche (es sei denn, die NoSortHdr-Option oben wurde angegeben). Außerdem erhält das g-Label weiterhin die ColClick-Benachrichtigung, die z.B. für eine benutzerdefinierte Sortierung verwendet werden kann.

ReadOnly: Geben Sie -ReadOnly (minus ReadOnly) an, um dem Benutzer das Editieren des Textes in der ersten Spalte jeder Zeile zu erlauben. Um eine Zeile zu editieren, wählen Sie sie aus und drücken Sie F2 (siehe WantF2-Option unten). Alternativ können Sie einmal auf eine Zeile klicken, um sie auszuwählen, mindestens eine halbe Sekunde warten und dann erneut auf dieselbe Zeile klicken, um sie zu editieren.

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 Zeilen hoch gemacht wird. Wenn die ListView mit einem anderen Ansichtsmodus als Report erstellt wurde, wird die Höhe des Steuerelements so angepasst, dass Symbolzeilen anstelle von Textzeilen hineinpassen. Hinweis: Wenn Symbole zu den Zeilen einer ListView hinzugefügt werden, erhöht sich die Höhe jeder Zeile, wodurch diese Option ungenau wird.

Sort: Sortiert die Zeilen in alphabetischer Reihenfolge, basierend auf dem Inhalt der ersten Spalte.

SortDesc: Wie oben, aber in absteigender Reihenfolge.

WantF2: In [v1.0.44+] kann -WantF2 (minus WantF2) angegeben werden, um den Benutzer daran zu hindern, die aktuell fokussierte Zeile 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 ListView-Styles.

Ansichtsmodi

Eine ListView hat fünf Ansichtsmodi. Der am häufigsten verwendete Modus ist die Report-Ansicht (Standardeinstellung). Um eine andere Ansicht zu verwenden, fügen Sie den entsprechenden Namen in die Optionsliste ein. Die Ansicht kann auch geändert werden, nachdem das Steuerelement erstellt wurde, zum Beispiel: GuiControl, +IconSmall, MeineListView.

Icon: Große-Symbole-Ansicht. In dieser und allen anderen Ansichten außer Report sind nur die Texte der ersten Spalte sichtbar. Um Symbole in dieser Ansicht anzuzeigen, muss der ListView eine Große-Symbole-ImageList zugewiesen werden.

Tile: Große-Symbole-Ansicht, aber mit ergonomischen Unterschieden - z.B. wird der Text für jedes Element rechts vom Symbol angezeigt, nicht darunter. Checkboxen funktionieren nicht in dieser Ansicht. Außerdem wird der Versuch, diese Ansicht in Betriebssystemen älter als Windows XP anzuzeigen, ignoriert.

IconSmall: Kleine-Symbole-Ansicht.

List: Kleine-Symbole-Ansicht im Listenformat, in der die Symbole in Spalten dargestellt werden. Die Anzahl der Spalten hängt von der Breite des Steuerelements und der Breite des breitesten darin enthaltenen Textelements ab.

Report: Wechselt zurück zur Report-Ansicht, was die Standardeinstellung für jede neue ListView ist. Zum Beispiel: GuiControl, +Report, MeineListView.

Interne ListView-Funktionen

Alle folgenden ListView-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 ListView-Steuerelemente hat, geben alle Funktionen Null zurück, um das Problem zu kennzeichnen.

Wenn das Fenster mehr als ein ListView-Steuerelement hat, arbeiten die Funktionen standardmäßig mit dem zuletzt hinzugefügten. Um dies zu ändern, verwenden Sie Gui, ListView, ListViewName, wobei ListViewName 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 ListView ist. Einmal geändert, werden alle existierenden und zukünftigen Threads die angegebene ListView verwenden. [v1.1.23+]: A_DefaultListView enthält die aktuelle Einstellung.

Der auf dieser Seite verwendete Begriff "Zeilennummer" bezieht sich auf die aktuelle Position einer Zeile innerhalb der ListView. Die erste/oberste Zeile ist 1, die zweite 2 und so weiter. Nachdem eine Zeile hinzugefügt wurde, kann sich die Zeilennummer durch Sortieren, Löschen und Einfügen anderer Zeilen ändern. Daher ist es ratsam, LV_GetText() in einer Schleife zu verwenden, um bestimmte Zeilen anhand ihres Inhalts zu lokalisieren.

Zeilenfunktionen:

Spaltenfunktionen:

Abruffunktionen:

Sonstige Funktionen:

LV_Add

Fügt eine neue Zeile am Ende der Liste hinzu.

ZeileNummer := LV_Add(Optionen, Spalte1, Spalte2, ...)

Parameter

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.

Check: Zeigt ein Häkchen in der Zeile an (sofern die ListView über Checkboxen verfügt). Mit LV_Modify(ZeileNummer, "-Check") kann das Häkchen später wieder entfernt werden.

Col: Geben Sie das Wort Col an, unmittelbar gefolgt von der Spaltennummer, ab der die Parameter Spalte1 usw. angewendet werden sollen. Diese Option wird häufig in Verbindung mit LV_Modify() verwendet, um einzelne Felder in einer Zeile zu ändern, ohne die Felder links davon zu beeinflussen.

Focus: Setzt den Tastaturfokus auf die Zeile (wird oft in Verbindung mit Select verwendet). Mit LV_Modify(ZeileNummer, "-Focus") kann der Fokus später wieder entfernt werden.

Icon: Geben Sie das Wort Icon an, unmittelbar gefolgt von der Nummer des Symbols, das links in der ersten Spalte dieser Zeile angezeigt werden soll. Wenn diese Option fehlt, wird das erste Symbol in der ImageList verwendet. Um ein leeres Symbol anzuzeigen, geben Sie -1 oder eine Zahl größer als die Anzahl der Symbole in der ImageList an. Wenn dem Steuerelement keine Kleine-Symbole-ImageList zugewiesen wurde, wird in der Report-Ansicht weder ein Symbol angezeigt noch Platz dafür reserviert.

Die Icon-Option akzeptiert eine 1-basierte Symbolnummer, die jedoch intern in eine 0-basierte Indexnummer übersetzt wird; so dass Icon0 der Konstanten I_IMAGECALLBACK entspricht, die normalerweise als -1 definiert ist, und Icon-1 der Konstanten I_IMAGENONE entspricht. Andere Werte, die außerhalb des Bereichs liegen, können dazu führen, dass anstelle des Symbols ein leeres Feld angezeigt wird.

Select: Wählt die Zeile aus. Mit LV_Modify(ZeileNummer, "-Select") kann die Zeile später wieder abgewählt werden. Beim Auswählen von Zeilen ist es ratsam, immer mindestens eine Zeile mit der Fokus-Eigenschaft zu versehen, damit die MENÜ-Taste ihr Kontextmenü (falls vorhanden) in der Nähe der fokussierten Zeile anzeigen kann. Direkt nach dem Wort Select kann optional eine 0 oder 1 angegeben werden, um den Startzustand zu bestimmen. Mit anderen Worten, "Select" ist dasselbe wie "Select" . VarEnthältEins (wobei der Punkt ein Verkettungsoperator ist). Dies funktioniert auch mit den obigen Optionen Focus und Check.

Vis [v1.0.44+]: Scrollt die ListView bei Bedarf automatisch, um sicherzustellen, dass die angegebene Zeile vollständig sichtbar ist. Diese Option funktioniert nur mit LV_Modify(), z.B. LV_Modify(ZeileNummer, "Vis").

Spalte1, Spalte2, ...

Die Spalten der neuen Zeile, die textuell oder numerisch sein können (einschließlich numerischer Ergebnisse von Ausdrücken). Um ein beliebiges Feld leer zu machen, geben Sie "" o.ä. an. Wenn zu wenige Felder zum Füllen aller Spalten vorhanden sind, werden die Spalten am Ende leer gelassen. Wenn zu viele Felder vorhanden sind, werden die Felder am Ende vollständig ignoriert.

Rückgabewert

Bei Erfolg gibt die Funktion die neue Zeilennummer zurück. Beachten Sie, dass diese Zeilennummer nicht unbedingt die letzte Zeile repräsentiert, wenn die ListView mit der Sort- oder SortDesc-Option erstellt wurde. Bei Misserfolg gibt sie 0 zurück.

LV_Insert

Fügt eine neue Zeile an einer bestimmten Zeilennummer ein.

ZeileNummer := LV_Insert(ZeileNummer , Optionen, Spalte1, Spalte2, ...)

Parameter

ZeileNummer

Die Nummer der neuen Zeile, die eingefügt werden soll. Alle Zeilen, die auf oder unterhalb von ZeileNummer sind, werden nach unten verschoben, um Platz für die neue Zeile zu schaffen. Wenn ZeileNummer größer als die Anzahl der Zeilen in der Liste ist (sogar bis zu 2147483647), wird die neue Zeile am Ende der Liste hinzugefügt.

Optionen

Wenn leer oder weggelassen, werden standardmäßig keine Optionen verwendet. Andernfalls geben Sie eine oder mehrere Optionen aus der obigen Liste an.

Spalte1, Spalte2, ...

Die Spalten der neuen Zeile, die textuell oder numerisch sein können (einschließlich numerischer Ergebnisse von Ausdrücken). Um ein beliebiges Feld leer zu machen, geben Sie "" o.ä. an. Wenn zu wenige Felder zum Füllen aller Spalten vorhanden sind, werden die Spalten am Ende leer gelassen. Wenn zu viele Felder vorhanden sind, werden die Felder am Ende vollständig ignoriert.

Rückgabewert

Bei Erfolg gibt diese Funktion die angegebene Zeilennummer zurück. Bei Misserfolg gibt sie 0 zurück.

LV_Modify

Ändert die Attribute und/oder den Text einer Zeile.

ZeileNummer := LV_Modify(ZeileNummer , Optionen, NeueSpalte1, NeueSpalte2, ...)

Parameter

ZeileNummer

Die Nummer der Zeile, die geändert werden soll. Wenn 0, werden alle Zeilen im Steuerelement geändert.

Optionen

Wenn leer oder weggelassen, werden standardmäßig keine Optionen verwendet. Andernfalls geben Sie eine oder mehrere Optionen aus der obigen Liste an. Mit der Col-Option können bestimmte Spalten geändert werden, ohne die anderen zu beeinflussen.

NeueSpalte1, NeueSpalte2, ...

Die neuen Spalten der angegebenen Zeile, die textuell oder numerisch sein können (einschließlich numerischer Ergebnisse von Ausdrücken). Um ein beliebiges Feld leer zu machen, geben Sie "" o.ä. an. Wenn zu wenige Felder zum Ändern aller Spalten vorhanden sind, bleiben die Spalten am Ende unverändert. Wenn zu viele Felder vorhanden sind, werden die Felder am Ende vollständig ignoriert.

Rückgabewert

Bei Erfolg gibt diese Funktion die angegebene Zeilennummer zurück. Bei Misserfolg gibt sie 0 zurück. Wenn ZeileNummer 0 ist, um alle Zeilen zu ändern, gibt sie 1 zurück, wenn die Operation gänzlich erfolgreich war, oder 0, wenn irgendein Teil der Operation fehlgeschlagen ist.

Bemerkungen

Wenn nur die ersten zwei Parameter vorhanden sind, werden nur die Attribute der Zeile geändert, nicht der Inhalt ihrer Felder.

LV_Delete

Löscht eine bestimmte Zeile oder alle Zeilen.

IstGelöscht := LV_Delete(ZeileNummer)

Parameter

ZeileNummer

Wenn weggelassen, werden alle Zeilen in der ListView gelöscht. Andernfalls geben Sie die Nummer der Zeile an, die gelöscht werden soll.

Rückgabewert

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

LV_ModifyCol

Ändert die Attribute und/oder den Text einer bestimmten Spalte und ihrer Überschrift.

IstGeändert := LV_ModifyCol(SpalteNummer, Optionen, SpalteTitel)

Parameter

SpalteNummer

Wenn dieser und alle anderen Parameter weggelassen werden, wird die Breite jeder Spalte an den Inhalt der Zeilen angepasst. Dies funktioniert nur in der Report-Ansicht.

Andernfalls geben Sie die Nummer der Spalte an, die geändert werden soll. Die erste Spalte ist 1 (nicht 0).

Optionen

Wenn weggelassen, wird standardmäßig Auto verwendet (die Breite der Spalte an den Inhalt ihrer Felder anpassen). 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.


Allgemeine Optionen:

N: Geben Sie für N die neue Breite der Spalte an (in Pixel). Diese Zahl muss nicht in Anführungszeichen gesetzt werden, wenn sie die einzige Option ist. Zum Beispiel: LV_ModifyCol(1, 50) und LV_ModifyCol(1, "50 Integer").

Auto: Passt die Breite der Spalte an den Inhalt ihrer Felder an. Dies funktioniert nur in der Report-Ansicht.

AutoHdr: Passt die Breite der Spalte an den Inhalt ihrer Felder und an den Inhalt ihrer Überschrift an, also je nachdem, welcher Inhalt breiter ist. Wird diese Option auf die letzte Spalte angewendet, wird diese mindestens so breit wie der gesamte restliche Platz in der ListView gemacht. In der Regel ist es ratsam, diese Option erst nach dem Hinzufügen der Zeilen anzuwenden, um den eventuell hinzugekommenen vertikalen Scrollbalken in die Größenberechnung mit einzubeziehen. Dies funktioniert nur in der Report-Ansicht.

Icon: Geben Sie das Wort Icon an, unmittelbar gefolgt von der Nummer des ImageList-Symbols, das neben der Spaltenüberschrift angezeigt werden soll. Geben Sie -Icon (minus Icon) an, um das Symbol wieder zu entfernen.

IconRight: Positioniert das Symbol auf der rechten statt linken Seite der Spalte.


Datentypoptionen:

Float: Bewirkt, dass die Felder der Spalte beim Sortieren als Floating-Point-Zahlen behandelt werden (hexadezimale Floating-Point-Zahlen werden nicht unterstützt). Float- und Text-Spalten werden bis zu 25-mal langsamer sortiert als Integer-Spalten.

Integer: Bewirkt, dass die Felder der Spalte beim Sortieren als Integer behandelt werden. Für eine korrekte Sortierung muss jeder Integer im 32-Bit-Bereich sein; also innerhalb des Bereiches von -2147483648 bis 2147483647. Jeder Wert, der kein Integer ist, wird bei der Sortierung als 0 behandelt (es sei denn, der Wert beginnt mit einer Zahl, dann wird diese verwendet). Die Zahlen können entweder dezimal oder hexadezimal (z.B. 0xF9E0) sein.

Text: Bewirkt, dass die Felder der Spalte beim Sortieren als Text behandelt werden, was die Standardeinstellung für jede neue Spalte ist. Nur die ersten 8190 Zeichen des Textes sind für die Sortierung relevant (es sei denn, die Logical-Option wird verwendet, dann liegt das Limit bei 4094).


Ausrichtungsoptionen:

Center: Zentriert den Text in der Spalte. Um eine Integer- oder Float-Spalte zu zentrieren, geben Sie das Wort Center nach dem Wort Integer oder Float an.

Left: Macht den Text der Spalte linksbündig, was die Standardeinstellung für jede neue Spalte ist. Bei älteren Betriebssystemen könnte die erste Spalte eine erzwungene Linksbündigkeit aufweisen.

Right: Macht den Text der Spalte rechtsbündig. Dieses Attribut muss nicht für Integer- und Float-Spalten angegeben werden, da diese standardmäßig rechtsbündig sind. Um diese Standardeinstellung zu überschreiben, können Sie z.B. "Integer Left" oder "Float Center" angeben.


Sortierungsoptionen:

Case: Die Sortierung der Spalte erfolgt Groß-/Kleinschreibung-sensitiv (betrifft nur Textspalten). Wenn die Optionen Case, CaseLocale und Logical weggelassen werden, werden die Großbuchstaben A bis Z und die entsprechenden Kleinbuchstaben bei der Sortierung als identisch betrachtet.

CaseLocale [v1.0.43.03+]: Die Sortierung der Spalte erfolgt nicht Groß-/Kleinschreibung-sensitiv, gemäß den aktuellen Sprach- und Regionseinstellungen des Benutzers (betrifft nur Textspalten). Zum Beispiel behandeln die meisten englischen und westeuropäischen Sprach- und Regionseinstellungen die Großbuchstaben A bis Z, einschließlich ANSI-Großbuchstaben wie Ä und Ü, und die entsprechenden Kleinbuchstaben als identisch. Diese Methode verwendet auch eine "Wortsortierung", die Bindestriche und Apostrophe so behandelt, dass Wörter wie "coop" und "co-op" zusammenbleiben.

Desc: Absteigende Reihenfolge. Die Spalte erscheint in absteigender Reihenfolge, wenn der Benutzer sie zum ersten Mal sortiert.

Logical [v1.0.44.12+]: Wie CaseLocale, außer dass alle Ziffernfolgen im Text als echte Zahlen und nicht als gewöhnliche Zeichen behandelt werden. Zum Beispiel wäre die Zeichenkette "T33" in diesem Fall größer als "T4". Logical benötigt Windows XP oder höher (in älteren Betriebssystemen wird stattdessen automatisch CaseLocale verwendet). Darüber hinaus schließen sich Logical und Case gegenseitig aus, d.h. nur die zuletzt angegebene Option ist wirksam.

NoSort: Verhindert, dass ein Klick des Benutzers die Spalte automatisch sortiert. Um die Sortierung nicht nur für einzelne, sondern für alle Spalten zu deaktivieren, fügen Sie NoSort in die Optionen der ListView ein. Das g-Label, sofern vorhanden, erhält weiterhin die ColClick-Benachrichtigung, wenn der Benutzer eine NoSort-Spalte anklickt.

Sort: Sortiert die Spalte sofort in aufsteigender Reihenfolge (selbst wenn sie die Desc-Option hat).

SortDesc: Sortiert die Spalte sofort in absteigender Reihenfolge.

Uni: Unidirektionale Sortierung. Verhindert, dass ein zweiter Klick auf dieselbe Spalte die Sortierrichtung umkehrt.

SpalteTitel

Wenn weggelassen, bleibt die aktuelle Überschrift unverändert. Andernfalls geben Sie die neue Spaltenüberschrift an.

Rückgabewert

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

LV_InsertCol

Fügt eine neue Spalte an einer bestimmten Spaltennummer ein.

SpalteNummer := LV_InsertCol(SpalteNummer , Optionen, SpalteTitel)

Parameter

SpalteNummer

Die Nummer der neuen Spalte, die eingefügt werden soll. Alle Spalten, die auf oder rechts von SpalteNummer sind, werden nach rechts verschoben, um Platz für die neue Spalte zu schaffen. Die erste Spalte ist 1 (nicht 0). Wenn SpalteNummer größer als die Anzahl der Spalten im Steuerelement ist, wird die neue Spalte rechts neben der letzten Spalte hinzugefügt.

Optionen

Wenn weggelassen, beginnt die Spalte immer mit ihren Standardeinstellungen, z.B. ob sie Integer-Sortierung verwendet oder nicht. Andernfalls geben Sie eine oder mehrere Optionen aus der obigen Liste an.

SpalteTitel

Wenn leer oder weggelassen, wird standardmäßig eine leere Überschrift verwendet. Andernfalls geben Sie die Spaltenüberschrift an.

Rückgabewert

Bei Erfolg gibt diese Funktion die Positionsnummer der neuen Spalte zurück. Bei Misserfolg gibt sie 0 zurück.

Bemerkungen

Der Inhalt der neuen Spalte ist vorerst leer, es sei denn, es handelt sich um die erste Spalte, dann wird der Inhalt der alten ersten Spalte in die neue kopiert und anschließend leer gemacht.

Eine ListView kann maximal 200 Spalten enthalten.

LV_DeleteCol

Löscht eine bestimmte Spalte und deren Inhalt.

IstGelöscht := LV_DeleteCol(SpalteNummer)

Parameter

SpalteNummer

Die Nummer der Spalte, die gelöscht werden soll. Wenn eine Spalte gelöscht wird, wird die Nummer jeder Spalte auf der rechten Seite um 1 verringert. Ruft man zum Beispiel LV_DeleteCol(2) zweimal auf, würde dies dazu führen, dass die zweite und dritte Spalte gelöscht werden.

Rückgabewert

Bei Erfolg gibt diese Funktion 1 (true) zurück. Bei Misserfolg gibt sie 0 (false) zurück. In Betriebssystemen älter als Windows XP kann der Versuch, die originale erste Spalte zu löschen, fehlschlagen und 0 zurückgeben.

LV_GetCount

Gibt die Anzahl der Zeilen oder Spalten im Steuerelement zurück.

Anzahl := LV_GetCount(Modus)

Parameter

Modus

Wenn leer oder weggelassen, gibt die Funktion die Gesamtzahl der Zeilen im Steuerelement zurück. Andernfalls geben Sie eine der folgenden Zeichenketten an:

S oder Selected: Die Anzahl beinhaltet nur die ausgewählten/markierten Zeilen.

Col oder Column: Die Funktion gibt die Anzahl der Spalten im Steuerelement zurück.

Rückgabewert

Diese Funktion gibt die Anzahl der Zeilen oder Spalten im Steuerelement zurück. Der Wert wird immer sofort zurückgegeben, da das Steuerelement diese Zählungen zwischenspeichert.

Bemerkungen

Diese Funktion wird oft in der obersten Zeile einer Schleife verwendet - in diesem Fall wird die Funktion nur einmal aufgerufen (vor der ersten Wiederholung). Zum Beispiel:

Loop % LV_GetCount()
{
    LV_GetText(AbgerufenerText, A_Index)
    if InStr(AbgerufenerText, "beliebiger Filtertext")
        LV_Modify(A_Index, "Select")  ; Jede Zeile auswählen, deren erstes Feld den Filtertext enthält.
}

Um die Spaltenbreiten einer ListView abzurufen, z.B. um sie in einer INI-Datei zwischenzuspeichern, gehen Sie wie folgt vor:

Gui +LastFound
Loop % LV_GetCount("Column")
{
    SendMessage, 0x101D, A_Index - 1, 0, SysListView321  ; 0x101D ist LVM_GETCOLUMNWIDTH.
    MsgBox Die Spalte %A_Index% ist %ErrorLevel% Pixel breit.
}

LV_GetNext

Gibt die Zeilennummer der nächsten ausgewählten, abgehakten oder fokussierten Zeile zurück.

ZeileNummer := LV_GetNext(StartZeileNummer, ZeileTyp)

Parameter

StartZeileNummer

Wenn leer, weggelassen oder kleiner als 1, beginnt die Suche bei der ersten Zeile in der Liste. Andernfalls geben Sie die Nummer der Zeile an, bei der die Suche beginnen soll.

ZeileTyp

Wenn leer oder weggelassen, sucht die Funktion nach der nächsten ausgewählten/markierten Zeile (siehe das Beispiel unten). Andernfalls geben Sie eine der folgenden Zeichenketten an:

C oder Checked: Die nächste abgehakte Zeile suchen.

F oder Focused: Die fokussierte Zeile suchen. Es gibt nie mehr als eine fokussierte Zeile in der gesamten Liste, und manchmal gar keine.

Rückgabewert

Diese Funktion gibt die Zeilennummer der nächsten ausgewählten, abgehakten oder fokussierten Zeile zurück. Wenn keine gefunden wird, gibt sie 0 zurück.

Bemerkungen

Das folgende Beispiel meldet alle ausgewählten Zeilen in der ListView:

ZeileNummer := 0  ; Die Suche bei der ersten Zeile beginnen.
Loop
{
    ZeileNummer := LV_GetNext(ZeileNummer)  ; Die Suche bei der nächsten Zeile fortsetzen.
    if not ZeileNummer  ; 0 zurückgegeben, also keine ausgewählten Zeilen mehr.
        break
    LV_GetText(Text, ZeileNummer)
    MsgBox Die nächste ausgewählte Zeile ist Nr. %ZeileNummer%, deren erstes Feld "%Text%" enthält.
}

Das nächste Beispiel ist eine alternative Methode, um herauszufinden, ob eine bestimmte Zeilennummer abgehakt ist:

Gui +LastFound
SendMessage, 0x102C, ZeileNummer - 1, 0xF000, SysListView321  ; 0x102C ist LVM_GETITEMSTATE. 0xF000 ist LVIS_STATEIMAGEMASK.
IstAbgehakt := (ErrorLevel >> 12) - 1  ; Setzt IstAbgehakt auf 1 (true), wenn ZeileNummer abgehakt ist, andernfalls auf 0 (false).

LV_GetText

Ruft den Text auf einer bestimmten Zeilen- und Spaltennummer ab.

IstAbgerufen := LV_GetText(AusgabeVar, ZeileNummer , SpalteNummer)

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.

ZeileNummer

Die Nummer der Zeile, deren Text abgerufen werden soll. Wenn leer oder 0, wird die Spaltenüberschrift abgerufen.

SpalteNummer

Wenn weggelassen, wird standardmäßig 1 verwendet (der Text der ersten Spalte). Andernfalls geben Sie die Nummer der Spalte an, in der sich ZeileNummer befindet.

Rückgabewert

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

Bemerkungen

Die vom Skript gesehenen Spaltennummern bleiben unverändert, wenn der Benutzer die Spalten via Ziehen-und-Ablegen verschiebt. Zum Beispiel wäre die originale erste Spalte auch dann noch Nummer 1, wenn der Benutzer sie ganz nach rechts ziehen würde.

LV_SetImageList

Setzt oder ersetzt eine ImageList zur Darstellung von Symbolen.

VorherigeImageListID := LV_SetImageList(ImageListID , SymbolTyp)

Parameter

ImageListID

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

SymbolTyp

Wenn weggelassen, werden die Symbole in der ImageList automatisch als groß oder klein erkannt. Andernfalls geben Sie 0 für große Symbole, 1 für kleine Symbole oder 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 ListView verknüpft war. Bei Misserfolg gibt sie 0 zurück. Eine nicht mehr verwendete ImageList sollte normalerweise mit IL_Destroy() zerstört werden.

Bemerkungen

Diese Funktion wird normalerweise aufgerufen, bevor Zeilen zur ListView hinzugefügt werden. Sie weist der ListView eine ImageList zu, die zur Darstellung von Symbolen in den Zeilen (und optional in den Spaltenüberschriften) verwendet wird.

Einer ListView können maximal zwei ImageLists zugewiesen werden - eine ImageList für kleine Symbole und/oder eine für große Symbole. Dies ist nützlich, wenn das Skript dem Benutzer die Möglichkeit bietet, zwischen der Kleine-Symbole- und Große-Symbole-Ansicht umzuschalten. Um der ListView mehr als eine ImageList zuzuweisen, rufen Sie LV_SetImageList() ein zweites Mal auf, mit der ImageList-ID der zweiten Liste. Eine ListView, die sowohl eine Kleine-Symbole- als auch Große-Symbole-ImageList verwendet, sollte sicherstellen, dass beide Listen die Symbole in der gleichen Reihenfolge enthalten. Der Grund dafür ist, dass dieselbe ID-Nummer verwendet wird, um sowohl auf die große als auch auf die kleine Version eines bestimmten Symbols zu verweisen.

Obwohl alle Ansichtsmodi außer Icon und Tile traditionell kleine Symbole anzeigen, kann dies überschrieben werden, indem eine Große-Symbole-ImageList an LV_SetImageList() übergeben und als zweiter Parameter 1 (kleines Symbol) angegeben wird. Dadurch wird auch die Höhe jeder Zeile in der ListView erhöht, um Platz für das große Symbol zu schaffen.

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 ListView 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 im Steuerelement einen Doppelklick gemacht. Die interne Variable A_EventInfo enthält die Nummer der fokussierten Zeile. Mit LV_GetNext() kann stattdessen die Nummer der ersten ausgewählten Zeile abgerufen werden (die Nummer ist 0, wenn der Benutzer eine leere Fläche doppelt angeklickt hat).

R: Der Benutzer hat im Steuerelement einen doppelten Rechtsklick gemacht. Die interne Variable A_EventInfo enthält die Nummer der fokussierten Zeile.

ColClick: Der Benutzer hat eine Spaltenüberschrift angeklickt. Die Variable A_EventInfo enthält die Spaltennummer, die der Spalte ursprünglich bei ihrer Erstellung zugewiesen wurde, d.h. die Nummer spiegelt nicht das Ziehen und Ablegen von Spalten durch den Benutzer wider. Eine mögliche Reaktion auf einen Spaltenklick ist die Sortierung nach den Daten einer versteckten Spalte (mit einer Breite von 0), die in einem sortierfreundlichen Format vorliegen (z.B. ein Datum im YYYYMMDD-Format). Eine versteckte Spalte dieser Art spiegelt eine andere Spalte wider, die dieselben Daten in einem lesbaren Format (z.B. DD.MM.YY) anzeigt. Zum Beispiel könnte ein Skript die Spalte 3 via LV_ModifyCol(3, 0) verstecken und dann die automatische Sortierung in der sichtbaren Spalte 2 via LV_ModifyCol(2, "NoSort") deaktivieren. Anschließend würde das Skript als Reaktion auf die ColClick-Benachrichtigung für Spalte 2 die ListView nach den Daten der versteckten Spalte via LV_ModifyCol(3, "Sort") sortieren.

D: Der Benutzer hat begonnen, eine Zeile oder ein Symbol via Maus zu ziehen (derzeit wird das Ziehen von Zeilen oder Symbolen intern nicht unterstützt). Die interne Variable A_EventInfo enthält die Nummer der fokussierten Zeile. [v1.0.44+]: Diese Benachrichtigung tritt auch ohne AltSubmit auf.

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, das erste Feld einer Zeile zu editieren (der Benutzer kann das Feld nur editieren, wenn -ReadOnly in den Optionen der ListView vorhanden ist). Die interne Variable A_EventInfo enthält die Nummer der Zeile.

G-Label-Benachrichtigungen (Sekundär)

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

Normal: Der Benutzer hat eine Zeile mit der linken Maustaste angeklickt. Die interne Variable A_EventInfo enthält die Nummer der fokussierten Zeile.

RightClick: Der Benutzer hat eine Zeile mit der rechten Maustaste angeklickt. Die interne Variable A_EventInfo enthält die Nummer der fokussierten Zeile. 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 != "MeineListView")  ; Diese Überprüfung ist optional. Das Menü wird nur für Klicks innerhalb der ListView 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

A: Eine Zeile wurde aktiviert, was standardmäßig durch einen Doppelklick geschieht. Die interne Variable A_EventInfo enthält die Nummer der Zeile.

C: Die ListView hat die Mauserfassung freigegeben.

E: Der Benutzer hat begonnen, das erste Feld einer Zeile zu editieren (der Benutzer kann das Feld nur editieren, wenn -ReadOnly in den Optionen der ListView vorhanden ist). Die interne Variable A_EventInfo enthält die Nummer der Zeile.

F: Die ListView hat den Tastaturfokus erhalten.

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

I: Der Zustand einer Zeile hat sich geändert, weil sie ausgewählt, abgewählt, abgehakt usw. wurde. Wenn der Benutzer eine neue Zeile auswählt, empfängt die ListView mindestens zwei solcher Benachrichtigungen: Eine für die Abwahl der vorherigen Zeile und eine für die Auswahl der neuen Zeile. [v1.0.44+]: Die interne Variable A_EventInfo enthält die Nummer der Zeile. [v1.0.46.10+]: ErrorLevel enthält beliebig viele der folgenden Buchstaben, die angeben, wie die Zeile geändert wurde: S (ausgewählt) oder s (abgewählt), und/oder F (fokussiert) oder f (defokussiert), und/oder C (Häkchen gesetzt) oder c (Häkchen entfernt). Zum Beispiel bedeutet SF, dass die Zeile ausgewählt und fokussiert wurde. Um festzustellen, ob ein bestimmter Buchstabe vorhanden ist, verwenden Sie eine parsende Schleife oder die GroßKleinSensitiv-Option von InStr(), z.B. InStr(ErrorLevel, "S", true). Hinweis: Aus Kompatibilitätsgründen mit zukünftigen Versionen sollte ein Skript nicht davon ausgehen, dass "SsFfCc" die einzig möglichen Buchstaben sind. Sie können auch Critical in die erste Zeile von g-Label einfügen, um sicherzustellen, dass alle "I"-Benachrichtigungen empfangen werden (andernfalls könnten einige von ihnen verloren gehen, wenn das Skript nicht mit ihnen Schritt halten kann).

K: Der Benutzer hat eine Taste gedrückt, während die ListView den Fokus hatte. A_EventInfo enthält den virtuellen Tastencode der Taste (eine Zahl zwischen 1 und 255). Dieser Code kann via GetKeyName() in einen Tastennamen oder in ein Zeichen übersetzt werden. Zum Beispiel Taste := GetKeyName(Format("vk{:x}", A_EventInfo)). Bei den meisten Tastaturbelegungen können die Tasten A bis Z 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.

M: Auswahlrechteck. Der Benutzer hat begonnen, ein Auswahlrechteck über mehrere Zeilen oder Symbole zu ziehen.

S: Der Benutzer hat begonnen, in der ListView zu scrollen.

s (kleines S): Der Benutzer hat aufgehört, in der ListView zu scrollen.

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 in einer Zeile oder Spaltenüberschrift anzuzeigen. Das folgende Beispiel zeigt, wie Symbole in die Zeilen einer ListView eingefügt werden können:

Gui, Add, ListView, h200 w180, Symbol & Nummer|Beschreibung  ; Eine ListView erstellen.
ImageListID := IL_Create(10)  ; Eine ImageList erstellen, die 10 kleine Symbole fassen kann.
LV_SetImageList(ImageListID)  ; Die obige ImageList der aktuellen ListView zuweisen.
Loop 10  ; Die ImageList mit einer Reihe von Symbolen aus der DLL laden.
    IL_Add(ImageListID, "shell32.dll", A_Index) 
Loop 10  ; Zeilen zur ListView hinzufügen (eine pro Symbol zur Illustration).
    LV_Add("Icon" . A_Index, A_Index, "n/a")
Gui Show
return

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

IL_Create

Erstellt eine neue ImageList, die zunächst leer ist.

ImageListID := IL_Create(AnfänglicheAnzahl, WachsendeAnzahl, GroßeSymbole)

Parameter

AnfänglicheAnzahl

Wenn weggelassen, wird standardmäßig 2 verwendet. Andernfalls geben Sie die Anzahl der Symbole an, die sofort in die Liste aufgenommen werden sollen.

WachsendeAnzahl

Wenn weggelassen, wird standardmäßig 5 verwendet. Andernfalls geben Sie die Anzahl der Symbole an, um die die Liste jedes Mal erweitert werden soll, wenn ihre Kapazität überschritten wird.

GroßeSymbole

Wenn weggelassen, wird standardmäßig 0 verwendet, d.h. die ImageList enthält kleine Symbole. Andernfalls geben Sie einen Wert ungleich 0 an, damit die ImageList große Symbole enthält. Symbole, die zur Liste hinzugefügt werden, werden automatisch skaliert, um den systeminternen Dimensionen für kleine und große Symbole zu entsprechen.

Rückgabewert

Bei Erfolg gibt diese Funktion die eindeutige ID der neuen ImageList zurück. Bei Misserfolg gibt sie 0 zurück.

IL_Add

Fügt ein Symbol oder Bild zu einer bestimmten ImageList hinzu.

SymbolIndex := IL_Add(ImageListID, SymbolDateiName , SymbolNummer)
SymbolIndex := IL_Add(ImageListID, BildDateiName, MaskeFarbe, Skalieren)

Parameter

ImageListID

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

SymbolDateiName

Der Name einer ICO- (Symbol), CUR- (Cursor) oder ANI-Datei (animierter Cursor, wird aber in einer ListView nicht animiert). Die folgenden Dateitypen sind ebenfalls für Symbole geeignet: EXE, DLL, CPL, SCR und andere Typen, die Symbolressourcen enthalten.

[v1.1.23+]: Anstelle eines Dateinamens kann auch ein Symbol-Handle verwendet werden, z.B. HICON:%Handle%.

SymbolNummer

Wenn weggelassen, wird standardmäßig 1 verwendet (die erste Symbolgruppe). Andernfalls geben Sie die Nummer der Symbolgruppe an, die in der Datei verwendet werden soll. Wenn die Nummer negativ ist, wird ihr Absolutwert als Ressourcen-ID eines Symbols innerhalb einer EXE-Datei vermutet. Das folgende Beispiel lädt das Standardsymbol aus der zweiten Symbolgruppe: IL_Add(ImageListID, "C:\Meine Anwendung.exe", 2).

BildDateiName

Der Name eines Nicht-Symbol-Bildes wie BMP, GIF und JPG. In Windows XP oder höher werden zusätzliche Bildformate wie PNG, TIF, Exif, WMF und EMF unterstützt. Um Betriebssysteme älter als XP zu unterstützen, kopieren Sie die GDIPlus.dll von Microsoft in den Ordner von AutoHotkey.exe (im Falle eines kompilierten Skripts muss die DLL in den Ordner des Skripts kopiert werden). Die DLL finden Sie unter www.microsoft.com mit Suchbegriffen wie: gdi redistributable

[v1.1.23+]: Anstelle eines Dateinamens kann auch ein Bild-Handle verwendet werden, z.B. HBITMAP:%Handle%.

MaskeFarbe

Die Zahl der Farbmaske/Transparenzfarbe. 0xFFFFFF (die Farbe weiß) ist für die meisten Bilder am besten geeignet.

Skalieren

Geben Sie einen Wert ungleich 0 an, um das Bild auf die Größe eines Symbols zu skalieren, oder 0, um das Bild in so viele Symbole wie möglich aufzuteilen.

Rückgabewert

Bei Erfolg gibt diese Funktion die Indexnummer des neuen Symbols zurück (1 ist das erste Symbol, 2 das zweite usw.). Bei Misserfolg gibt sie 0 zurück.

IL_Destroy

Löscht eine bestimmte ImageList.

IstZerstört := IL_Destroy(ImageListID)

Parameter

ImageListID

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

Rückgabewert

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

Bemerkungen

Es ist normalerweise nicht notwendig, ImageLists zu zerstören, da sie, wenn sie einmal mit einer ListView verbunden sind, automatisch zerstört werden, wenn die ListView oder ihr übergeordnetes Fenster zerstört wird. Wenn die ListView ihre ImageLists mit anderen ListViews teilt (indem sie 0x40 in ihren Optionen hat), sollte das Skript die ImageList explizit zerstören, nachdem es alle ListViews zerstört hat, die diese ImageList verwenden. Entsprechend sollte das Skript, wenn es eine der alten ImageLists mit einer neuen ersetzt, die alte explizit zerstören.

Bemerkungen

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

Nachdem eine Spalte sortiert wurde - z.B. durch Anklicken der Spaltenüberschrift oder Aufruf von LV_ModifyCol(1, "Sort") - erscheinen alle danach hinzugefügten Zeilen am Ende der Liste, anstatt die aktuelle Sortierreihenfolge zu berücksichtigen. Es sei denn, die Styles Sort und SortDesc werden verwendet, dann werden neue Zeilen an die korrekten Positionen verschoben.

Um einen Enter-Tastendruck in einer fokussierten ListView 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 != "MeineListView")
    return
MsgBox % "Sie haben ENTER gedrückt. Die Nummer der fokussierten Zeile ist " . LV_GetNext(0, "Focused")
return

Zusätzlich zur zeilenweisen Navigation mit der Tastatur kann der Benutzer auch eine inkrementelle Suche durchführen, indem er die ersten paar Zeichen eines in der ersten Spalte befindlichen Elements eingibt. Dadurch springt die Auswahl auf die nächst passende Zeile.

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

Obwohl die maximale Anzahl von Zeilen in einer ListView nur durch den verfügbaren Systemspeicher begrenzt ist, gibt es Möglichkeiten, die Performanz beim Hinzufügen von Zeilen erheblich zu verbessern. Einige davon finden Sie unter Count.

Es ist möglich, ein Bild als Hintergrund um eine ListView herum zu verwenden (also um die ListView damit einzurahmen). Um das zu realisieren, erstellen Sie ein Picture-Steuerelement nach der ListView und fügen Sie 0x4000000 (WS_CLIPSIBLINGS) in dessen Optionen ein.

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

Es ist ratsam, Spalten nicht direkt mit SendMessage einzufügen oder zu löschen. Der Grund dafür ist, dass das Programm für jede Spalte eine Sammlung von Sortiereinstellungen verwaltet und diese dann nicht mehr synchron wären. Verwenden Sie stattdessen die internen Spaltenfunktionen.

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

Mit ControlGet List können Texte aus externen ListViews (die nicht zum Skript gehören) extrahiert werden.

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

Beispiele

Wählt alle Zeilen aus oder ab, durch Angabe von 0 als Zeilennummer.

LV_Modify(0, "Select")   ; Alle auswählen.
LV_Modify(0, "-Select")  ; Alle abwählen.
LV_Modify(0, "-Check")  ; Die Häkchen von allen CheckBoxes entfernen.

Passt die Breite aller Spalten automatisch an ihren Inhalt an.

LV_ModifyCol()  ; Es gibt keine Parameter in diesem Modus.

Das folgende Beispiel ist ein lauffähiges Skript, das umfangreicher ist als das obige Beispiel. Es zeigt die Dateien eines vom Benutzer ausgewählten Ordners an und weist jeder Datei je nach Typ das entsprechende Symbol zu. Der Benutzer kann eine Datei doppelt anklicken, um sie zu öffnen, oder eine oder mehrere Dateien rechtsklicken, um ein Kontextmenü anzuzeigen.

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

; Einige Schaltflächen erstellen:
Gui, Add, Button, Default gButtonOrdnerLaden, Ordner laden
Gui, Add, Button, x+20 gButtonLeeren, Liste leeren
Gui, Add, Button, x+20, Ansicht wechseln

; ListView und ihre Spalten via Gui Add erstellen:
Gui, Add, ListView, xm r20 w700 vMeineListView gMeineListView, Name|Ordner|Größe (KB)|Typ
LV_ModifyCol(3, "Integer")  ; Aus Sortierungsgründen die Spalte "Größe" als Integer kennzeichnen.

; Eine ImageList erstellen, damit die ListView einige Symbole anzeigen kann:
ImageListID1 := IL_Create(10)
ImageListID2 := IL_Create(10, 10, true)  ; Eine Liste von großen Symbolen, analog zu den kleinen.

; Die ImageLists mit der ListView verbinden, damit diese später die Symbole anzeigen kann:
LV_SetImageList(ImageListID1)
LV_SetImageList(ImageListID2)

; Ein Kontextmenü erstellen:
Menu, MeinKontextmenü, Add, Öffnen, KontextDateiÖffnen
Menu, MeinKontextmenü, Add, Eigenschaften, KontextEigenschaften
Menu, MeinKontextmenü, Add, Aus der ListView entfernen, KontextZeilenLöschen
Menu, MeinKontextmenü, Default, Öffnen  ; "Öffnen" in fetter Schrift darstellen, um zu kennzeichnen, dass ein Doppelklick dasselbe bewirkt.

; Das Fenster anzeigen und in den Leerlauf gehen. Das System wird das Skript
; jedes Mal benachrichtigen, wenn der Benutzer eine gültige Aktion ausführt:
Gui, Show
return


ButtonOrdnerLaden:
Gui +OwnDialogs  ; Den Benutzer zwingen, das folgende Dialogfenster zu schließen, bevor er das Hauptfenster nutzen kann.
FileSelectFolder, Ordner,, 3, Wählen Sie einen Ordner zum Einlesen aus:
if not Ordner  ; Der Benutzer hat das Dialogfenster abgebrochen.
    return

; Prüfen, ob das letzte Zeichen im Ordnernamen ein umgekehrter Schrägstrich ist,
; was bei Root-Verzeichnissen wie C:\ vorkommt. Trifft dies zu, entfernen, um doppelte Schrägstriche zu vermeiden.
LetztesZeichen := SubStr(Ordner, 0)
if (LetztesZeichen = "\")
    Ordner := SubStr(Ordner, 1, -1)  ; Schrägstrich am Ende entfernen.

; Erforderliche Puffergröße für die SHFILEINFO-Struktur berechnen.
sfi_größe := A_PtrSize + 8 + (A_IsUnicode ? 680 : 340)
VarSetCapacity(sfi, sfi_größe)

; Eine Liste von Dateinamen zusammenstellen und zur ListView hinzufügen:
GuiControl, -Redraw, MeineListView  ; Performanz verbessern durch Abschalten von Redraw beim Laden.
Loop %Ordner%\*.*
{
    DateiName := A_LoopFileFullPath  ; Muss für unten in eine beschreibbare Variable gespeichert werden.

    ; Eindeutige Endungs-ID erstellen, um Zeichen zu vermeiden, die in Variablennamen
    ; illegal sind, wie z.B. Bindestriche. Außerdem ist diese Methode performanter,
    ; weil das Auffinden eines Elements in einem Array keine Suchschleife erfordert.
    SplitPath, DateiName,,, DateiEndung  ; Endung der Datei ermitteln.
    if DateiEndung in EXE,ICO,ANI,CUR
    {
        EndungID := DateiEndung  ; Spezial-ID als Platzhalter.
        SymbolNummer := 0  ; Als nicht gefunden markieren, so dass diese Typen jeweils ein eindeutiges Symbol haben können.
    }
    else  ; Irgendeine andere Endung/Dateityp, also ihre eindeutige ID berechnen.
    {
        EndungID := 0  ; Initialisieren, um Endungen zu behandeln, die kürzer sind als andere.
        Loop 7     ; Endung auf 7 Zeichen limitieren, damit sie in einem 64-Bit-Wert passt.
        {
            EndungZeichen := SubStr(DateiEndung, A_Index, 1)
            if not EndungZeichen  ; Keine weiteren Zeichen.
                break
            ; Eindeutige ID ableiten, indem jedem Zeichen eine andere Bitposition zugewiesen wird:
            EndungID := EndungID | (Asc(EndungZeichen) << (8 * (A_Index - 1)))
        }
        ; Prüfen, ob diese Dateiendung bereits ein Symbol in den ImageLists hat.
        ; Ist dies der Fall, können mehrere Aufrufe verhindert und die Ladeperformanz
        ; deutlich verbessert werden, insbesondere bei Ordnern mit sehr vielen Dateien:
        SymbolNummer := SymbolArray%EndungID%
    }
    if not SymbolNummer  ; Es gibt noch kein Symbol für diese Endung, also laden.
    {
        ; Hochqualitatives kleines Symbol abrufen, das mit dieser Dateieendung verknüpft ist:
        if not DllCall("Shell32\SHGetFileInfo" . (A_IsUnicode ? "W":"A"), "Str", DateiName
            , "UInt", 0, "Ptr", &sfi, "UInt", sfi_größe, "UInt", 0x101)  ; 0x101 ist SHGFI_ICON+SHGFI_SMALLICON
            SymbolNummer := 9999999  ; Eine Nummer außerhalb des gültigen Bereichs setzen, um ein leeres Symbol anzuzeigen.
        else ; Symbol erfolgreich geladen.
        {
            ; hIcon-Element aus der Struktur extrahieren:
            hIcon := NumGet(sfi, 0)
            ; HICON direkt zur Kleine-Symbole- und Große-Symbole-Liste hinzufügen.
            ; Unten +1 verwenden, um den Rückgabeindex in 1-basiert umzuwandeln:
            SymbolNummer := DllCall("ImageList_ReplaceIcon", "Ptr", ImageListID1, "Int", -1, "Ptr", hIcon) + 1
            DllCall("ImageList_ReplaceIcon", "Ptr", ImageListID2, "Int", -1, "Ptr", hIcon)
            ; Da es in die ImageLists kopiert wurde, sollte das Original zerstört werden:
            DllCall("DestroyIcon", "Ptr", hIcon)
            ; Symbol zwischenspeichern, um Speicherbedarf zu reduzieren und Ladeperformanz zu verbessern:
            SymbolArray%EndungID% := SymbolNummer
        }
    }

    ; Neue Zeile hinzufügen und ihr die oben ermittelte Symbolnummer zuweisen:
    LV_Add("Icon" . SymbolNummer, A_LoopFileName, A_LoopFileDir, A_LoopFileSizeKB, DateiEndung)
}
GuiControl, +Redraw, MeineListView  ; Neuzeichnung reaktivieren (wurde oben deaktiviert).
LV_ModifyCol()  ; Breite jeder Spalte an ihren Inhalt anpassen.
LV_ModifyCol(3, 65) ; Die Spalte "Größe" etwas breiter machen, um die Kopfzeile sichtbar zu machen.
return


ButtonLeeren:
LV_Delete()  ; ListView leeren, aber den Symbol-Cache intakt lassen.
return

ButtonAnsichtWechseln:
if not SymbolAnsicht
    GuiControl, +Icon, MeineListView    ; Zur Symbolansicht wechseln.
else
    GuiControl, +Report, MeineListView  ; Zur Detailansicht zurückwechseln.
SymbolAnsicht := not SymbolAnsicht             ; Fürs nächste Mal umkehren.
return

MeineListView:
if (A_GuiEvent = "DoubleClick")  ; Es könnten noch andere Werte geprüft werden.
{
    LV_GetText(DateiName, A_EventInfo, 1) ; Text des ersten Feldes abrufen.
    LV_GetText(DateiVerz, A_EventInfo, 2)  ; Text des zweiten Feldes abrufen.
    Run %DateiVerz%\%DateiName%,, UseErrorLevel
    if ErrorLevel
        MsgBox "%DateiVerz%\%DateiName%" konnte nicht geöffnet werden.
}
return

GuiContextMenu:  ; Startet bei Rechtsklick oder Drücken der MENÜ-Taste.
if (A_GuiControl != "MeineListView")  ; Das Menü nur für Klicks innerhalb der ListView anzeigen.
    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

KontextDateiÖffnen:  ; Der Benutzer hat "Öffnen" im Kontextmenü ausgewählt.
KontextEigenschaften:  ; Der Benutzer hat "Eigenschaften" im Kontextmenü ausgewählt.
; Nur mit der fokussierten Zeile arbeiten, nicht mit allen ausgewählten Zeilen:
FokussierteZeileNr := LV_GetNext(0, "F")  ; Die fokussierte Zeile finden.
if not FokussierteZeileNr  ; Keine Zeile fokussiert.
    return
LV_GetText(DateiName, FokussierteZeileNr, 1) ; Text des ersten Feldes abrufen.
LV_GetText(DateiVerz, FokussierteZeileNr, 2)  ; Text des zweiten Feldes abrufen.
if InStr(A_ThisMenuItem, "Öffnen")  ; Benutzer hat "Öffnen" im Kontextmenü ausgewählt.
    Run %DateiVerz%\%DateiName%,, UseErrorLevel
else  ; Der Benutzer hat "Eigenschaften" im Kontextmenü ausgewählt.
    Run Properties "%DateiVerz%\%DateiName%",, UseErrorLevel
if ErrorLevel
    MsgBox Gewünschte Aktion konnte nicht auf "%DateiVerz%\%DateiName%" angewendet werden.
return

KontextZeilenLöschen:  ; Der Benutzer hat "Leeren" im Kontextmenü ausgewählt.
ZeileNummer := 0  ; Die Suche bei der ersten Zeile beginnen.
Loop
{
    ; Da das Löschen einer Zeile die Zeilennummer aller anderen Zeilen darunter
    ; verringert, 1 subtrahieren, damit die Suche die zuvor gefundene Zeilennummer
    ; einbezieht (falls benachbarte Zeilen ausgewählt sind):
    ZeileNummer := LV_GetNext(ZeileNummer - 1)
    if not ZeileNummer  ; 0 zurückgegeben, also keine ausgewählten Zeilen mehr.
        break
    LV_Delete(ZeileNummer)  ; Die Zeile aus der ListView entfernen.
}
return

GuiSize:  ; ListView 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. ListView-Größe entsprechend anpassen.
GuiControl, Move, MeineListView, % "W" . (A_GuiWidth - 20) . " H" . (A_GuiHeight - 40)
return

GuiClose:  ; Das Skript automatisch beenden, wenn das Fenster geschlossen wird:
ExitApp