====== 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 [[lyx_-_programmiersprache:vega:controls:tlistbox|TListBox]] oder [[lyx_-_programmiersprache:vega:controls:tcombobox|TComboBox]], die Reiter eines [[lyx_-_programmiersprache:vega:controls:ttabcontrol|TTabControl]], die Zeilen eines [[lyx_-_programmiersprache:vega:controls:tmemo|TMemo]], die Spaltentexte eines [[lyx_-_programmiersprache:vega:controls:tlistitem|TListItem]].
Unit: ''Vega.Lists''
→ [[lyx_-_programmiersprache:vega:controls|Alle Steuerelemente]] · [[lyx_-_programmiersprache:vega:controls:tobjectlist|TObjectList]] · [[lyx_-_programmiersprache:vega:controls:ttextbuffer|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 [[lyx_-_programmiersprache:vega:controls:tobjectlist|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.
* ''Sorted'' und ''AllowDuplicates'' sind zwei einfache Schalter — dasselbe, was Delphi als ''Sorted'' und ''Duplicates'' kennt. Bei ''AllowDuplicates := false'' liefert ''Add'' für eine Dublette ''-1'' statt eines Index.
* ''Sorted := true'' wirkt beim **Einfügen** (''Add'' sucht die Position binär); eine bereits gefüllte Liste ordnet ''Sort()''.
* **Der Vergleich ist byteweise.** Für Sortierung und Suche reicht das; sprachrichtige Sortierung (''ä'' bei ''a'') ist eine eigene Baustelle — ''ä'' landet also hinter ''z''.
* ''Get'' liefert bei ungültigem Index einen **leeren Text**, ''Buffer'' eine ''0''. Beides stürzt nicht ab.
* ''ToText'' und ''SetText'' sind die Brücke zum [[lyx_-_programmiersprache:vega:controls:tmemo|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'' | [[lyx_-_programmiersprache:sprache:datentypen#1_ganzzahl-typen_signiert|int64]] | Adresse der Tabelle mit den Textpuffern | eigen |
| ''Count'' | [[lyx_-_programmiersprache:sprache:datentypen#1_ganzzahl-typen_signiert|int64]] | Zahl der Einträge | eigen |
| ''Capacity'' | [[lyx_-_programmiersprache:sprache:datentypen#1_ganzzahl-typen_signiert|int64]] | Platz für so viele Einträge ohne Neubelegung | eigen |
| ''Sorted'' | [[lyx_-_programmiersprache:sprache:datentypen#5_wahrheitswerte_bool|bool]] | Neue Einträge sortiert einfügen | eigen |
| ''AllowDuplicates'' | [[lyx_-_programmiersprache:sprache:datentypen#5_wahrheitswerte_bool|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.