<script src="../static/ga4.js" type="text/javascript"></script> </head> <body> <h1>ListView</h1> <h2 id="toc">Inhaltsverzeichnis</h2> <ul> <li><a href="#Intro">Einführung und einfaches Beispiel</a></li> <li><a href="#Options">Optionen und Styles für den Optionen-Parameter</a></li> <li><a href="#View">Ansichtsmodi</a>: Report (Standard), Icon, Tile, IconSmall und List.</li> <li><a href="#BuiltIn">Interne ListView-Funktionen</a></li> <li><a href="#notify">G-Label-Benachrichtigungen</a></li> <li><a href="#IL">ImageLists</a> (Symbole zu einer ListView hinzufügen)</li> <li><a href="#Remarks">Bemerkungen</a></li> <li><a href="#Examples">Beispiele</a></li> </ul> <h2 id="Intro">Einführung und einfaches Beispiel</h2> <p>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.</p> <p>Eine typische ListView sieht wie folgt aus:</p> <img src="../static/ctrl_listview.png" alt="ListView" /> <p>Auch wenn es recht umfangreich erscheinen mag, sind die grundlegenden Features einer ListView relativ einfach zu bedienen. Die Syntax zum Erstellen einer ListView ist:</p> <pre class="Syntax" id="GuiAdd"><span class="func">Gui</span>, Add, ListView, Optionen, SpalteTitel1|SpalteTitel2|...</pre> <p>Das folgende Beispiel ist ein lauffähiges Skript, das alle Dateien im Ordner "Eigene Dateien" des Benutzers in einer ListView auflistet:</p> <pre><em>; Zweispaltige ListView erstellen:</em> Gui, Add, ListView, r20 w700 gMeineListView, Name|Größe (KB) <em>; Name und Größe jeder Datei in einem Ordner in die ListView einfügen:</em> Loop, %A_MyDocuments%\*.* <a href="#LV_Add">LV_Add</a>("", A_LoopFileName, A_LoopFileSizeKB) <a href="#LV_ModifyCol">LV_ModifyCol</a>() <em>; Breite jeder Spalte an ihren Inhalt anpassen.</em> LV_ModifyCol(2, "Integer") <em>; Aus Sortierungsgründen Spalte 2 als Integer kennzeichnen.</em> <em>; Das Fenster anzeigen und in den Leerlauf gehen. Das Skript wird jedes Mal benachrichtigt, wenn der Benutzer eine Zeile doppelt anklickt.</em> Gui, Show return MeineListView: if (A_GuiEvent = "DoubleClick") { <a href="#LV_GetText">LV_GetText</a>(ZeileText, A_EventInfo) <em>; Text des ersten Feldes der Zeile abrufen.</em> ToolTip Sie haben die Zeile %A_EventInfo% doppelt angeklickt. Text: "%ZeileText%" } return GuiClose: <em>; Skript automatisch beenden, wenn das Fenster geschlossen wird.</em> ExitApp</pre> <h2 id="Options">Optionen und Styles für den Optionen-Parameter</h2> <p id="AltSubmit"><strong>AltSubmit:</strong> Teilt dem Skript mehr ListView-Ereignisse als normal mit. Mit anderen Worten, das g-Label wird häufiger gestartet. Weitere Informationen finden Sie unter <a href="#notify">ListView-Benachrichtigungen</a>.</p> <p><strong>Background:</strong> Geben Sie das Wort <em>Background</em> an, unmittelbar gefolgt von einem Farbnamen (siehe <a href="Progress.htm#colors">Farbentabelle</a>) oder RGB-Wert (mit oder ohne 0x-Präfix). Beispiele: <code>BackgroundSilver</code>, <code>BackgroundFFDD99</code>. Wenn diese Option nicht vorhanden ist, verwendet die ListView als Hintergrundfarbe standardmäßig die Farbe, die im letzten Parameter von <a href="Gui.htm#Color">Gui Color</a> definiert ist (wenn keine definiert ist, dann die Standardhintergrundfarbe des Systems). Mit <code>BackgroundDefault</code> kann die Standardhintergrundfarbe des Systems gesetzt werden (in der Regel weiß). Zum Beispiel kann die Standardfarbe einer ListView via <code>GuiControl, +BackgroundDefault, MeineListView</code> wiederhergestellt werden.</p> <p><strong>C:</strong> Textfarbe. Geben Sie den Buchstaben C an, unmittelbar gefolgt von einem Farbnamen (siehe <a href="Progress.htm#colors">Farbentabelle</a>) oder RGB-Wert (mit oder ohne 0x-Präfix). Beispiele: <code>cRed</code>, <code>cFF2211</code>, <code>c0xFF2211</code>, <code>cDefault</code>.</p> <p id="Checked"><strong>Checked:</strong> Stellt eine CheckBox auf der linken Seite jeder Zeile bereit. Geben Sie beim <a href="#LV_Add">Hinzufügen</a> einer Zeile das Wort <em>Check</em> 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.</p> <p id="Count"><strong>Count:</strong> Geben Sie das Wort <em>Count</em> 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 <code>GuiControl, -Redraw, MeineListView</code>, bevor Sie eine große Anzahl von Zeilen hinzufügen. Verwenden Sie anschließend <code>GuiControl, +Redraw, MeineListView</code>, um die Neuzeichnung wieder zu aktivieren (wodurch auch das Steuerelement neu gezeichnet wird).</p> <p><strong>Grid:</strong> Zeigt horizontale und vertikale Linien an, um die Grenzen zwischen den Zeilen und Spalten zu verdeutlichen.</p> <p><strong>Hdr:</strong> Geben Sie <code>-Hdr</code> (minus Hdr) an, um die Kopfzeile (Spaltenüberschriften) zu verstecken. Um sie später wieder sichtbar zu machen, verwenden Sie <code>GuiControl, +Hdr, MeineListView</code>.</p> <p id="LVS_EX"><strong>LV:</strong> Geben Sie die Zeichenkette <em>LV</em> an, unmittelbar gefolgt von der Zahl eines <a href="../misc/Styles.htm#LVS_EX">erweiterten ListView-Styles</a>. Diese Styles sind etwas völlig anderes als die generischen erweiterten Styles. Zum Beispiel bewirkt <code>-E0x200</code>, dass der generische erweiterte Style WS_EX_CLIENTEDGE (Standardrahmen des Steuerelements) entfernt wird, während <code>-LV0x20</code> den erweiterten ListView-Style <a href="#frs">LVS_EX_FULLROWSELECT</a> entfernt.</p> <p><strong>LV0x10:</strong> Geben Sie <code>-LV0x10</code> 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.</p> <p id="frs"><strong>LV0x20:</strong> Geben Sie <code>-LV0x20</code> an, damit eine Zeile nur durch Anklicken des ersten Feldes ausgewählt werden kann (normalerweise kann sie durch Anklicken eines <em>beliebigen</em> Feldes ausgewählt werden). Diese Option hat den Vorteil, dass der Benutzer leichter ein Rechteck über mehrere Zeilen ziehen kann, um sie auszuwählen.</p> <p><strong>Multi:</strong> Geben Sie <code>-Multi</code> (minus Multi) an, um den Benutzer daran zu hindern, mehr als eine Zeile auszuwählen.</p> <p id="NoSortHdr"><strong>NoSortHdr:</strong> 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.</p> <p id="NoSort"><strong>NoSort:</strong> 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 <a href="#NoSortHdr">NoSortHdr</a>-Option oben wurde angegeben). Außerdem erhält das g-Label weiterhin die <a href="#ColClick">ColClick-Benachrichtigung</a>, die z.B. für eine benutzerdefinierte Sortierung verwendet werden kann.</p> <p id="ReadOnly"><strong>ReadOnly:</strong> Geben Sie <code>-ReadOnly</code> (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 <kbd>F2</kbd> (siehe <a href="#WantF2">WantF2</a>-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.</p> <p><strong>R:</strong> 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 <code>R10</code>, dass das Steuerelement 10 Zeilen hoch gemacht wird. Wenn die ListView mit einem anderen <a href="#View">Ansichtsmodus</a> als Report erstellt wurde, wird die Höhe des Steuerelements so angepasst, dass Symbolzeilen anstelle von Textzeilen hineinpassen. Hinweis: Wenn <a href="#IL">Symbole</a> zu den Zeilen einer ListView hinzugefügt werden, erhöht sich die Höhe jeder Zeile, wodurch diese Option ungenau wird.</p> <p id="Sort"><strong>Sort:</strong> Sortiert die Zeilen in alphabetischer Reihenfolge, basierend auf dem Inhalt der ersten Spalte.</p> <p id="SortDesc"><strong>SortDesc:</strong> Wie oben, aber in absteigender Reihenfolge.</p> <p id="WantF2"><strong>WantF2:</strong> In <span class="ver">[v1.0.44+]</span> kann <code>-WantF2</code> (minus WantF2) angegeben werden, um den Benutzer daran zu hindern, die aktuell fokussierte Zeile mit <kbd>F2</kbd> zu <a href="#ReadOnly">editieren</a>. Diese Einstellung wird ignoriert, es sei denn, <a href="#ReadOnly">-ReadOnly</a> ist ebenfalls wirksam. Unabhängig von dieser Einstellung erhält das g-Label weiterhin <a href="#NotifyK">F2-Benachrichtigungen</a>.</p> <p><strong>(Namenlose numerische Styles):</strong> Andere Styles als die oben genannten werden nur selten verwendet und haben daher keine Namen. Eine vollständige Liste finden Sie unter <a href="../misc/Styles.htm#ListView">ListView-Styles</a>.</p> <h2 id="View">Ansichtsmodi</h2> <p>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: <code>GuiControl, +IconSmall, MeineListView</code>.</p> <p><strong>Icon:</strong> Große-Symbole-Ansicht. In dieser und allen anderen Ansichten außer <em>Report</em> sind nur die Texte der ersten Spalte sichtbar. Um Symbole in dieser Ansicht anzuzeigen, muss der ListView eine Große-Symbole-<a href="#IL">ImageList</a> zugewiesen werden.</p> <p><strong>Tile:</strong> Große-Symbole-Ansicht, aber mit ergonomischen Unterschieden - z.B. wird der Text für jedes Element rechts vom Symbol angezeigt, nicht darunter. <a href="#Checked">Checkboxen</a> funktionieren nicht in dieser Ansicht. Außerdem wird der Versuch, diese Ansicht in Betriebssystemen älter als Windows XP anzuzeigen, ignoriert.</p> <p><strong>IconSmall:</strong> Kleine-Symbole-Ansicht.</p> <p><strong>List:</strong> 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.</p> <p><strong>Report:</strong> Wechselt zurück zur Report-Ansicht, was die Standardeinstellung für jede neue ListView ist. Zum Beispiel: <code>GuiControl, +Report, MeineListView</code>.</p> <h2 id="BuiltIn">Interne ListView-Funktionen</h2> <p>Alle folgenden ListView-Funktionen arbeiten mit dem <a href="Gui.htm#DefaultWin">Standard-GUI-Fenster</a> des aktuellen Threads (was z.B. mit <code><a href="Gui.htm#Default">Gui, 2:Default</a></code> 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.</p> <p id="GuiLV">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 <code>Gui, ListView, ListViewName</code>, wobei <em>ListViewName</em> entweder der Name der <a href="Gui.htm#var">zugeordneten Variable</a>, die ClassNN-Bezeichnung (wie vom internen Tool "Window Spy" angezeigt) oder in <span class="ver">[v1.1.04+]</span> die HWND-Nummer (eindeutige ID) der ListView ist. Einmal geändert, werden alle existierenden und zukünftigen <a href="../misc/Threads.htm">Threads</a> die angegebene ListView verwenden. <span class="ver">[v1.1.23+]</span>: <a href="../Variables.htm#DefaultListView">A_DefaultListView</a> enthält die aktuelle Einstellung.</p> <p id="RowNumber">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, <a href="#LV_GetText">LV_GetText()</a> in einer Schleife zu verwenden, um bestimmte Zeilen anhand ihres Inhalts zu lokalisieren.</p> <p id="bifRow">Zeilenfunktionen:</p> <ul> <li><a href="#LV_Add">LV_Add</a>: Fügt eine neue Zeile am Ende der Liste hinzu.</li> <li><a href="#LV_Insert">LV_Insert</a>: Fügt eine neue Zeile an einer bestimmten Zeilennummer ein.</li> <li><a href="#LV_Modify">LV_Modify</a>: Ändert die Attribute und/oder den Text einer Zeile.</li> <li><a href="#LV_Delete">LV_Delete</a>: Löscht eine bestimmte Zeile oder alle Zeilen.</li> </ul> <p id="bifCol">Spaltenfunktionen:</p> <ul> <li><a href="#LV_ModifyCol">LV_ModifyCol</a>: Ändert die Attribute und/oder den Text einer bestimmten Spalte und ihrer Überschrift.</li> <li><a href="#LV_InsertCol">LV_InsertCol</a>: Fügt eine neue Spalte an einer bestimmten Spaltennummer ein.</li> <li><a href="#LV_DeleteCol">LV_DeleteCol</a>: Löscht eine bestimmte Spalte und deren Inhalt.</li> </ul> <p id="bifGet">Abruffunktionen:</p> <ul> <li><a href="#LV_GetCount">LV_GetCount</a>: Gibt die Anzahl der Zeilen oder Spalten im Steuerelement zurück.</li> <li><a href="#LV_GetNext">LV_GetNext</a>: Gibt die Zeilennummer der nächsten ausgewählten, abgehakten oder fokussierten Zeile zurück.</li> <li><a href="#LV_GetText">LV_GetText</a>: Ruft den Text auf einer bestimmten Zeilen- und Spaltennummer ab.</li> </ul> <p id="bifIcon">Sonstige Funktionen:</p> <ul> <li><a href="#LV_SetImageList">LV_SetImageList</a>: Setzt oder ersetzt eine ImageList zur Darstellung von Symbolen.</li> </ul> <h3 id="LV_Add">LV_Add</h3> <p>Fügt eine neue Zeile am Ende der Liste hinzu.</p> <pre class="Syntax">ZeileNummer := <span class="func">LV_Add</span>(<span class="optional">Optionen, Spalte1, Spalte2, ...</span>)</pre> <h4 class="func_section" id="LV_Add_Parameters">Parameter</h4> <dl> <dt id="RowOptions">Optionen</dt> <dd> <p>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.</p> <p id="Check"><strong>Check:</strong> Zeigt ein Häkchen in der Zeile an (sofern die ListView über <a href="#Checked">Checkboxen</a> verfügt). Mit <code>LV_Modify(ZeileNummer, "-Check")</code> kann das Häkchen später wieder entfernt werden.</p> <p id="ColN"><strong>Col:</strong> Geben Sie das Wort <em>Col</em> an, unmittelbar gefolgt von der Spaltennummer, ab der die Parameter <em>Spalte1</em> usw. angewendet werden sollen. Diese Option wird häufig in Verbindung mit <a href="#LV_Modify">LV_Modify()</a> verwendet, um einzelne Felder in einer Zeile zu ändern, ohne die Felder links davon zu beeinflussen.</p> <p id="Focus"><strong>Focus:</strong> Setzt den Tastaturfokus auf die Zeile (wird oft in Verbindung mit <a href="#Select">Select</a> verwendet). Mit <code>LV_Modify(ZeileNummer, "-Focus")</code> kann der Fokus später wieder entfernt werden.</p> <p><strong>Icon:</strong> Geben Sie das Wort <em>Icon</em> 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 <a href="#IL">ImageList</a> 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 <a href="#View">Report-Ansicht</a> weder ein Symbol angezeigt noch Platz dafür reserviert.</p> <p>Die <em>Icon</em>-Option akzeptiert eine 1-basierte Symbolnummer, die jedoch intern in eine 0-basierte Indexnummer übersetzt wird; so dass <code>Icon0</code> der Konstanten <a href="https://learn.microsoft.com/windows/win32/controls/list-view-controls-overview#callback-items-and-the-callback-mask">I_IMAGECALLBACK</a> entspricht, die normalerweise als -1 definiert ist, und <code class="no-highlight">Icon-1</code> 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.</p> <p id="Select"><strong>Select:</strong> Wählt die Zeile aus. Mit <code>LV_Modify(ZeileNummer, "-Select")</code> kann die Zeile später wieder abgewählt werden. Beim Auswählen von Zeilen ist es ratsam, immer mindestens eine Zeile mit der <a href="#Focus">Fokus-Eigenschaft</a> zu versehen, damit die MENÜ-Taste ihr <a href="Gui.htm#GuiContextMenu">Kontextmenü</a> (falls vorhanden) in der Nähe der fokussierten Zeile anzeigen kann. Direkt nach dem Wort <em>Select</em> kann optional eine 0 oder 1 angegeben werden, um den Startzustand zu bestimmen. Mit anderen Worten, <code>"Select"</code> ist dasselbe wie <code>"Select" <strong>.</strong> VarEnthältEins</code> (wobei der Punkt ein <a href="../Variables.htm#concat">Verkettungsoperator</a> ist). Dies funktioniert auch mit den obigen Optionen <a href="#Focus">Focus</a> und <a href="#Check">Check</a>.</p> <p id="Vis"><strong>Vis</strong> <span class="ver">[v1.0.44+]</span>: Scrollt die ListView bei Bedarf automatisch, um sicherzustellen, dass die angegebene Zeile vollständig sichtbar ist. Diese Option funktioniert nur mit <a href="#LV_Modify">LV_Modify()</a>, z.B. <code>LV_Modify(ZeileNummer, "Vis")</code>.</p> </dd> <dt>Spalte1, Spalte2, ...</dt> <dd> <p>Die Spalten der neuen Zeile, die textuell oder numerisch sein können (einschließlich numerischer Ergebnisse von <a href="../Variables.htm#Expressions">Ausdrücken</a>). Um ein beliebiges Feld leer zu machen, geben Sie <code>""</code> 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.</p> </dd> </dl> <h4 class="func_section" id="LV_Add_Return_Value">Rückgabewert</h4> <p>Bei Erfolg gibt die Funktion die neue <a href="#RowNumber">Zeilennummer</a> zurück. Beachten Sie, dass diese Zeilennummer nicht unbedingt die letzte Zeile repräsentiert, wenn die ListView mit der <a href="#Sort">Sort</a>- oder <a href="#SortDesc">SortDesc</a>-Option erstellt wurde. Bei Misserfolg gibt sie 0 zurück.</p> <h3 id="LV_Insert">LV_Insert</h3> <p>Fügt eine neue Zeile an einer bestimmten Zeilennummer ein.</p> <pre class="Syntax">ZeileNummer := <span class="func">LV_Insert</span>(ZeileNummer <span class="optional">, Optionen, Spalte1, Spalte2, ...</span>)</pre> <h4 class="func_section" id="LV_Insert_Parameters">Parameter</h4> <dl> <dt>ZeileNummer</dt> <dd> <p>Die Nummer der neuen Zeile, die eingefügt werden soll. Alle Zeilen, die auf oder unterhalb von <em>ZeileNummer</em> sind, werden nach unten verschoben, um Platz für die neue Zeile zu schaffen. Wenn <em>ZeileNummer</em> 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.</p> </dd> <dt>Optionen</dt> <dd> <p>Wenn leer oder weggelassen, werden standardmäßig keine Optionen verwendet. Andernfalls geben Sie eine oder mehrere Optionen aus der <a href="#RowOptions">obigen Liste</a> an.</p> </dd> <dt>Spalte1, Spalte2, ...</dt> <dd> <p>Die Spalten der neuen Zeile, die textuell oder numerisch sein können (einschließlich numerischer Ergebnisse von <a href="../Variables.htm#Expressions">Ausdrücken</a>). Um ein beliebiges Feld leer zu machen, geben Sie <code>""</code> 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.</p> </dd> </dl> <h4 class="func_section" id="LV_Insert_Return_Value">Rückgabewert</h4> <p>Bei Erfolg gibt diese Funktion die angegebene Zeilennummer zurück. Bei Misserfolg gibt sie 0 zurück.</p> <h3 id="LV_Modify">LV_Modify</h3> <p>Ändert die Attribute und/oder den Text einer Zeile.</p> <pre class="Syntax">ZeileNummer := <span class="func">LV_Modify</span>(ZeileNummer <span class="optional">, Optionen, NeueSpalte1, NeueSpalte2, ...</span>)</pre> <h4 class="func_section" id="LV_Modify_Parameters">Parameter</h4> <dl> <dt>ZeileNummer</dt> <dd> <p>Die Nummer der Zeile, die geändert werden soll. Wenn 0, werden <u>alle</u> Zeilen im Steuerelement geändert.</p> </dd> <dt>Optionen</dt> <dd> <p>Wenn leer oder weggelassen, werden standardmäßig keine Optionen verwendet. Andernfalls geben Sie eine oder mehrere Optionen aus der <a href="#RowOptions">obigen Liste</a> an. Mit der <a href="#ColN">Col-Option</a> können bestimmte Spalten geändert werden, ohne die anderen zu beeinflussen.</p> </dd> <dt>NeueSpalte1, NeueSpalte2, ...</dt> <dd> <p>Die neuen Spalten der angegebenen Zeile, die textuell oder numerisch sein können (einschließlich numerischer Ergebnisse von <a href="../Variables.htm#Expressions">Ausdrücken</a>). Um ein beliebiges Feld leer zu machen, geben Sie <code>""</code> 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.</p> </dd> </dl> <h4 class="func_section" id="LV_Modify_Return_Value">Rückgabewert</h4> <p>Bei Erfolg gibt diese Funktion die angegebene Zeilennummer zurück. Bei Misserfolg gibt sie 0 zurück. Wenn <em>ZeileNummer</em> 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.</p> <h4 class="func_section" id="LV_Modify_Remarks">Bemerkungen</h4> <p>Wenn nur die ersten zwei Parameter vorhanden sind, werden nur die Attribute der Zeile geändert, nicht der Inhalt ihrer Felder.</p> <h3 id="LV_Delete">LV_Delete</h3> <p>Löscht eine bestimmte Zeile oder alle Zeilen.</p> <pre class="Syntax">IstGelöscht := <span class="func">LV_Delete</span>(<span class="optional">ZeileNummer</span>)</pre> <h4 class="func_section" id="LV_Delete_Parameters">Parameter</h4> <dl> <dt>ZeileNummer</dt> <dd> <p>Wenn weggelassen, werden <u>alle</u> Zeilen in der ListView gelöscht. Andernfalls geben Sie die Nummer der Zeile an, die gelöscht werden soll.</p> </dd> </dl> <h4 class="func_section" id="LV_Delete_Return_Value">Rückgabewert</h4> <p>Bei Erfolg gibt diese Funktion 1 (true) zurück. Bei Misserfolg gibt sie 0 (false) zurück.</p> <h3 id="LV_ModifyCol">LV_ModifyCol</h3> <p>Ändert die Attribute und/oder den Text einer bestimmten Spalte und ihrer Überschrift.</p> <pre class="Syntax">IstGeändert := <span class="func">LV_ModifyCol</span>(<span class="optional">SpalteNummer, Optionen, SpalteTitel</span>)</pre> <h4 class="func_section" id="LV_ModifyCol_Parameters">Parameter</h4> <dl> <dt>SpalteNummer</dt> <dd> <p>Wenn dieser und alle anderen Parameter weggelassen werden, wird die Breite jeder Spalte an den Inhalt der Zeilen angepasst. Dies funktioniert nur in der <a href="#View">Report-Ansicht</a>.</p> <p>Andernfalls geben Sie die Nummer der Spalte an, die geändert werden soll. Die erste Spalte ist 1 (nicht 0).</p> </dd> <dt id="ColOptions">Optionen</dt> <dd> <p>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.</p> <hr> <p id="Column_Options_General"><strong><em>Allgemeine Optionen:</em></strong></p> <p><strong>N:</strong> Geben Sie für <em>N</em> 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: <code>LV_ModifyCol(1, 50)</code> und <code>LV_ModifyCol(1, "50 Integer")</code>.</p> <p><strong>Auto:</strong> Passt die Breite der Spalte an den Inhalt ihrer Felder an. Dies funktioniert nur in der <a href="#View">Report-Ansicht</a>.</p> <p><strong>AutoHdr:</strong> 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 <a href="#View">Report-Ansicht</a>.</p> <p><strong>Icon:</strong> Geben Sie das Wort <em>Icon</em> an, unmittelbar gefolgt von der Nummer des <a href="#IL">ImageList</a>-Symbols, das neben der Spaltenüberschrift angezeigt werden soll. Geben Sie <code>-Icon</code> (minus Icon) an, um das Symbol wieder zu entfernen.</p> <p><strong>IconRight:</strong> Positioniert das Symbol auf der rechten statt linken Seite der Spalte.</p> <hr> <p id="Column_Options_Data_Type"><strong><em>Datentypoptionen:</em></strong></p> <p><strong>Float:</strong> 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.</p> <p id="Integer"><strong>Integer:</strong> 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. <code>0xF9E0</code>) sein.</p> <p id="Text"><strong>Text:</strong> 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 <a href="#Logical">Logical</a>-Option wird verwendet, dann liegt das Limit bei 4094).</p> <hr> <p id="Column_Options_Alignment"><strong><em>Ausrichtungsoptionen:</em></strong></p> <p><strong>Center:</strong> Zentriert den Text in der Spalte. Um eine Integer- oder Float-Spalte zu zentrieren, geben Sie das Wort <em>Center</em> nach dem Wort <em>Integer</em> oder <em>Float</em> an.</p> <p><strong>Left:</strong> 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.</p> <p><strong>Right:</strong> 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. <code>"Integer Left"</code> oder <code>"Float Center"</code> angeben.</p> <hr> <p id="Column_Options_Sorting"><strong><em>Sortierungsoptionen:</em></strong></p> <p id="Case"><strong>Case:</strong> Die Sortierung der Spalte erfolgt Groß-/Kleinschreibung-sensitiv (betrifft nur <a href="#Text">Textspalten</a>). Wenn die Optionen <em>Case</em>, <em>CaseLocale</em> und <em>Logical</em> weggelassen werden, werden die Großbuchstaben A bis Z und die entsprechenden Kleinbuchstaben bei der Sortierung als identisch betrachtet.</p> <p><strong>CaseLocale</strong> <span class="ver">[v1.0.43.03+]</span>: Die Sortierung der Spalte erfolgt nicht Groß-/Kleinschreibung-sensitiv, gemäß den aktuellen Sprach- und Regionseinstellungen des Benutzers (betrifft nur <a href="#Text">Textspalten</a>). 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.</p> <p id="Desc"><strong>Desc:</strong> Absteigende Reihenfolge. Die Spalte erscheint in absteigender Reihenfolge, wenn der Benutzer sie zum ersten Mal sortiert.</p> <p id="Logical"><strong>Logical</strong> <span class="ver">[v1.0.44.12+]</span>: Wie <em>CaseLocale</em>, 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". <em>Logical</em> benötigt Windows XP oder höher (in älteren Betriebssystemen wird stattdessen automatisch <em>CaseLocale</em> verwendet). Darüber hinaus schließen sich <em>Logical</em> und <em>Case</em> gegenseitig aus, d.h. nur die zuletzt angegebene Option ist wirksam.</p> <p><strong>NoSort:</strong> 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 <a href="#NoSort">NoSort</a> in die Optionen der ListView ein. Das g-Label, sofern vorhanden, erhält weiterhin die <a href="#ColClick">ColClick-Benachrichtigung</a>, wenn der Benutzer eine NoSort-Spalte anklickt.</p> <p><strong>Sort:</strong> Sortiert die Spalte sofort in aufsteigender Reihenfolge (selbst wenn sie die <a href="#Desc">Desc</a>-Option hat).</p> <p><strong>SortDesc:</strong> Sortiert die Spalte sofort in absteigender Reihenfolge.</p> <p><strong>Uni:</strong> Unidirektionale Sortierung. Verhindert, dass ein zweiter Klick auf dieselbe Spalte die Sortierrichtung umkehrt.</p> </dd> <dt>SpalteTitel</dt> <dd> <p>Wenn weggelassen, bleibt die aktuelle Überschrift unverändert. Andernfalls geben Sie die neue Spaltenüberschrift an.</p> </dd> </dl> <h4 class="func_section" id="LV_ModifyCol_Return_Value">Rückgabewert</h4> <p>Bei Erfolg gibt diese Funktion 1 (true) zurück. Bei Misserfolg gibt sie 0 (false) zurück.</p> <h3 id="LV_InsertCol">LV_InsertCol</h3> <p>Fügt eine neue Spalte an einer bestimmten Spaltennummer ein.</p> <pre class="Syntax">SpalteNummer := <span class="func">LV_InsertCol</span>(SpalteNummer <span class="optional">, Optionen, SpalteTitel</span>)</pre> <h4 class="func_section" id="LV_InsertCol_Parameters">Parameter</h4> <dl> <dt>SpalteNummer</dt> <dd> <p>Die Nummer der neuen Spalte, die eingefügt werden soll. Alle Spalten, die auf oder rechts von <em>SpalteNummer</em> sind, werden nach rechts verschoben, um Platz für die neue Spalte zu schaffen. Die erste Spalte ist 1 (nicht 0). Wenn <em>SpalteNummer</em> größer als die Anzahl der Spalten im Steuerelement ist, wird die neue Spalte rechts neben der letzten Spalte hinzugefügt.</p> </dd> <dt>Optionen</dt> <dd> <p>Wenn weggelassen, beginnt die Spalte immer mit ihren Standardeinstellungen, z.B. ob sie <a href="#Integer">Integer-Sortierung</a> verwendet oder nicht. Andernfalls geben Sie eine oder mehrere Optionen aus der <a href="#ColOptions">obigen Liste</a> an.</p> </dd> <dt>SpalteTitel</dt> <dd> <p>Wenn leer oder weggelassen, wird standardmäßig eine leere Überschrift verwendet. Andernfalls geben Sie die Spaltenüberschrift an.</p> </dd> </dl> <h4 class="func_section" id="LV_InsertCol_Return_Value">Rückgabewert</h4> <p>Bei Erfolg gibt diese Funktion die Positionsnummer der neuen Spalte zurück. Bei Misserfolg gibt sie 0 zurück.</p> <h4 class="func_section" id="LV_InsertCol_Remarks">Bemerkungen</h4> <p>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.</p> <p>Eine ListView kann maximal 200 Spalten enthalten.</p> <h3 id="LV_DeleteCol">LV_DeleteCol</h3> <p>Löscht eine bestimmte Spalte und deren Inhalt.</p> <pre class="Syntax">IstGelöscht := <span class="func">LV_DeleteCol</span>(SpalteNummer)</pre> <h4 class="func_section" id="LV_DeleteCol_Parameters">Parameter</h4> <dl> <dt>SpalteNummer</dt> <dd> <p>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 <code>LV_DeleteCol(2)</code> zweimal auf, würde dies dazu führen, dass die zweite und dritte Spalte gelöscht werden.</p> </dd> </dl> <h4 class="func_section" id="LV_DeleteCol_Return_Value">Rückgabewert</h4> <p>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.</p> <h3 id="LV_GetCount">LV_GetCount</h3> <p>Gibt die Anzahl der Zeilen oder Spalten im Steuerelement zurück.</p> <pre class="Syntax">Anzahl := <span class="func">LV_GetCount</span>(<span class="optional">Modus</span>)</pre> <h4 class="func_section" id="LV_GetCount_Parameters">Parameter</h4> <dl> <dt>Modus</dt> <dd> <p>Wenn leer oder weggelassen, gibt die Funktion die Gesamtzahl der Zeilen im Steuerelement zurück. Andernfalls geben Sie eine der folgenden Zeichenketten an:</p> <p><strong>S</strong> oder <strong>Selected</strong>: Die Anzahl beinhaltet nur die ausgewählten/markierten Zeilen.</p> <p><strong>Col</strong> oder <strong>Column</strong>: Die Funktion gibt die Anzahl der Spalten im Steuerelement zurück.</p> </dd> </dl> <h4 class="func_section" id="LV_GetCount_Return_Value">Rückgabewert</h4> <p>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.</p> <h4 class="func_section" id="LV_GetCount_Remarks">Bemerkungen</h4> <p>Diese Funktion wird oft in der obersten Zeile einer <a href="Loop.htm">Schleife</a> verwendet - in diesem Fall wird die Funktion nur einmal aufgerufen (vor der ersten Wiederholung). Zum Beispiel:</p> <pre>Loop % LV_GetCount() { LV_GetText(AbgerufenerText, A_Index) if InStr(AbgerufenerText, "beliebiger Filtertext") LV_Modify(A_Index, "Select") <em>; Jede Zeile auswählen, deren erstes Feld den Filtertext enthält.</em> }</pre> <p>Um die Spaltenbreiten einer ListView abzurufen, z.B. um sie in einer INI-Datei zwischenzuspeichern, gehen Sie wie folgt vor:</p> <pre>Gui +LastFound Loop % LV_GetCount("Column") { SendMessage, 0x101D, A_Index - 1, 0, SysListView321 <em>; 0x101D ist LVM_GETCOLUMNWIDTH.</em> MsgBox Die Spalte %A_Index% ist %ErrorLevel% Pixel breit. }</pre> <h3 id="LV_GetNext">LV_GetNext</h3> <p>Gibt die Zeilennummer der nächsten ausgewählten, abgehakten oder fokussierten Zeile zurück.</p> <pre class="Syntax">ZeileNummer := <span class="func">LV_GetNext</span>(<span class="optional">StartZeileNummer, ZeileTyp</span>)</pre> <h4 class="func_section" id="LV_GetNext_Parameters">Parameter</h4> <dl> <dt>StartZeileNummer</dt> <dd> <p>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, um die Suche bei der darauffolgenden Zeile zu beginnen.</p> </dd> <dt>ZeileTyp</dt> <dd> <p>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:</p> <p><strong>C</strong> oder <strong>Checked</strong>: Die nächste abgehakte Zeile suchen.</p> <p><strong>F</strong> oder <strong>Focused</strong>: Die fokussierte Zeile suchen. Es gibt nie mehr als eine fokussierte Zeile in der gesamten Liste, und manchmal gar keine.</p> </dd> </dl> <h4 class="func_section" id="LV_GetNext_Return_Value">Rückgabewert</h4> <p>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.</p> <h4 class="func_section" id="LV_GetNext_Remarks">Bemerkungen</h4> <p>Das folgende Beispiel meldet alle ausgewählten Zeilen in der ListView:</p> <pre>ZeileNummer := 0 <em>; Die Suche bei der ersten Zeile beginnen.</em> Loop { ZeileNummer := LV_GetNext(ZeileNummer) <em>; Die Suche bei der nächsten Zeile fortsetzen.</em> if not ZeileNummer <em>; 0 zurückgegeben, also keine ausgewählten Zeilen mehr.</em> break LV_GetText(Text, ZeileNummer) MsgBox Die nächste ausgewählte Zeile ist Nr. %ZeileNummer%, deren erstes Feld "%Text%" enthält. }</pre> <p>Das nächste Beispiel ist eine alternative Methode, um herauszufinden, ob eine bestimmte Zeilennummer abgehakt ist:</p> <pre>Gui +LastFound SendMessage, 0x102C, <i>ZeileNummer</i> - 1, 0xF000, SysListView321 <em>; 0x102C ist LVM_GETITEMSTATE. 0xF000 ist LVIS_STATEIMAGEMASK.</em> IstAbgehakt := (ErrorLevel &gt;&gt; 12) - 1 <em>; Setzt IstAbgehakt auf 1 (true), wenn <i>ZeileNummer</i> abgehakt ist, andernfalls auf 0 (false).</em></pre> <h3 id="LV_GetText">LV_GetText</h3> <p>Ruft den Text auf einer bestimmten Zeilen- und Spaltennummer ab.</p> <pre class="Syntax">IstAbgerufen := <span class="func">LV_GetText</span>(AusgabeVar, ZeileNummer <span class="optional">, SpalteNummer</span>)</pre> <h4 class="func_section" id="LV_GetText_Parameters">Parameter</h4> <dl> <dt>AusgabeVar</dt> <dd> <p>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.</p> </dd> <dt>ZeileNummer</dt> <dd> <p>Die Nummer der Zeile, deren Text abgerufen werden soll. Wenn leer oder 0, wird die Spaltenüberschrift abgerufen.</p> </dd> <dt>SpalteNummer</dt> <dd> <p>Wenn weggelassen, wird standardmäßig 1 verwendet (der Text der ersten Spalte). Andernfalls geben Sie die Nummer der Spalte an, in der sich <em>ZeileNummer</em> befindet.</p> </dd> </dl> <h4 class="func_section" id="LV_GetText_Return_Value">Rückgabewert</h4> <p>Bei Erfolg gibt diese Funktion 1 (true) zurück. Bei Misserfolg gibt sie 0 (false) zurück.</p> <h4 class="func_section" id="LV_GetText_Remarks">Bemerkungen</h4> <p>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.</p> <h3 id="LV_SetImageList">LV_SetImageList</h3> <p>Setzt oder ersetzt eine <a href="#IL">ImageList</a> zur Darstellung von Symbolen.</p> <pre class="Syntax">VorherigeImageListID := <span class="func">LV_SetImageList</span>(ImageListID <span class="optional">, SymbolTyp</span>)</pre> <h4 class="func_section" id="LV_SetImageList_Parameters">Parameter</h4> <dl> <dt>ImageListID</dt> <dd> <p>Die ID-Nummer, die von einem früheren Aufruf von <a href="#IL_Create">IL_Create()</a> zurückgegeben wurde.</p> </dd> <dt>SymbolTyp</dt> <dd> <p>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 <a href="PostMessage.htm">SendMessage</a> unterstützt).</p> </dd> </dl> <h4 class="func_section" id="LV_SetImageList_Return_Value">Rückgabewert</h4> <p>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 <a href="#IL_Destroy">IL_Destroy()</a> zerstört werden.</p> <h4 class="func_section" id="LV_SetImageList_Remarks">Bemerkungen</h4> <p>Diese Funktion wird normalerweise aufgerufen, bevor Zeilen zur ListView hinzugefügt werden. Sie weist der ListView eine <a href="#IL">ImageList</a> zu, die zur Darstellung von Symbolen in den Zeilen (und optional in den Spaltenüberschriften) verwendet wird.</p> <p>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.</p> <p>Obwohl alle <a href="#View">Ansichtsmodi</a> 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.</p> <h2 id="notify">G-Label-Benachrichtigungen (Primär)</h2> <p>Es ist möglich, ein <a href="Gui.htm#label">g-Label</a> wie z.B. <code><strong>g</strong>MeineSubroutine</code> in den Optionen des Steuerelements anzugeben. Dadurch wird jedes Mal, wenn der Benutzer eine Aktion im Steuerelement ausführt, das Label <em>MeineSubroutine</em> gestartet. Diese Subroutine kann die internen Variablen <a href="../Variables.htm#Gui">A_Gui</a> und <a href="../Variables.htm#GuiControl">A_GuiControl</a> verwenden, um zu ermitteln, welches Fenster und welche ListView für das Ereignis verantwortlich waren. Noch wichtiger ist, dass sie <strong>A_GuiEvent</strong> 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):</p> <p><strong>DoubleClick:</strong> Der Benutzer hat im Steuerelement einen Doppelklick gemacht. Die interne Variable A_EventInfo enthält die Nummer der fokussierten Zeile. Mit <a href="#LV_GetNext">LV_GetNext()</a> kann stattdessen die Nummer der ersten <em>ausgewählten</em> Zeile abgerufen werden (die Nummer ist 0, wenn der Benutzer eine leere Fläche doppelt angeklickt hat).</p> <p><strong>R:</strong> Der Benutzer hat im Steuerelement einen <em>doppelten Rechtsklick</em> gemacht. Die interne Variable A_EventInfo enthält die Nummer der fokussierten Zeile.</p> <p id="ColClick"><strong>ColClick:</strong> 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 <a href="FileSetTime.htm#YYYYMMDD">YYYYMMDD</a>-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 <code><a href="#LV_ModifyCol">LV_ModifyCol</a>(3, 0)</code> verstecken und dann die automatische Sortierung in der sichtbaren Spalte 2 via <code>LV_ModifyCol(2, "NoSort")</code> 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 <code>LV_ModifyCol(3, "Sort")</code> sortieren.</p> <p id="Drag"><strong>D:</strong> 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. <span class="ver">[v1.0.44+]</span>: Diese Benachrichtigung tritt auch ohne <a href="#AltSubmit">AltSubmit</a> auf.</p> <p><strong>d</strong> (kleines D): Dasselbe wie oben, außer dass beim Ziehen die rechte statt linke Maustaste verwendet wurde.</p> <p><strong>e</strong> (kleines E): Der Benutzer hat aufgehört, das erste Feld einer Zeile zu editieren (der Benutzer kann das Feld nur editieren, wenn <code><a href="#ReadOnly"><strong>-</strong>ReadOnly</a></code> in den Optionen der ListView vorhanden ist). Die interne Variable A_EventInfo enthält die Nummer der Zeile.</p> <h2 id="G-Label_Notifications_Secondary">G-Label-Benachrichtigungen (Sekundär)</h2> <p>Wenn das Wort AltSubmit in den <a href="#Options">Optionen</a> der ListView vorhanden ist, wird das g-Label häufiger gestartet und <strong>A_GuiEvent</strong> kann die folgenden zusätzlichen Werte enthalten:</p> <p><strong>Normal:</strong> Der Benutzer hat eine Zeile mit der linken Maustaste angeklickt. Die interne Variable A_EventInfo enthält die Nummer der fokussierten Zeile.</p> <p><strong>RightClick:</strong> 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 <a href="Gui.htm#GuiContextMenu">GuiContextMenu-Label</a>, da es auch die MENÜ-Taste erkennt. Zum Beispiel:</p> <pre>GuiContextMenu: <em>; Startet bei Rechtsklick oder Drücken der MENÜ-Taste.</em> if (A_GuiControl != "MeineListView") <em>; Diese Überprüfung ist optional. Das Menü wird nur für Klicks innerhalb der ListView angezeigt.</em> return <em>; 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:</em> Menu, MeinKontextmenü, Show, %A_GuiX%, %A_GuiY% return</pre> <p><strong>A:</strong> Eine Zeile wurde aktiviert, was standardmäßig durch einen Doppelklick geschieht. Die interne Variable A_EventInfo enthält die Nummer der Zeile.</p> <p><strong>C:</strong> Die ListView hat die Mauserfassung freigegeben.</p> <p><strong>E:</strong> Der Benutzer hat begonnen, das erste Feld einer Zeile zu editieren (der Benutzer kann das Feld nur editieren, wenn <a href="#ReadOnly">-ReadOnly</a> in den Optionen der ListView vorhanden ist). Die interne Variable A_EventInfo enthält die Nummer der Zeile.</p> <p><strong>F:</strong> Die ListView hat den Tastaturfokus erhalten.</p> <p><strong>f</strong> (kleines F): Die ListView hat den Tastaturfokus verloren.</p> <p id="ItemChanged"><strong>I:</strong> 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. <span class="ver">[v1.0.44+]</span>: Die interne Variable A_EventInfo enthält die Nummer der Zeile. <span class="ver">[v1.0.46.10+]</span>: <a href="../misc/ErrorLevel.htm">ErrorLevel</a> 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 <a href="LoopParse.htm">parsende Schleife</a> oder die GroßKleinSensitiv-Option von <a href="InStr.htm">InStr()</a>, z.B. <code>InStr(ErrorLevel, "S", true)</code>. 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 <a href="Critical.htm">Critical</a> in die erste Zeile von <a href="Gui.htm#label">g-Label</a> 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).</p> <p id="NotifyK"><strong>K:</strong> 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 <a href="GetKey.htm">GetKeyName()</a> in einen Tastennamen oder in ein Zeichen übersetzt werden. Zum Beispiel <code>Taste := GetKeyName(<a href="Format.htm">Format</a>("vk{:x}", A_EventInfo))</code>. Bei den meisten Tastaturbelegungen können die Tasten A bis Z via <code><a href="Chr.htm">Chr</a>(A_EventInfo)</code> in das entsprechende Zeichen übersetzt werden. <kbd>F2</kbd> wird unabhängig von <a href="#WantF2">WantF2</a> erfasst. <kbd>Enter</kbd> hingegen wird nicht erfasst; um es zu erfassen, verwenden Sie eine Standardschaltfläche, wie <a href="#Enter">unten</a> beschrieben.</p> <p><strong>M:</strong> Auswahlrechteck. Der Benutzer hat begonnen, ein Auswahlrechteck über mehrere Zeilen oder Symbole zu ziehen.</p> <p><strong>S:</strong> Der Benutzer hat begonnen, in der ListView zu scrollen.</p> <p><strong>s</strong> (kleines S): Der Benutzer hat aufgehört, in der ListView zu scrollen.</p> <h2 id="IL">ImageLists</h2> <p>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 <a href="#IL_Add">IL_Add()</a> 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:</p> <pre>Gui, Add, ListView, h200 w180, Symbol &amp; Nummer|Beschreibung <em>; Eine ListView erstellen.</em> ImageListID := <a href="#IL_Create">IL_Create</a>(10) <em>; Eine ImageList erstellen, die 10 kleine Symbole fassen kann.</em> <a href="#LV_SetImageList">LV_SetImageList</a>(ImageListID) <em>; Die obige ImageList der aktuellen ListView zuweisen.</em> Loop 10 <em>; Die ImageList mit einer Reihe von Symbolen aus der DLL laden.</em> <a href="#IL_Add">IL_Add</a>(ImageListID, "shell32.dll", A_Index) Loop 10 <em>; Zeilen zur ListView hinzufügen (eine pro Symbol zur Illustration).</em> LV_Add("Icon" . A_Index, A_Index, "n/a") Gui Show return GuiClose: <em>; Skript beenden, wenn der Benutzer die GUI der ListView schließt.</em> ExitApp</pre> <h3 id="IL_Create">IL_Create</h3> <p>Erstellt eine neue ImageList, die zunächst leer ist.</p> <pre class="Syntax">ImageListID := <span class="func">IL_Create</span>(<span class="optional">AnfänglicheAnzahl, WachsendeAnzahl, GroßeSymbole</span>)</pre> <h4 class="func_section" id="IL_Create_Parameters">Parameter</h4> <dl> <dt>AnfänglicheAnzahl</dt> <dd> <p>Wenn weggelassen, wird standardmäßig 2 verwendet. Andernfalls geben Sie die Anzahl der Symbole an, die sofort in die Liste aufgenommen werden sollen.</p> </dd> <dt>WachsendeAnzahl</dt> <dd> <p>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.</p> </dd> <dt>GroßeSymbole</dt> <dd> <p>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.</p> </dd> </dl> <h4 class="func_section" id="IL_Create_Return_Value">Rückgabewert</h4> <p>Bei Erfolg gibt diese Funktion die eindeutige ID der neuen ImageList zurück. Bei Misserfolg gibt sie 0 zurück.</p> <h3 id="IL_Add">IL_Add</h3> <p>Fügt ein Symbol oder Bild zu einer bestimmten ImageList hinzu.</p> <pre class="Syntax">SymbolIndex := <span class="func">IL_Add</span>(ImageListID, SymbolDateiName <span class="optional">, SymbolNummer</span>) SymbolIndex := <span class="func">IL_Add</span>(ImageListID, BildDateiName, MaskeFarbe, Skalieren)</pre> <h4 class="func_section" id="IL_Add_Parameters">Parameter</h4> <dl> <dt>ImageListID</dt> <dd> <p>Die ID-Nummer, die von einem früheren Aufruf von <a href="#IL_Create">IL_Create()</a> zurückgegeben wurde.</p> </dd> <dt>SymbolDateiName</dt> <dd> <p>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.</p> <p><span class="ver">[v1.1.23+]</span>: Anstelle eines Dateinamens kann auch ein <a href="../misc/ImageHandles.htm">Symbol-Handle</a> verwendet werden, z.B. <code>HICON:%Handle%</code>.</p> </dd> <dt>SymbolNummer</dt> <dd> <p>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: <code>IL_Add(ImageListID, "C:\Meine Anwendung.exe", 2)</code>.</p> </dd> <dt>BildDateiName</dt> <dd> <p>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 <a href="../Scripts.htm#ahk2exe">kompilierten Skripts</a> muss die DLL in den Ordner des Skripts kopiert werden). Die DLL finden Sie unter <a href="https://www.microsoft.com">www.microsoft.com</a> mit Suchbegriffen wie: gdi redistributable</p> <p><span class="ver">[v1.1.23+]</span>: Anstelle eines Dateinamens kann auch ein <a href="../misc/ImageHandles.htm">Bild-Handle</a> verwendet werden, z.B. <code>HBITMAP:%Handle%</code>.</p> </dd> <dt>MaskeFarbe</dt> <dd> <p>Die Zahl der Farbmaske/Transparenzfarbe. 0xFFFFFF (die Farbe weiß) ist für die meisten Bilder am besten geeignet.</p> </dd> <dt>Skalieren</dt> <dd> <p>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.</p> </dd> </dl> <h4 class="func_section" id="IL_Add_Return_Value">Rückgabewert</h4> <p>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.</p> <h3 id="IL_Destroy">IL_Destroy</h3> <p>Löscht eine bestimmte ImageList.</p> <pre class="Syntax">IstZerstört := <span class="func">IL_Destroy</span>(ImageListID)</pre> <h4 class="func_section" id="IL_Destroy_Parameters">Parameter</h4> <dl> <dt>ImageListID</dt> <dd> <p>Die ID-Nummer, die von einem früheren Aufruf von <a href="#IL_Create">IL_Create()</a> zurückgegeben wurde.</p> </dd> </dl> <h4 class="func_section" id="IL_Destroy_Return_Value">Rückgabewert</h4> <p>Bei Erfolg gibt diese Funktion 1 (true) zurück. Bei Misserfolg gibt sie 0 (false) zurück.</p> <h4 class="func_section" id="IL_Destroy_Remarks">Bemerkungen</h4> <p>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.</p> <h2 id="Remarks">Bemerkungen</h2> <p>Der Befehl <a href="Gui.htm#Submit">Gui Submit</a> funktioniert nicht mit einem ListView-Steuerelement. Demzufolge kann die <a href="Gui.htm#var">zugeordnete Variable</a> der ListView (falls vorhanden) verwendet werden, um andere Daten zu speichern, ohne befürchten zu müssen, dass diese jemals überschrieben werden.</p> <p>Nachdem eine Spalte sortiert wurde - z.B. durch Anklicken der Spaltenüberschrift oder Aufruf von <code><a href="#LV_ModifyCol">LV_ModifyCol</a>(1, "Sort")</code> - erscheinen alle danach hinzugefügten Zeilen am Ende der Liste, anstatt die aktuelle Sortierreihenfolge zu berücksichtigen. Es sei denn, die Styles <a href="#Sort">Sort</a> und <a href="#SortDesc">SortDesc</a> werden verwendet, dann werden neue Zeilen an die korrekten Positionen verschoben.</p> <p id="Enter">Um einen <kbd>Enter</kbd>-Tastendruck in einer fokussierten ListView zu erfassen, verwenden Sie eine <a href="GuiControls.htm#DefaultButton">Standardschaltfläche</a> (die bei Bedarf versteckt werden kann). Zum Beispiel:</p> <pre>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</pre> <p>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.</p> <p>Obwohl ein beliebig langer Text in einem ListView-Feld gespeichert werden kann, werden nur die ersten 260 Zeichen angezeigt.</p> <p>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 <a href="#Count">Count</a>.</p> <p>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 <a href="GuiControls.htm#Picture">Picture-Steuerelement</a> nach der ListView und fügen Sie 0x4000000 (WS_CLIPSIBLINGS) in dessen <em>Optionen</em> ein.</p> <p>Ein Skript kann mehr als eine ListView pro Fenster erstellen. Um mit einer anderen ListView zu arbeiten, siehe <a href="#BuiltIn">interne Funktionen</a>.</p> <p>Es ist ratsam, Spalten nicht direkt mit <a href="PostMessage.htm">SendMessage</a> einzufügen oder zu löschen. Der Grund dafür ist, dass das Programm für jede Spalte eine Sammlung von <a href="#Integer">Sortiereinstellungen</a> verwaltet und diese dann nicht mehr synchron wären. Verwenden Sie stattdessen die <a href="#BuiltIn">internen Spaltenfunktionen</a>.</p> <p>Mit <a href="GuiControl.htm">GuiControl</a> kann eine ListView z.B. größer/kleiner gemacht, versteckt oder mit einer anderen Schrift versehen werden.</p> <p>Mit <a href="ControlGet.htm#List">ControlGet List</a> können Texte aus externen ListViews (die nicht zum Skript gehören) extrahiert werden.</p> <h2 id="Related">Siehe auch</h2> <p><a href="TreeView.htm">TreeView</a>, <a href="GuiControls.htm">Andere Steuerelemente</a>, <a href="Gui.htm">Gui</a>, <a href="Gui.htm#GuiContextMenu">GuiContextMenu</a>, <a href="GuiControl.htm">GuiControl</a>, <a href="GuiControlGet.htm">GuiControlGet</a>, <a href="../misc/Styles.htm#ListView">ListView-Styles</a></p> <h2 id="Examples">Beispiele</h2> <div class="ex" id="ExAllRows"> <p><a class="ex_number" href="#ExAllRows"></a> Wählt alle Zeilen aus oder ab, durch Angabe von 0 als Zeilennummer.</p> <pre><a href="#LV_Modify">LV_Modify</a>(0, "Select") <em>; Alle auswählen.</em> LV_Modify(0, "-Select") <em>; Alle abwählen.</em> LV_Modify(0, "-Check") <em>; Die Häkchen von allen <a href="#Checked">CheckBoxes</a> entfernen.</em></pre> </div> <div class="ex" id="ExAutoSize"> <p><a class="ex_number" href="#ExAutoSize"></a> Passt die Breite aller Spalten automatisch an ihren Inhalt an.</p> <pre><a href="#LV_ModifyCol">LV_ModifyCol</a>() <em>; Es gibt keine Parameter in diesem Modus.</em></pre> </div> <div class="ex" id="ExAdvanced"> <p><a class="ex_number" href="#ExAdvanced"></a> 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.</p> <pre><em>; Dem Benutzer erlauben, das Fenster zu maximieren oder dessen Größe zu ändern:</em> Gui +Resize <em>; Einige Schaltflächen erstellen:</em> Gui, Add, Button, Default gButtonOrdnerLaden, Ordner laden Gui, Add, Button, x+20 gButtonLeeren, Liste leeren Gui, Add, Button, x+20, Ansicht wechseln <em>; ListView und ihre Spalten via <a href="#GuiAdd">Gui Add</a> erstellen:</em> Gui, Add, ListView, xm r20 w700 vMeineListView gMeineListView, Name|Ordner|Größe (KB)|Typ <a href="#LV_ModifyCol">LV_ModifyCol</a>(3, "Integer") <em>; Aus Sortierungsgründen die Spalte "Größe" als Integer kennzeichnen.</em> <em>; Eine ImageList erstellen, damit die ListView einige Symbole anzeigen kann:</em> ImageListID1 := <a href="#IL_Create">IL_Create</a>(10) ImageListID2 := IL_Create(10, 10, true) <em>; Eine Liste von großen Symbolen, analog zu den kleinen.</em> <em>; Die ImageLists mit der ListView verbinden, damit diese später die Symbole anzeigen kann:</em> <a href="#LV_SetImageList">LV_SetImageList</a>(ImageListID1) LV_SetImageList(ImageListID2) <em>; Ein Kontextmenü erstellen:</em> <a href="Menu.htm">Menu</a>, MeinKontextmenü, Add, Öffnen, KontextDateiÖffnen Menu, MeinKontextmenü, Add, Eigenschaften, KontextEigenschaften Menu, MeinKontextmenü, Add, Aus der ListView entfernen, KontextZeilenLöschen Menu, MeinKontextmenü, Default, Öffnen <em>; "Öffnen" in fetter Schrift darstellen, um zu kennzeichnen, dass ein Doppelklick dasselbe bewirkt.</em> <em>; 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:</em> Gui, Show return ButtonOrdnerLaden: Gui +OwnDialogs <em>; Den Benutzer zwingen, das folgende Dialogfenster zu schließen, bevor er das Hauptfenster nutzen kann.</em> FileSelectFolder, Ordner,, 3, Wählen Sie einen Ordner zum Einlesen aus: if not Ordner <em>; Der Benutzer hat das Dialogfenster abgebrochen.</em> return <em>; 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.</em> LetztesZeichen := SubStr(Ordner, 0) if (LetztesZeichen = "\") Ordner := SubStr(Ordner, 1, -1) <em>; Schrägstrich am Ende entfernen.</em> <em>; Erforderliche Puffergröße für die SHFILEINFO-Struktur berechnen.</em> sfi_größe := A_PtrSize + 8 + (A_IsUnicode ? 680 : 340) VarSetCapacity(sfi, sfi_größe) <em>; Eine Liste von Dateinamen zusammenstellen und zur ListView hinzufügen:</em> GuiControl, -Redraw, MeineListView <em>; Performanz verbessern durch Abschalten von Redraw beim Laden.</em> Loop %Ordner%\*.* { DateiName := A_LoopFileFullPath <em>; Muss für unten in eine beschreibbare Variable gespeichert werden.</em> <em>; Eindeutige Endungs-ID erstellen, um Zeichen zu vermeiden, die in Variablennamen</em> <em>; illegal sind, wie z.B. Bindestriche. Außerdem ist diese Methode performanter,</em> <em>; weil das Auffinden eines Elements in einem Array keine Suchschleife erfordert.</em> SplitPath, DateiName,,, DateiEndung <em>; Endung der Datei ermitteln.</em> if DateiEndung in EXE,ICO,ANI,CUR { EndungID := DateiEndung <em>; Spezial-ID als Platzhalter.</em> SymbolNummer := 0 <em>; Als nicht gefunden markieren, so dass diese Typen jeweils ein eindeutiges Symbol haben können.</em> } else <em>; Irgendeine andere Endung/Dateityp, also ihre eindeutige ID berechnen.</em> { EndungID := 0 <em>; Initialisieren, um Endungen zu behandeln, die kürzer sind als andere.</em> Loop 7 <em>; Endung auf 7 Zeichen limitieren, damit sie in einem 64-Bit-Wert passt.</em> { EndungZeichen := SubStr(DateiEndung, A_Index, 1) if not EndungZeichen <em>; Keine weiteren Zeichen.</em> break <em>; Eindeutige ID ableiten, indem jedem Zeichen eine andere Bitposition zugewiesen wird:</em> EndungID := EndungID | (Asc(EndungZeichen) &lt;&lt; (8 * (A_Index - 1))) } <em>; Prüfen, ob diese Dateiendung bereits ein Symbol in den ImageLists hat.</em> <em>; Ist dies der Fall, können mehrere Aufrufe verhindert und die Ladeperformanz</em> <em>; deutlich verbessert werden, insbesondere bei Ordnern mit sehr vielen Dateien:</em> SymbolNummer := SymbolArray%EndungID% } if not SymbolNummer <em>; Es gibt noch kein Symbol für diese Endung, also laden.</em> { <em>; Hochqualitatives kleines Symbol abrufen, das mit dieser Dateieendung verknüpft ist:</em> if not DllCall("Shell32\SHGetFileInfo" . (A_IsUnicode ? "W":"A"), "Str", DateiName , "UInt", 0, "Ptr", &amp;sfi, "UInt", sfi_größe, "UInt", 0x101) <em>; 0x101 ist SHGFI_ICON+SHGFI_SMALLICON</em> SymbolNummer := 9999999 <em>; Eine Nummer außerhalb des gültigen Bereichs setzen, um ein leeres Symbol anzuzeigen.</em> else <em>; Symbol erfolgreich geladen.</em> { <em>; hIcon-Element aus der Struktur extrahieren:</em> hIcon := NumGet(sfi, 0) <em>; HICON direkt zur Kleine-Symbole- und Große-Symbole-Liste hinzufügen.</em> <em>; Unten +1 verwenden, um den Rückgabeindex in 1-basiert umzuwandeln:</em> SymbolNummer := DllCall("ImageList_ReplaceIcon", "Ptr", ImageListID1, "Int", -1, "Ptr", hIcon) + 1 DllCall("ImageList_ReplaceIcon", "Ptr", ImageListID2, "Int", -1, "Ptr", hIcon) <em>; Da es in die ImageLists kopiert wurde, sollte das Original zerstört werden:</em> DllCall("DestroyIcon", "Ptr", hIcon) <em>; Symbol zwischenspeichern, um Speicherbedarf zu reduzieren und Ladeperformanz zu verbessern:</em> SymbolArray%EndungID% := SymbolNummer } } <em>; Neue Zeile hinzufügen und ihr die oben ermittelte Symbolnummer zuweisen:</em> <a href="#LV_Add">LV_Add</a>("Icon" . SymbolNummer, A_LoopFileName, A_LoopFileDir, A_LoopFileSizeKB, DateiEndung) } GuiControl, +Redraw, MeineListView <em>; Neuzeichnung reaktivieren (wurde oben deaktiviert).</em> LV_ModifyCol() <em>; Breite jeder Spalte an ihren Inhalt anpassen.</em> LV_ModifyCol(3, 65) <em>; Die Spalte "Größe" etwas breiter machen, um die Kopfzeile sichtbar zu machen.</em> return ButtonLeeren: <a href="#LV_Delete">LV_Delete</a>() <em>; ListView leeren, aber den Symbol-Cache intakt lassen.</em> return ButtonAnsichtWechseln: if not SymbolAnsicht GuiControl, +Icon, MeineListView <em>; Zur Symbolansicht wechseln.</em> else GuiControl, +Report, MeineListView <em>; Zur Detailansicht zurückwechseln.</em> SymbolAnsicht := not SymbolAnsicht <em>; Fürs nächste Mal umkehren.</em> return MeineListView: if (A_GuiEvent = "DoubleClick") <em>; Es könnten noch andere Werte geprüft werden.</em> { <a href="#LV_GetText">LV_GetText</a>(DateiName, A_EventInfo, 1) <em>; Text des ersten Feldes abrufen.</em> LV_GetText(DateiVerz, A_EventInfo, 2) <em>; Text des zweiten Feldes abrufen.</em> Run %DateiVerz%\%DateiName%,, UseErrorLevel if ErrorLevel MsgBox "%DateiVerz%\%DateiName%" konnte nicht geöffnet werden. } return <a href="Gui.htm#GuiContextMenu">GuiContextMenu</a>: <em>; Startet bei Rechtsklick oder Drücken der MENÜ-Taste.</em> if (A_GuiControl != "MeineListView") <em>; Das Menü nur für Klicks innerhalb der ListView anzeigen.</em> return <em>; 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:</em> Menu, MeinKontextmenü, Show, %A_GuiX%, %A_GuiY% return KontextDateiÖffnen: <em>; Der Benutzer hat "Öffnen" im Kontextmenü ausgewählt.</em> KontextEigenschaften: <em>; Der Benutzer hat "Eigenschaften" im Kontextmenü ausgewählt. ; Nur mit der fokussierten Zeile arbeiten, nicht mit allen ausgewählten Zeilen:</em> FokussierteZeileNr := <a href="#LV_GetNext">LV_GetNext</a>(0, "F") <em>; Die fokussierte Zeile finden.</em> if not FokussierteZeileNr <em>; Keine Zeile fokussiert.</em> return LV_GetText(DateiName, FokussierteZeileNr, 1) <em>; Text des ersten Feldes abrufen.</em> LV_GetText(DateiVerz, FokussierteZeileNr, 2) <em>; Text des zweiten Feldes abrufen.</em> if InStr(A_ThisMenuItem, "Öffnen") <em>; Benutzer hat "Öffnen" im Kontextmenü ausgewählt.</em> Run %DateiVerz%\%DateiName%,, UseErrorLevel else <em>; Der Benutzer hat "Eigenschaften" im Kontextmenü ausgewählt.</em> Run Properties "%DateiVerz%\%DateiName%",, UseErrorLevel if ErrorLevel MsgBox Gewünschte Aktion konnte nicht auf "%DateiVerz%\%DateiName%" angewendet werden. return KontextZeilenLöschen: <em>; Der Benutzer hat "Leeren" im Kontextmenü ausgewählt.</em> ZeileNummer := 0 <em>; Die Suche bei der ersten Zeile beginnen.</em> Loop { <em>; Da das Löschen einer Zeile die Zeilennummer aller anderen Zeilen darunter</em> <em>; verringert, 1 subtrahieren, damit die Suche die zuvor gefundene Zeilennummer</em> <em>; einbezieht (falls benachbarte Zeilen ausgewählt sind):</em> ZeileNummer := LV_GetNext(ZeileNummer - 1) if not ZeileNummer <em>; 0 zurückgegeben, also keine ausgewählten Zeilen mehr.</em> break LV_Delete(ZeileNummer) <em>; Die Zeile aus der ListView entfernen.</em> } return GuiSize: <em>; ListView kleiner/größer machen, wenn Benutzer die Fenstergröße ändert.</em> if (A_EventInfo = 1) <em>; Das Fenster wurde minimiert. Keine Aktion notwendig.</em> return <em>; Andernfalls wurde das Fenster kleiner/größer gemacht oder maximiert. ListView-Größe entsprechend anpassen.</em> GuiControl, Move, MeineListView, % "W" . (A_GuiWidth - 20) . " H" . (A_GuiHeight - 40) return GuiClose: <em>; Das Skript automatisch beenden, wenn das Fenster geschlossen wird:</em> ExitApp</pre> </div> </body> </html>