====== 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.