TSyntaxEdit — Quelltextfeld mit Einfärbung
Ein TRichEdit, das seinen Inhalt nach einer Sprachdefinition einfärbt: Schlüsselwörter, Zeichenketten, Zahlen und Kommentare. Gedacht für Quelltext in Werkzeugen und Editoren.
Unit: vega.syntaxedit · Basis: TRichEdit
→ Alle Steuerelemente · Klassenbaum · Guide: Komponenten
Vererbung
Kette: TComponent → TControl → TCustomEdit → TMemo → TRichEdit → TSyntaxEdit
Direkte Nachfahren: keine — diese Klasse wird nicht weiter abgeleitet.
Quelle: vega/syntaxedit.lyx
Verwendung
var se: TSyntaxEdit := new TSyntaxEdit();
se.SetBounds(8, 8, 500, 300);
se.SetParent(f);
se.SetSyntax(SyntaxLyx()); // eingebaute Sprachdefinition
se.SetText(quelltext);
Ohne Sprachdefinition (Syntax = 0) verhält sich das Feld wie ein TRichEdit ohne Läufe.
Besonderheiten
OwnsSyntaxregelt, wer die Sprachdefinition freigibt. Wer sie überSetSyntaxanhängt, behält sie; wer eine der eingebauten nimmt, übergibt sie an das Feld.Colorshält die Farbzuordnung je Kategorie — sie lässt sich einzeln umstellen, ohne die Sprachdefinition anzufassen.- Nach jeder Änderung wird neu eingefärbt. Das lässt sich abschalten, wenn ein Programm den Text in vielen Schritten aufbaut und erst am Ende ein Ergebnis sehen will.
Eigenschaften
Alle Eigenschaften, auch die geerbten.
| Name | Typ | Bedeutung | Herkunft |
|---|---|---|---|
ComponentState | int64 | Zustand als Bitmaske (csLoading, csDestroying …) | TComponent |
ComponentStyle | int64 | Stil als Bitmaske; Vorgabe csInheritable | TComponent |
Name | pchar | Name der Komponente — für FindComponent und beim Laden aus LFM | TComponent |
OwnedComponents | TObjectList | Die Komponenten, die DIESER gehoeren. Delphis Components[]. Zeigerliste, keine Kopien: TObjectList hält int64-Adressen | TComponent |
Owner | TComponent | Wer diese Komponente wegraeumt. Nicht der Elternteil im Zeichenbaum — das ist bei TControl `Parent` | TComponent |
Tag | int64 | Freier Wert für eigene Zwecke; die Bibliothek fasst ihn nicht an | TComponent |
AutoSelect | bool | Beim Hineinspringen alles auswaehlen — so ersetzt die nächste Eingabe den alten Inhalt | TCustomEdit |
Backend | IVegaBackend | Die Zwischenablage laeuft über vega.clipbrd, nicht mehr über einen eigenen Backend-Verweis: die eine Ablage des Prozesses bekommt ihr Backend von TApplication.Init, und zwar BEVOR … | TCustomEdit |
CaretPos | int64 | Byteposition der Schreibmarke | TCustomEdit |
CaretVisible | bool | Blinkt die Marke gerade sichtbar? Die Zeitsteuerung macht TApplication über einen Timer, der CaretVisible umschaltet | TCustomEdit |
CharCase | int64 | Gross-/Kleinschreibung erzwingen, siehe TEditCharCase | TCustomEdit |
HideSelection | bool | Auswahl auch dann zeigen, wenn das Feld den Fokus verloren hat? Delphi-Vorgabe: nein | TCustomEdit |
MaxLength | int64 | Liest MaxLength | TCustomEdit |
Modified | bool | Hat der NUTZER seit dem letzten Zuruecksetzen etwas geaendert? Ein SetText aus dem Programm zählt nicht — sonst wäre die Frage „muss gespeichert werden?“ nach jedem Laden mit ja beantwortet | TCustomEdit |
NumbersOnly | bool | Nur Ziffern annehmen. Delphis NumbersOnly: gefiltert wird die EINGABE, nicht SetText — ein Programm darf weiter schreiben, was es will, sonst kann es einen Fehlwert nicht mehr anzeigen | TCustomEdit |
ReadOnly | bool | Nur lesen, keine Eingabe | TCustomEdit |
ScrollX | int64 | Waagerechte Verschiebung in Pixeln, damit die Marke sichtbar bleibt | TCustomEdit |
SelStart | int64 | Ankerpunkt der Auswahl; gleich CaretPos heißt „nichts ausgewählt“ | TCustomEdit |
Text | TTextBuffer | [[lyx_-_programmiersprache:vega:controls:tcustomedit|TCustomEdit | |
TextHint | pchar | Graue Andeutung im leeren Feld („Suchbegriff…“). Wird nicht ausgewählt, nicht kopiert und nicht mitgezaehlt — sie ist kein Text, sondern eine Beschriftung, die im Feld sitzt | TCustomEdit |
UndoBuffer | TTextBuffer | Ein Schritt zurück. Delphi merkt sich genau einen Stand; ein zweites Undo stellt den Zustand davor wieder her (also Redo). Mehr Stufen wären eine eigene Verwaltung — die kommt mit … | TCustomEdit |
UndoCaret | int64 | Position der Schreibmarke im Rückgängig-Puffer | TCustomEdit |
UndoValid | bool | Ob der Rückgängig-Puffer belegt ist | TCustomEdit |
WantReturns | bool | Nimmt das Feld Eingabe- und Tabtaste selbst an? Nur mehrzeilige Felder werten das aus; die Felder stehen trotzdem HIER, weil jede Ableitung über InitEdit hochkommt und TMemo.Create nicht … | TCustomEdit |
WantTabs | bool | Tabulator geht ins Feld statt zum nächsten Element | TCustomEdit |
Alignment | int64 | Ausrichtung der Zeilen — Delphis Alignment am mehrzeiligen Feld. Sie gilt für ALLE Zeilen; Delphis Paragraph.Alignment je Absatz gibt es hier nicht, weil ein Absatzverzeichnis beim … | TMemo |
TopLine | int64 | Erste sichtbare Zeile (senkrechtes Scrollen) | TMemo |
DefColor | TColor | Womit neu getippter Text ausgezeichnet wird — Delphis DefAttributes | TRichEdit |
DefStyle | int64 | Schnitt für neu getippten Text | TRichEdit |
PlainText | bool | Nur Text, keine Auszeichnungen. Wie in Delphi: gesetzt, verhaelt sich das Feld wie ein TMemo, und die Laeufe bleiben unbeachtet | TRichEdit |
Runs | TObjectList | Die Laeufe, nach Start sortiert und überlappungsfrei | TRichEdit |
AutoHighlight | bool | Nach jeder Änderung neu einfaerben. Aus, wenn ein Programm den Text in vielen Schritten aufbaut und erst am Ende faerben will | eigen |
AutoIndent | bool | Bei Zeilenumbruch die Einrueckung der Vorzeile übernehmen | eigen |
BracketColor | TColor | Farbe für zusammengehörende Klammern | eigen |
Colors | TSyntaxColors | Farbe an dieser Stelle | eigen |
CurrentLineColor | TColor | Hintergrund der Zeile mit der Schreibmarke | eigen |
GutterColor | TColor | Farbe des Randstreifens | eigen |
HighlightCurrentLine | bool | Die Zeile mit der Schreibmarke hinterlegen. Hilft beim Wiederfinden der Stelle, wenn der Blick zwischen Fenstern gewandert ist | eigen |
LineNumberColor | TColor | Farbe der Zeilennummern | eigen |
MatchBrackets | bool | Zusammengehoerende Klammern hervorheben, sobald die Marke an einer steht | eigen |
OwnsSyntax | bool | Gehoert die Sprache diesem Feld? Wer sie über SetSyntax anhaengt, behaelt sie; wer eine der eingebauten nimmt, übergibt sie | eigen |
ShowLineNumbers | bool | Zeilennummern im Streifen links | eigen |
Syntax | TSyntaxDef | Die Sprache. 0 heißt: nichts einfaerben, dann verhaelt sich das Feld wie ein TRichEdit ohne Laeufe | eigen |
TabWidth | int64 | Wie viele Leerzeichen eine Tabulatortaste einfuegt. WantTabs selbst steht seit dem Nachziehen an TMemo — die Taste bleibt im Feld, statt zum nächsten Control zu springen. Der Unterschied … | eigen |
Methoden
Alle Methoden, auch die geerbten.
| Signatur | Zweck | Herkunft |
|---|---|---|
ClearState(bits: int64): void | Zustandsbits löschen | TComponent |
ComponentCount(): int64 | Anzahl der eigenen Komponenten | TComponent |
ComponentIndex(): int64 | Delphis ComponentIndex: der eigene Platz in der Liste des Besitzers | TComponent |
Components(index: int64): TComponent | Eigene Komponente an dieser Stelle | TComponent |
Destroy(): void | Raeumt die eigene Liste ab, aber NICHT die Einträge — welche Komponenten ihre Besitztuemer mitnehmen, entscheidet die Ableitung über DestroyComponents() | TComponent |
DestroyComponents(): void | Baut die Besitztuemer ab. Von hinten, weil jedes Destroy() sich selbst aus der Liste austraegt | TComponent |
FindComponent(name: pchar): TComponent | Sucht unter den EIGENEN Komponenten, eine Ebene tief — wie in Delphi | TComponent |
GetName(): pchar | Namen lesen | TComponent |
GetNamePath(): pchar | Der eigene Name. Delphi hängt bei Unterkomponenten den des Besitzers davor; Vega hat keine, also ist es der Name selbst | TComponent |
GetTag(): int64 | Tag lesen | TComponent |
HasState(bits: int64): bool | Sind diese Zustandsbits gesetzt | TComponent |
InitComponent(): void | Kein Konstruktor: lyxc vererbt Konstruktoren nicht, jede Ableitung ruft InitComponent() im eigenen Create() | TComponent |
InsertComponent(c: TComponent): void | Komponente in Besitz nehmen; ein bisheriger Besitzer gibt sie ab | TComponent |
RemoveComponent(c: TComponent): void | Komponente aus dem Besitz nehmen | TComponent |
SetName(v: pchar): void | Setzt Name | TComponent |
SetState(bits: int64): void | Zustand setzen | TComponent |
SetTag(v: int64): void | Setzt Tag | TComponent |
ApplyCharCase(cp: int64): int64 | Ein Zeichen durch die Schreibweisenregel schicken. Nur ASCII — Umlaute richtig zu behandeln braucht eine Tabelle, und die gehört nicht in ein Eingabefeld | TCustomEdit |
Backspace(): void | Auch Loeschen ist eine Änderung durch den Nutzer — aber erst NACH der ReadOnly-Pruefung, sonst gilt ein Feld als geaendert, in dem gar nichts passieren konnte | TCustomEdit |
CanUndo(): bool | Ob ein Rückgängig möglich ist | TCustomEdit |
Changed(): void | Änderung melden | TCustomEdit |
Clear(): void | Auswahl von Hand setzen, wie SelStart/SelLength in Delphi. Feld leeren. In Delphi an TCustomEdit, deshalb hier und nicht in TEdit — TMemo braucht dasselbe | TCustomEdit |
ClearSelection(): void | Auswahl aufheben | TCustomEdit |
ClearUndo(): void | Verwirft den Rückgängig-Puffer | TCustomEdit |
CopyToClipboard(): bool | Ausgewaehlten Text kopieren. Ohne Auswahl passiert nichts — wie überall | TCustomEdit |
CutToClipboard(): bool | Ausschneiden | TCustomEdit |
DeleteForward(): void | Zeichen rechts löschen | TCustomEdit |
DeleteSelection(): bool | Ausgewaehlten Text löschen. Liefert true, wenn etwas entfernt wurde | TCustomEdit |
Destroy(): void | Gibt eigene Ressourcen frei | TCustomEdit |
GetText(): pchar | Inhalt lesen | TCustomEdit |
HasSelection(): bool | Es ist etwas ausgewählt | TCustomEdit |
InitEdit(): void | Grundzustand des Eingabefelds | TCustomEdit |
InsertChar(cp: int64): void | Zeichen einfügen | TCustomEdit |
IsWordByte(b: int64): bool | Zaehlt ein Zeichen zum Wort? Ziffern, Buchstaben und der Unterstrich — alles ab 128 gilt als Buchstabe, damit Umlaute nicht mitten im Wort eine Grenze bilden. Eine echte Unicode-Tabelle … | TCustomEdit |
MoveCaret(pos: int64, keep: bool): void | Marke setzen. `keep` behaelt den Ankerpunkt (Umschalt+Pfeil erweitert die Auswahl), sonst wird sie aufgehoben | TCustomEdit |
PasteFromClipboard(): bool | Einfuegen ersetzt eine bestehende Auswahl — so erwartet man es | TCustomEdit |
SaveUndo(): void | Den jetzigen Stand als Rueckfallpunkt merken. Wird VOR jeder Änderung durch den Nutzer gerufen | TCustomEdit |
SelHigh(): int64 | Größere Grenze der Auswahl | TCustomEdit |
SelLength(): int64 | Länge der Auswahl in Bytes | TCustomEdit |
SelLow(): int64 | Kleinere Grenze der Auswahl | TCustomEdit |
SelTextTo(dst: TTextBuffer): void | Der ausgewählte Text. Der Puffer gehört dem AUFRUFER — er hat ihn mitgebracht, damit hier nichts angelegt wird, das niemand freigibt | TCustomEdit |
SelectAll(): void | Alles auswählen | TCustomEdit |
SelectWordAt(pos: int64): void | Das Wort an einer Stelle auswaehlen — der Doppelklick. Steht die Stelle nicht IN einem Wort (Leerraum, Satzzeichen), wird das Zeichen darunter genommen: eine Auswahl von Länge null wäre … | TCustomEdit |
SetCharCase(v: int64): void | Setzt CharCase | TCustomEdit |
SetModified(v: bool): void | Setzt Modified | TCustomEdit |
SetSelText(s: pchar): void | Die Auswahl durch anderen Text ersetzen. Ohne Auswahl wird an der Marke eingefuegt — genau wie Delphis SelText-Zuweisung | TCustomEdit |
SetSelection(start: int64, laenge: int64): void | Auswahl auf start mit laenge setzen | TCustomEdit |
SetText(s: pchar): void | Setzt Text | TCustomEdit |
SetTextHint(s: pchar): void | Setzt TextHint | TCustomEdit |
ShowingTextHint(): bool | Zeigt das Feld gerade nur seine Andeutung? | TCustomEdit |
TextLength(): int64 | Länge | TCustomEdit |
Undo(): bool | Tauschen statt überschreiben: so ist das zweite Undo das Redo | TCustomEdit |
WordEnd(pos: int64): int64 | Ende des Wortes, in dem pos liegt | TCustomEdit |
WordStart(pos: int64): int64 | Anfang des Wortes, in dem pos liegt | TCustomEdit |
AddLine(s: pchar): void | Zeile anhängen | TMemo |
Append(s: pchar): void | Delphis Name für AddLine. Beides steht hier, weil Lines.Add der gewohnte Weg ist und Append der kurze | TMemo |
ClearLines(): void | Alles löschen | TMemo |
Create(text: pchar): void | Anlegen; new TSyntaxEdit() | TMemo |
Destroy(): void | Gibt eigene Ressourcen frei | TMemo |
GetLine(index: int64): pchar | Eine einzelne Zeile lesen bzw. anhaengen — der haeufigste Fall, ohne dass dafuer eine ganze Liste entstehen muss | TMemo |
GetLines(): TStringList | Aktuellen Inhalt als Liste. Der Aufrufer besitzt sie und gibt sie frei | TMemo |
LineAt(pos: int64): int64 | In welcher Zeile liegt diese Byteposition? | TMemo |
LineCount(): int64 | Anzahl Zeilen: Umbrueche plus eins. Ein leerer Text hat eine Zeile | TMemo |
LineEnd(line: int64): int64 | Byteposition des Zeilenendes (vor dem Umbruch) | TMemo |
LineStart(line: int64): int64 | Byteposition, an der Zeile `line` beginnt | TMemo |
LineTextTo(dst: TTextBuffer, line: int64): void | Eine einzelne Zeile in den Puffer des Aufrufers | TMemo |
LineX(line: int64, pad: int64): int64 | Linker Rand EINER Zeile. Bei linksbuendigem Text ist das der Rand; sonst hängt er an der Breite dieser Zeile, und deshalb rechnet ihn auch die Schreibmarke über dieselbe Methode aus | TMemo |
LinesTo(dst: TStringList): void | Alle Zeilen in eine Liste. Die Liste gehört dem Aufrufer | TMemo |
RangeWidth(a: int64, b: int64): int64 | Pixelbreite des Textes zwischen zwei BYTE-Positionen im Puffer. Der Puffer ist nicht je Zeile nullterminiert, deshalb kann hier nicht TextWidthUpTo benutzt werden — es wird bis zur … | TMemo |
SetAlignment(v: int64): void | Setzt Alignment | TMemo |
SetLines(l: TStringList): void | Inhalt aus einer Liste setzen. Hier stand einmal eine zweite Fassung weiter unten in derselben Klasse. lyxc übersetzt das ohne Fehler (#1668) und nimmt die ZUERST deklarierte — die … | TMemo |
TextLeft(): int64 | Linke Kante des Textbereichs | TMemo |
VisibleLines(): int64 | Wieviele Zeilen passen ins Feld? | TMemo |
ClearAttrs(): void | Entfernt alle Auszeichnungen | TRichEdit |
ClearRuns(): void | Entfernt alle Läufe | TRichEdit |
ColorAt(pos: int64): TColor | Farbe an dieser Stelle | TRichEdit |
Create(text: pchar): void | Anlegen; new TSyntaxEdit() | TRichEdit |
Destroy(): void | Gibt eigene Ressourcen frei | TRichEdit |
DoSelectionChange(): void | Meldet eine geänderte Auswahl nach außen | TRichEdit |
FindText(was: pchar, ab: int64, achteAufGrosz: bool): int64 | Delphis FindText: liefert die Byteposition oder -1. Ohne Gross-/Kleinschreibung zu beachten wäre es die Haelfte der Faelle; deshalb ist es ein Schalter | TRichEdit |
Run(i: int64): TAttrRun | Ereignisschleife starten | TRichEdit |
RunAt(pos: int64): TAttrRun | Der Lauf, der die Byteposition enthaelt — oder null, wenn dort nichts ausgezeichnet ist | TRichEdit |
RunCount(): int64 | Zahl der Läufe | TRichEdit |
SelColor(): TColor | Die Auszeichnung der Auswahl lesen. Uneinheitlich ausgezeichnet? Dann gilt, was am Anfang steht — wie in Delphi | TRichEdit |
SelHasUniformStyle(): bool | Traegt der ganze ausgewählte Bereich denselben Schnitt? Delphi liefert dafuer eine „unbestimmt“-Antwort; hier ist es eine Frage | TRichEdit |
SelStyle(): int64 | Schnitt der Auswahl | TRichEdit |
SelectRange(a: int64, laenge: int64): void | Fundstelle auswaehlen — damit ist die Suche auch sichtbar | TRichEdit |
SetRangeAttrs(a: int64, b: int64, c: TColor, st: int64): void | Einen Bereich auszeichnen. Das ist der Kern: Delphis SelAttributes.Color := clRed | TRichEdit |
SetSelAttrs(c: TColor, st: int64): bool | Dasselbe für die aktuelle Auswahl — der übliche Weg | TRichEdit |
ShiftRuns(ab: int64, delta: int64): void | Verschiebt die Läufe nach einer Textänderung | TRichEdit |
StyleAt(pos: int64): int64 | Schnitt an dieser Stelle | TRichEdit |
ToggleSelStyle(bit: int64): bool | Einen Schnitt an- oder abschalten, ohne die Farbe anzufassen | TRichEdit |
BracketPos1(): int64 | Position der ersten gefundenen Klammer | eigen |
BracketPos2(): int64 | Position der zugehörigen Klammer | eigen |
Create(text: pchar): void | Anlegen; new TSyntaxEdit() | eigen |
Destroy(): void | Gibt eigene Ressourcen frei | eigen |
FindMatchingBracket(pos: int64): int64 | Den Partner zu der Klammer an `pos` suchen. -1, wenn keiner da ist. Gezaehlt wird mitlaufend: jede gleichartige Klammer erhoeht, jede gegenlaeufige senkt — bei null ist der Partner erreicht | eigen |
GutterWidth(): int64 | Breite des Randstreifens | eigen |
IndentOfLine(line: int64, dst: TTextBuffer): void | Die Einrueckung einer Zeile als Zeichenkette — Leerzeichen und Tabulatoren, wie sie dort stehen | eigen |
InsertTab(): void | Leerzeichen bis zur nächsten Tabulatorspalte einfuegen. Nicht TabWidth Stück: wer in Spalte 3 steht, will auf 4, nicht auf 7 | eigen |
LineNumberDigits(): int64 | Wieviele Stellen die groesste Zeilennummer hat. Danach richtet sich die Breite — eine Datei mit 80 Zeilen braucht keinen Platz für vier Ziffern | eigen |
Rehighlight(): void | Den ganzen Text neu einfaerben. Der Abtaster fragt an jeder Stelle in fester Reihenfolge: steht hier ein Blockkommentar, ein Zeilenkommentar, eine Zeichenkette, eine Zahl, ein Wort? Die … | eigen |
SetSource(s: pchar): void | Text von aussen setzen — danach ebenfalls faerben | eigen |
SetSyntax(s: TSyntaxDef): void | Eine Sprache anhaengen, die dem Aufrufer gehört | eigen |
SyntaxName(): pchar | Name der eingestellten Sprache | eigen |
TakeSyntax(s: TSyntaxDef): void | Eine Sprache übernehmen — das Feld raeumt sie später weg | eigen |
UpdateBrackets(): void | Nach jeder Bewegung der Marke: liegt sie an einer Klammer? Geprueft wird an der Marke UND davor — steht sie hinter einer schließenden Klammer, ist die gemeint, so wie es jeder Editor hält | eigen |
Ereignisse
| Name | Typ | Wann | Herkunft |
|---|---|---|---|
OnChange | TNotifyEvent | Der Inhalt oder die Auswahl hat sich geändert | TCustomEdit |
OnSelectionChange | TNotifyEvent | Meldet sich, wenn sich Auswahl ODER deren Auszeichnung geaendert hat | TRichEdit |
Letzte Aktualisierung: 2026-09-05 — Seite neu angelegt; erhoben aus vega/syntaxedit.lyx im Repo lyx-vcl.
