TTextBuffer — veränderlicher Text
Ein Textpuffer, der wächst: die Antwort auf die Frage, wohin veränderlicher Text gehört, wenn pchar nur ein Zeiger auf unveränderliche Zeichen ist. Vega hält damit den Inhalt jedes Eingabefelds (TCustomEdit), die Überschrift einer TListColumn, den Text eines TTreeNode und jeden Eintrag einer TStringList.
Unit: Vega.Strings
→ Alle Steuerelemente · TStringList · pchar in der Sprachreferenz
Vererbung
Kette: TTextBuffer — eigene Wurzel, kein Vorfahr. Was diese Klasse kann, steht vollständig auf dieser Seite.
Direkte Nachfahren: keine — diese Klasse wird nicht weiter abgeleitet.
Quelle: vega/strings.lyx
Einordnung
Caption und Verwandte halten in Vega nur den Zeiger auf einen Text — meist auf ein Literal, das ewig lebt. Sobald Text aus Eingaben, Dateien oder Berechnungen entsteht, braucht er einen Besitzer, und das ist der TTextBuffer. Er kennt die Länge in Bytes und in Zeichen getrennt, weil UTF-8 beides auseinanderlaufen lässt.
Verwendung
unit Main;
import std.io;
import vega.types;
import vega.strings;
fn main(): int64 {
var b: TTextBuffer := new TTextBuffer();
b.SetText("Gruesse");
Print("Inhalt: "); Print(b.AsPChar()); Print("\n");
PrintLn(StrConcat("Bytes: ", IntToStr(b.Length)));
PrintLn(StrConcat("Zeichen: ", IntToStr(b.CharCount())));
// Einfuegen an einer BYTE-Position; der Rueckgabewert ist die neue Position
var p: int64 := b.InsertText(0, "Viele ");
Print("nach InsertText: "); Print(b.AsPChar()); Print("\n");
// Umlaute: Byte- und Zeichenzaehlung unterscheiden sich
b.SetText("äöü");
PrintLn(StrConcat("Bytes: ", IntToStr(b.Length)));
PrintLn(StrConcat("Zeichen: ", IntToStr(b.CharCount())));
PrintLn(StrConcat("Byteposition von Zeichen 1: ", IntToStr(b.PosOfChar(1))));
b.Clear();
PrintLn(StrConcat("nach Clear: ", IntToStr(b.Length)));
b.Destroy();
return 0;
}
Inhalt: Gruesse
Bytes: 7
Zeichen: 7
nach InsertText: Viele Gruesse
Bytes: 6
Zeichen: 3
Byteposition von Zeichen 1: 2
nach Clear: 0
Übersetzt und ausgeführt mit lyxc 1.1.3I — an äöü sieht man den Unterschied: 6 Bytes, 3 Zeichen.
Besonderheiten
- Positionen sind Byte-Positionen.
InsertChar,InsertTextundDeleteRangerechnen in Bytes;PosOfChar(index)undCharIndexAt(pos)rechnen zwischen Zeichen und Bytes um. NextPos/PrevPoswandern zeichenweise durch den Puffer — der richtige Weg, um eine Schreibmarke zu bewegen, ohne mitten in einem Mehrbyte-Zeichen zu landen.AsPChar()liefert den Zeiger auf den Inhalt. Er gilt nur, solange der Puffer nicht wächst — nach einemInsertTextkann er woanders liegen.- Wer den Puffer anlegt, gibt ihn frei (
Destroy()). Eine Ausnahme ist die TStringList: Sie besitzt ihre Puffer und räumt sie selbst weg. Reserve(n)nimmt das Wachsen vorweg, wenn die Endgröße bekannt ist.
Eigenschaften
Alle Eigenschaften, auch die geerbten.
| Name | Typ | Bedeutung | Herkunft |
|---|---|---|---|
Data | int64 | Adresse des Speicherblocks | eigen |
Length | int64 | Länge in Bytes | eigen |
Capacity | int64 | Belegter Platz in Bytes | eigen |
Methoden
Alle Methoden, auch die geerbten.
| Signatur | Zweck | Herkunft |
|---|---|---|
Create(): void | Anlegen; new TTextBuffer() | eigen |
Destroy(): void | Speicher freigeben | eigen |
SetText(s: pchar): void | Inhalt ersetzen | eigen |
AsPChar(): pchar | Zeiger auf den Inhalt (gilt bis zum nächsten Wachsen) | eigen |
Clear(): void | Inhalt leeren | eigen |
Reserve(n: int64): bool | Platz für n Bytes vorab belegen | eigen |
ByteAt(i: int64): int64 | Byte an einer Position | eigen |
CharCount(): int64 | Länge in Zeichen | eigen |
NextPos(pos: int64): int64 | Byteposition des nächsten Zeichens | eigen |
PrevPos(pos: int64): int64 | Byteposition des vorigen Zeichens | eigen |
PosOfChar(index: int64): int64 | Byteposition eines Zeichens | eigen |
CharIndexAt(pos: int64): int64 | Zeichenindex an einer Byteposition | eigen |
InsertChar(pos: int64, cp: int64): int64 | Zeichen einfügen, liefert die neue Position | eigen |
InsertText(pos: int64, s: pchar): int64 | Text einfügen, liefert die neue Position | eigen |
DeleteRange(start: int64, stop: int64): void | Bereich löschen (Bytepositionen) | eigen |
CopyRangeTo(dst: TTextBuffer, start: int64, stop: int64): void | Teilstueck in einen anderen Puffer kopieren (für Zwischenablage/Auswahl) | eigen |
DeleteAt(pos: int64): void | Das Zeichen AN pos löschen (Entf). Die Marke bleibt, wo sie ist | eigen |
DeleteBefore(pos: int64): int64 | Das Zeichen VOR pos löschen (Ruecktaste). Liefert die neue Marke | eigen |
Ereignisse
Keine.
Letzte Aktualisierung: 2026-09-05 — gegen lyx-vcl/vega/*.lyx abgeglichen: Abschnitt „Vererbung„ (Vorfahr-Kette, direkte Nachfahren, Quelldatei) ergänzt und die fehlenden Eigenschaften, Methoden und Ereignisse nachgetragen.
Vorherige letzte Aktualisierung: 2026-08-19 — API aus Vega/Strings.lyx erhoben, Beispiel mit lyxc 1.1.3I übersetzt und ausgeführt.
Codebeispiele geprüft: gegen lyxc 1.2.5C übersetzt (Prüflauf 2026-09-08 über die gesamte Doku: 574 Vollprogramme, 0 echte Fehler; zusätzlich 5159 Aufrufe gegen die pub fn-Signaturen in aurum/std gehalten, 0 Abweichungen).
