TStringList — Liste von Zeichenketten
Eine wachsende Liste von Texten, die ihre Einträge besitzt. Vega benutzt sie überall dort, wo eine Oberfläche Zeilen hält: die Einträge einer TListBox oder TComboBox, die Reiter eines TTabControl, die Zeilen eines TMemo, die Spaltentexte eines TListItem.
Unit: Vega.Lists
→ Alle Steuerelemente · TObjectList · TTextBuffer
Einordnung
Intern ist es eine Tabelle mit Adressen von TTextBuffer-Instanzen — als Rohspeicher, weil die Länge zur Laufzeit wächst und Lyx keine dynamischen Felder kennt. Nach außen sieht man davon nichts: Add nimmt ein pchar, Get liefert eines zurück.
Der Unterschied zu TObjectList: Diese Liste besitzt ihre Einträge und gibt sie beim Destroy() mit frei. Die Objektliste hält nur Verweise und räumt nichts weg.
Verwendung
unit Main;
import std.io;
import Vega.Types;
import Vega.Strings;
import Vega.Lists;
fn main(): int64 {
var l: TStringList := NewStringList();
l.Add("Bass");
l.Add("Snare");
l.Add("Hihat");
PrintLn(StrConcat("Anzahl: ", IntToStr(l.Count)));
PrintLn(StrConcat("erster: ", l.Get(0)));
PrintLn(StrConcat("Index von Snare: ", IntToStr(l.IndexOf("Snare"))));
// Sortiert halten und Dubletten abweisen
l.Sorted := true;
l.AllowDuplicates := false;
l.Sort();
PrintLn(StrConcat("nach Sort: ", l.Get(0)));
var rc: int64 := l.Add("Bass"); // schon vorhanden
PrintLn(StrConcat("Dublette -> rc=", IntToStr(rc)));
// Text am Stueck: die Bruecke zu TMemo
var puffer: TTextBuffer := new TTextBuffer();
l.ToText(puffer);
Print("als Text: "); Print(puffer.AsPChar()); Print("\n");
var l2: TStringList := NewStringList();
l2.SetText("eins\nzwei\ndrei");
PrintLn(StrConcat("aus Text: ", IntToStr(l2.Count)));
puffer.Destroy();
l2.Destroy();
l.Destroy(); // gibt auch die Eintraege frei
return 0;
}
Anzahl: 3
erster: Bass
Index von Snare: 1
nach Sort: Bass
Dublette -> rc=-1
als Text: Bass
Hihat
Snare
aus Text: 3
Übersetzt und ausgeführt mit lyxc 1.1.3I.
Besonderheiten
Destroy()gibt die Liste und alle Einträge frei. Da die Liste ihre Texte besitzt, wäre alles andere ein Leck.SortedundAllowDuplicatessind zwei einfache Schalter — dasselbe, was Delphi alsSortedundDuplicateskennt. BeiAllowDuplicates := falseliefertAddfür eine Dublette-1statt eines Index.Sorted := truewirkt beim Einfügen (Addsucht die Position binär); eine bereits gefüllte Liste ordnetSort().- Der Vergleich ist byteweise. Für Sortierung und Suche reicht das; sprachrichtige Sortierung (
äbeia) ist eine eigene Baustelle —älandet also hinterz. Getliefert bei ungültigem Index einen leeren Text,Buffereine0. Beides stürzt nicht ab.ToTextundSetTextsind die Brücke zum TMemo: Zeilen ↔ ein Text mit Zeilenumbrüchen. Ein leerer Text ergibt eine leere Liste, nicht eine Liste mit einer leeren Zeile.
Eigenschaften
Alle Eigenschaften, auch die geerbten.
| Name | Typ | Bedeutung | Herkunft |
|---|---|---|---|
Items | int64 | Adresse der Tabelle mit den Textpuffern | eigen |
Count | int64 | Zahl der Einträge | eigen |
Capacity | int64 | Platz für so viele Einträge ohne Neubelegung | eigen |
Sorted | bool | Neue Einträge sortiert einfügen | eigen |
AllowDuplicates | bool | Dubletten zulassen; sonst liefert Add -1 | eigen |
Methoden
Alle Methoden, auch die geerbten.
| Signatur | Zweck | Herkunft |
|---|---|---|
Create(): void | Anlegen; NewStringList() | eigen |
Destroy(): void | Liste und alle Einträge freigeben | eigen |
Add(s: pchar): int64 | Anhängen bzw. sortiert einfügen; -1 bei abgelehnter Dublette | eigen |
Insert(index: int64, s: pchar): int64 | An einer Position einfügen | eigen |
Put(index: int64, s: pchar): void | Eintrag ersetzen | eigen |
Get(index: int64): pchar | Eintrag lesen; leerer Text bei ungültigem Index | eigen |
Buffer(index: int64): TTextBuffer | Eintrag als Textpuffer; 0 bei ungültigem Index | eigen |
LengthOf(index: int64): int64 | Länge eines Eintrags | eigen |
Delete(index: int64): void | Eintrag entfernen und freigeben | eigen |
Remove(s: pchar): bool | Ersten passenden Eintrag entfernen | eigen |
Clear(): void | Alle Einträge entfernen und freigeben | eigen |
IsEmpty(): bool | Liste ist leer | eigen |
IndexOf(s: pchar): int64 | Index eines Textes; -1, wenn nicht enthalten | eigen |
Contains(s: pchar): bool | Text ist enthalten | eigen |
CompareAt(index: int64, s: pchar): int64 | Byteweiser Vergleich: <0, 0, >0 | eigen |
SortedPos(s: pchar): int64 | Einfügeposition in einer sortierten Liste (binäre Suche) | eigen |
Sort(): void | Liste sortieren (Einfügesortieren) | eigen |
Exchange(a: int64, b: int64): void | Zwei Einträge tauschen | eigen |
ToText(dst: TTextBuffer): void | Alle Zeilen in einen Puffer, durch Umbrüche getrennt | eigen |
SetText(s: pchar): void | Text an den Umbrüchen in Zeilen zerlegen | eigen |
Reserve(n: int64): bool | Platz für n Einträge vorab belegen | eigen |
Dazu die Hülle NewStringList(): TStringList.
Ereignisse
Keine.
Letzte Aktualisierung: 2026-08-19 — API aus Vega/Lists.lyx erhoben, Beispiel mit lyxc 1.1.3I übersetzt und ausgeführt.
