Tech-Ecke / Delphi Inhalt / TListBox |
|
TListBox
Grundlegendes Der Inhalt einer TListBox Komponente ist vergleichbar mit TStringList, also Strings in mehreren Zeilen. Die Aufzählung der Zeilen beginnt mit 0, also die erste Zeile ist 0 die zweite Zeile 1 die dritte Zeile 2 und so weiter... Eine Zeile wird in Delphi als Items bezeichnet. Jede einzelne Zeile (Items) für sich betrachtet ist ein String Ergo, ListBox1.Items[0] ist die erste Zeile der ListBox 1 "und quasi ein String", demzufolge gelten auch alle Operationen die für einen String gelten > siehe Stringoperationen. Tausche dazu einfach das "S" in den Beispielen durch ListBox1.Items[X] (wobei X die Zeile der ListBox ist). Länge des Textes in einer TListBox-Zeile (Items) ermitteln > siehe Stringoperationen Inhalt eines in einer TListBox-Zeile (Items) zurechtschneiden > siehe Stringoperationen Nach einem Zeichen oder Teilstring in einer TListBox-Zeile (Items) suchen > siehe Stringoperationen Zuweisen von Text ( var S: String;)
Auslesen einer Zeile ( var S: String;)
Zuweisen einer Zahl ( var Zahl: Integer; Gleitkommazahl: double;) [sieh auch > Umwandeln von Variablen]
Eintrag nur dann hinzufügen wenn dieser nicht vorhanden ist ( var S: String;)
Löschen einer Zeile (Items)
Kompletten Inhalt löschen
Anzahl der Zeilen (Items) ermitteln
Suchen nach Eintrag
Einfügen einer Zeile nach der aktuell markierten Zeile (Items) Dieses Beispiel fügt eine neue Zeile in eine ListBox ein. Die Einfügposition ist die, der zuvor markierten Zeile. Die Markierung wechselt zur eingefügten Zeile. Dabei wird zunächst der gesamte Inhalt der ListBox in eine TStringList (Puffer) geschaufelt, dann alle Einträge nach dem markierten Eintrag von der ListBox gelöscht, die neue Zeile hinzugefügt und anschließend die Einträge nach der Markierung angehangen. Dann wird der Inhalt der ListBox gelöscht und mit dem Inhalt von der TStringList wieder gefüllt.
Doppelte Einträge löschen
Inhalt aus Datei laden
Inhalt in Datei speichern
Kompletter Inhalt in eine TStringlist kopieren und wieder zurück
Markierte (selektierte) Zeile (Items) ermitteln
Markierung (Selektion) aufheben
TPopupMenu einbinden Zunächst eine TPopupMenu Komponente auf die Form ziehen. Danach bei der entsprechenden ListBox im Objektinspektor unter Ereignisse ins Feld PoupMenu klicken und das entsprechende PopupMenu auswählen. Nun durch einen Doppelklick auf die PopupMenu Komponente einen Eintrag hinzufügen (Objektinsektor muss dazu auf Eigenschaften stehen und der Cursor im Feld Caption stehen). Hinterlegt man nun diesem Eintrag eine Procedure (siehe TMainMenu) so kann in dieser die angewählte Zeile abfragen. Das geht so:
Mit Rechtsklick markieren Möchte man mit einem Rechtsklick, auch gleich die entsprechende ListBoxZeile markieren, dann hinterlegt man folgende Programmzeilen, hinter dem Ereignis OnMouseDown (Objektinspektor -> Ereignisse zur entsprechenden ListBox): Bitte beachte, dass die mit dem Hinweis versehene Zeile nur dann benötigt wird, wenn auch ein PopUpMenue vorhanden ist, ansonsten verursacht diese Zeile einen Zugriffsfehler.
Drag & Drop Um Einträge von einer zur anderen ListBox per Drag & Drop zu kopieren, muss man drei Schritte erledigen. Im folgenden Beispiel wird zunächst davon ausgegangen dass man Einträge von ListBox1 zur ListBox2 kopieren möchte.
Im Großen und Ganzen war's das schon, jedoch könnten folgende Ergänzungen noch recht interessant sein. Zu Schritt 2.) mit Accept := True; wird prinzipiell festgelegt, das die Quelle beliebiger Herkunft sein darf, also auch von einer anderen ListBox als ListBox2 oder gar einer Komponente. Um diese Freiheit auszunutzen muss man allerdings unter Schritt 3 einen anderen Code hinterlegen aber dazu weiter unten mehr. Man kann hier die Quelle aber auch schon einschränken. z.B. durch verwenden von:
Zu Schritt 3.) Mit dem oben im Beispiel gezeigtem Code ist die Quelle und das Ziel quasi festgelegt. Möchte man jedoch die Quelle hier nicht festlegen, um z.B. mehrere ListBox'en als mögliche Quelle zu nutzen, so könnte der Code wie folgt aussehen:
Oder man möchte z.B. ein TEdit als Ziel nutzen. Dann führt man die Schritte 1 und 2 an einer TEdit durch und unter Schritt 3 könnte die zweite Zeile so aussehen:
Verschieben von Items innerhalb einer ListBox Verschieben mittels Drag&Drop: Zunächst muss man im Objektinspektor den "dragMode" der betreffenden ListBox auf dmAutomatic setzen. Dies ist quasi das Einschalten der Funktionalität Drag&Drop. Damit nur Einträge innerhalb der ListBox akzeptiert werden schreibt man hinter dem Ereignis OnDragOver folgenden Code:
Und zum Schluss noch der Code für das eigentliche Verschieben, hinter dem Ereignis OnDragDrop: (var von, nach: Integer;)
Verschieben mittels Up- und Down-Button: Wie bei der Drag&Drop-Methode muss auch hier die Eigenschaft "dragMode" auf dmAutomatic gesetzt werden.
Hinter den gewünschten Buttons folgenden Code hinterlegen:
ListBox mit einem BMP vor jedem Eintrag Um die Optik der sonst recht schlichten TListBox etwas aufzupeppen kann z.B. vor jeden Eintrag ein BMP-Icon setzen. Und so geht's:Zunächst sollten folgende beiden Einstellungen zur betreffenden ListBox im Objektinspektor vorgenommen werden: Style auf lbOwnerDrawFixed setzen und bei ItemHeight die Pixelhöhe des BMP's angeben, bzw. 2 Pixel mehr angeben... Danach folgenden Code in der entsprechenden Unit platzieren:
Dann muss das Zeichnen der Einträge noch angestoßen werden. Hier im Beispiel hinter dem ListBox-Event OnDrawItem.
ListBox mit farbigen Zeilen
Eine weitere
Möglichkeit um eine ListBox ein wenig aufzupeppen ist, das
Einfärben von einzelnen Zeilen. Dazu muss zunächst im
Objektinspektor das
Style auf lbOwnerDrawFixed setzen.
Die einzelnen farbigen Items werden dann wie folgt hinzugefügt:
Möchte man farbige Einträge mit "BMP's vor jedem Item" kombinieren, so wird die entsprechend markierte Zeile im Quelltext gegen folgende Zeile getauscht:
|
Die Option Drucken funktioniert erst ab Netscape V4.0 bzw. I-Explorer 5.0 !
[letzte Aktualisierung 21.09.2008]