Die gemeinsame Wurzel: sie trägt Besitz, Namen, Tag und den Zustand einer Komponente — aber keine Geometrie und kein Zeichnen. Das kommt erst bei TControl dazu.
Unit: Vega.Component · Basis: keine
→ Alle Steuerelemente · TControl
Vega zieht die Trennlinie anders als Delphi, und zwar an der Frage, wer selbst in den Rahmenpuffer malt:
| Zeichnet selbst | Zeichnet nie, hält oder tickt nur |
|---|---|
| TControl und alles darunter | TTimer, TImageList |
In Delphi sind auch Menüs und Dialoge nichtsichtbare Komponenten — aber nur, weil Windows sie selbst zeichnet und die VCL-Klasse ein Umschlag um HMENU bzw. GetOpenFileName ist. Vega zeichnet alles selbst, also bleiben TPopupMenu und die Dialoge im Control-Ast.
var f: TForm := new TForm(320, 200, "Fenster");
var b: TButton := new TButton("OK");
b.SetName("BtnOk");
b.SetParent(f as TControl);
f.InsertComponent(b as TComponent); // siehe Besonderheiten
Print(IntToStr(f.ComponentCount())); // 1
Print(IntToStr(b.ComponentIndex())); // 0
var g: TComponent := f.FindComponent("BtnOk"); // findet den Knopf
Print(b.GetName()); // BtnOk
Print(IntToStr(b.HasParent() as int64)); // 1
b.SetState(csDesigning);
Print(IntToStr(b.HasState(csDesigning) as int64)); // 1
b.ClearState(csDesigning);
var oc: TControl := b.OwnerControl(); // das Fenster
Owner ist nicht Parent. Owner sagt, wer aufräumt; Parent ist der Platz im Zeichenbaum. AddChild reicht den Besitzer nach unten durch, damit ein Handler über sender.Owner das Formular findet, egal wie tief das Control hängt. Von einem Control aus führt ''OwnerControl()'' direkt dorthin, ohne Umwandlung von Hand.SetParentträgt die Komponente nicht inOwnedComponentsein.AddChildsetzt das FeldOwnerdirekt, stattInsertComponentzu rufen. Nachgemessen mitlyxc 1.1.4A: nachb.SetParent(f)istb.Ownerdas Formular, aberf.ComponentCount()ist0,b.ComponentIndex()ist-1undf.FindComponent(„BtnOk“)liefertnull.
Bis das zusammengeführt ist: wer überFindComponentsuchen will — der Delphi-Weg — ruft nach demSetParentzusätzlichInsertComponent. Dann stimmen alle vier Werte.
InitComponent() im eigenen Create().Destroy räumt die eigene Liste ab, nicht die Einträge darin. Wer seine Besitztümer mitnehmen will, ruft DestroyComponents() — das geht die Liste von hinten durch, weil sich jedes Destroy selbst austrägt.FindComponent sucht eine Ebene tief, unter den eigenen Komponenten, wie in Delphi. Für den ganzen Baum braucht es eine eigene Schleife.ComponentState und ComponentStyle sind Bitmasken, gelesen und gesetzt über HasState/SetState/ClearState:| Zustand | Wert | Bedeutung |
|---|---|---|
csLoading | 1 | Liest gerade aus einer Formulardatei |
csReading | 2 | Einzelne Eigenschaft wird gelesen |
csWriting | 4 | Wird gerade geschrieben |
csDestroying | 8 | Abbau läuft |
csDesigning | 16 | Im Entwurf, nicht zur Laufzeit |
csAncestor | 32 | Aus einem geerbten Formular |
csUpdating | 64 | Sammeländerung läuft |
csFixups | 128 | Verweise werden nachgetragen |
csFreeNotification | 256 | Will vom Verschwinden anderer erfahren |
csInline | 512 | Eingebettetes Formular |
| Stil | Wert | Bedeutung |
|---|---|---|
csInheritable | 1 | Vorgabe, wie in Delphi |
csCheckPropAvail | 2 | Eigenschaften vor dem Zugriff prüfen |
csSubComponent | 4 | Gehört fest zu einer anderen Komponente |
csTransient | 8 | Wird nicht gespeichert |
Tick und NextDueIn gibt es in Delphi nicht. Vega hält keine Betriebssystem-Zeitgeber je Komponente, sondern geht einmal je Bild über die Komponenten. Tick(now) liefert true, wenn sich etwas getan hat und neu gezeichnet werden muss; NextDueIn(now) sagt, wie lange die Schleife höchstens schlafen darf — -1 heißt „nie von selbst„. Beides ist virtuell, damit die Schleife nur die Wurzel kennen muss.HasParent und GetParentComponent melden in der Wurzel „nirgends“; TControl überschreibt beide mit Parent.Vega/Component.lyx): COM (ComObject, SafeCallException …) — gibt es außerhalb von Windows nicht; die Streaming-Haken der Delphi-IDE (DesignInfo, WriteState, SetSubComponent …) — Vega liest und schreibt Formulare über Vega.Lfm; FreeNotification/Notification — wäre ohne Wirkung, solange keine Komponente eine fremde referenziert; ExecuteAction/UpdateAction — bleibt in Vega.Actions.
Letzte Aktualisierung: 2026-08-20 — API maschinell aus Vega/Component.lyx erhoben, Beispiel mit lyxc 1.1.4A übersetzt und ausgeführt.
Alle Eigenschaften, auch die geerbten.
| Name | Typ | Bedeutung | Herkunft |
|---|---|---|---|
Owner | TComponent | Wer diese Komponente wegräumt — nicht das Elternteil im Zeichenbaum | eigen |
OwnedComponents | TObjectList | Die Komponenten, die dieser gehören (Delphis Components[]) | eigen |
Name | pchar | Name der Komponente, für FindComponent und Formulardateien | eigen |
Tag | int64 | Freier Wert für die Anwendung | eigen |
ComponentState | int64 | Zustand als Bitmaske: csLoading, csDestroying, csDesigning … | eigen |
ComponentStyle | int64 | Stil als Bitmaske; Vorgabe csInheritable | eigen |
Alle Methoden, auch die geerbten.
| Signatur | Zweck | Herkunft |
|---|---|---|
InitComponent(): void | Grundzustand herstellen — von jeder Ableitung im Create zu rufen, da Lyx Konstruktoren nicht vererbt | eigen |
Destroy(): void | Gibt eigene Ressourcen frei | eigen |
ComponentCount(): int64 | Anzahl der eigenen Komponenten | eigen |
Components(index: int64): TComponent | Eigene Komponente an dieser Stelle | eigen |
ComponentIndex(): int64 | Eigener Platz in der Liste des Besitzers, -1 ohne Besitzer | eigen |
InsertComponent(c: TComponent): void | Komponente in Besitz nehmen; ein bisheriger Besitzer gibt sie ab | eigen |
RemoveComponent(c: TComponent): void | Komponente aus dem Besitz nehmen | eigen |
FindComponent(name: pchar): TComponent | Eigene Komponente über ihren Name suchen — eine Ebene tief | eigen |
DestroyComponents(): void | Alle Besitztümer abbauen, von hinten nach vorn | eigen |
SetName(v: pchar): void | Namen setzen | eigen |
GetName(): pchar | Namen lesen | eigen |
SetTag(v: int64): void | Tag setzen | eigen |
GetTag(): int64 | Tag lesen | eigen |
HasState(bits: int64): bool | Sind diese Zustandsbits gesetzt | eigen |
SetState(bits: int64): void | Zustandsbits setzen | eigen |
ClearState(bits: int64): void | Zustandsbits löschen | eigen |
HasParent(): bool | Hängt die Komponente in einem Baum | eigen |
GetParentComponent(): TComponent | Übergeordnete Komponente im Baum | eigen |
GetNamePath(): pchar | Voller Name für Formulardateien; in Vega der Name selbst | eigen |
Tick(now: int64): bool | Einmal je Bild aus der Fensterschleife; true = es hat sich etwas getan, also neu zeichnen | eigen |
NextDueIn(now: int64): int64 | Wie lange die Schleife höchstens schlafen darf, bis diese Komponente wieder dran ist; -1 = nie von selbst | eigen |
Keine.
Letzte Aktualisierung: 2026-08-20 — API maschinell aus Vega/Component.lyx erhoben, Beispiel mit lyxc 1.1.4A übersetzt und ausgeführt.