Sign in Join
Wiki copytemporary

TListBox/de

Deutsch · English · Français · Suomi · 日本語

Diese Seite erklärt, wie man die TListBox Komponente verwendet. Auf etwas klicken bedeutet immer ein Linksklick, ein Rechtsklick wird explizit erwähnt.

Beschreibung

Eine scrollbare Liste von Strings.

Verwendung

Um eine TListBox auf einem Formular zu nutzen, kann man sie einfach auf der Komponentenpalette Standard auswählen und, mit einem Klick auf das Formular, platzieren.
Die, in der ListBox hinterlegten, Strings sind in der Eigenschaft Items hinterlegt, die vom Typ TStrings ist. Somit können Sie Strings der Listbox zuweisen oder entfernen, wie bei einer TStringList oder ihres Vorfahrens TStrings.

Nachfolgend ein paar Beispiele zur Verwendung einer ListBox ListBox1 auf einem Formular Form1:

ListBox füllen

per Objektinspektor

per Code bei Buttonklick

pascal
procedure TForm1.btnFillClick(Sender: TObject);
begin
  ListBox1.Items.Clear;             //Alle vorhandenen Strings löschen
  ListBox1.Items.Add('Erste Zeile');
  ListBox1.Items.Add('Zeile mit Zufallszahl '+IntToStr(Random(100)));
  ListBox1.Items.Add('Dritte Zeile');
  ListBox1.Items.Add('Noch eine Zufallszahl '+IntToStr(Random(100)));
end;

Zuweisung einer StringList

pascal
procedure TForm1.btnFillClick(Sender: TObject);
var
  myStringList: TStringList;
begin
  myStringList:=TStringList.Create;               //Meine StringList erstellen
  myStringList.Add('Das ist die erste Zeile.');   //dieser eine Zeile zufügen
  myStringList.Add('Das ist die zweite Zeile.');
  myStringList.Add('Das ist die dritte Zeile.');
  myStringList.Add('usw.');
  ListBox1.Items.Assign(myStringList);            //der ListBox1 den Textinhalt meine StringList zuweisen
  myStringList.Free;                              //Meine StringList im Speicher wieder freigeben
end;

String zufügen

pascal
procedure TForm1.btnAddClick(Sender: TObject);
begin
  ListBox1.Items.Add(Edit1.Text);
  Edit1.Text:='';
end;

String löschen

Standardgemäß ist eingestellt, dass Sie nur eine Zeile in Ihrer Listbox selektieren können. Wollen Sie mehere Zeilen in Ihrer ListBox auswählen können, müssten Sie die Eigenschaft MultiSelect auf True stellen.

Lösche String bei ItemIndex

pascal
procedure TForm1.btnDelClick(Sender: TObject);
begin
  if ListBox1.ItemIndex > -1 then    //Nur löschen, wenn ein String in der Listbox selektiert ist
    ListBox1.Items.Delete(ListBox1.ItemIndex);
end;

Lösche alle selektierten Strings

pascal
procedure TForm1.btnDelClick(Sender: TObject);
var
  i: Integer;
begin
  if ListBox1.SelCount > 0 then                 //Nur löschen, wenn min. ein String in der Listbox selektiert ist
    for i:=ListBox1.Items.Count - 1 downto 0 do //Alle Items durchlaufen
      if ListBox1.Selected[i] then              //Falls ausgewählt...
        ListBox1.Items.Delete(i);               //...das Item (String) löschen
end;

ListBox selber zeichnen

Allgemein ist es günstig, die ListBox in dem vom Nutzer eingestellen Thema darstellen zu lassen. In manchen Fällen (programmiert man z.B. ein Spiel mit einer bunten Oberfläche), kann man jedoch auch von diesem Standard abweichen und die Listbox nach eigenem Wunsch zeichnen. Wie das geht, können Sie jetzt ausprobieren:

pascal
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  ARect: TRect; State: TOwnerDrawState);
var
  aColor: TColor;                       //Hintergrundfarbe
begin
  if (Index mod 2 = 0)                  //Index sagt, um welches Item es sich handelt
    then aColor:=$FFFFFF                //jedes zweite Item bekommt weiß als Hintergrundfarbe
    else aColor:=$EEEEFF;               //jedes zweite Item bekommt rosa als Hintergrundfarbe
  if odSelected in State then aColor:=$0000FF;  //Falls Item ausgewählt ist, dann rote Hintergrundfarbe
  ListBox1.Canvas.Brush.Color:=aColor;  //Hintergrundfarbe festlegen
  ListBox1.Canvas.FillRect(ARect);      //Ein ausgefülltes Rechteck zeichnen

  ListBox1.Canvas.Font.Bold:=True;      //Font auf "Fett" festlegen
  ListBox1.Canvas.TextRect(ARect, 2, ARect.Top+2, ListBox1.Items[Index]);  //Itemtext zeichnen
end;

Note: Parameter von ListBoxDrawItem:

Control:
Falls mehrere Controls (z.B. mehrere ListBoxen) auf diesen Eventhandler zugreifen, weiß man, welches diesen Event geworfen hat. Man könnte in unserem Beispiel statt ListBox1.Canvas.FillRect(ARect) auch TListBox(Control).Canvas.FillRect(ARect) schreiben, wobei man zuvor möglichst noch abfragen sollte, ob es ich um eine TListBox handelt:

pascal
if Control is TListBox then
  TListBox(Control).Canvas.FillRect(ARect);

Index: Gibt die Item-Stelle an, somit hat man Zugriff auf den String <ListBox>.Items[Index].
ARect: Beschreibt das Rechteck, was zur Zeichnung des Hintergrundes notwendig ist.
State: Status des Items, ob normal, fokusiert, selektiert etc.

->

Siehe auch

TMemo - Ein Steuerelement um mehrzeilige Texte zu editieren


From the Free Pascal wiki, page "TListBox/de", as it stood on 2020-03-01 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.

Revision 2, last changed by WikiArchive .

Talk about this page

Nobody has opened a bench for this page yet. Sign in to open one.