TComponent — Wurzel aller Vega-Objekte
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
Wer hängt woran
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.
Verwendung
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
Besonderheiten
Ownerist nichtParent.Ownersagt, wer aufräumt;Parentist der Platz im Zeichenbaum.AddChildreicht den Besitzer nach unten durch, damit ein Handler übersender.Ownerdas 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.
- Kein Konstruktor. Lyx vererbt Konstruktoren nicht; jede Ableitung ruft
InitComponent()im eigenenCreate(). Destroyräumt die eigene Liste ab, nicht die Einträge darin. Wer seine Besitztümer mitnehmen will, ruftDestroyComponents()— das geht die Liste von hinten durch, weil sich jedesDestroyselbst austrägt.FindComponentsucht eine Ebene tief, unter den eigenen Komponenten, wie in Delphi. Für den ganzen Baum braucht es eine eigene Schleife.ComponentStateundComponentStylesind Bitmasken, gelesen und gesetzt überHasState/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 |
TickundNextDueIngibt es in Delphi nicht. Vega hält keine Betriebssystem-Zeitgeber je Komponente, sondern geht einmal je Bild über die Komponenten.Tick(now)lieferttrue, wenn sich etwas getan hat und neu gezeichnet werden muss;NextDueIn(now)sagt, wie lange die Schleife höchstens schlafen darf —-1heißt „nie von selbst„. Beides ist virtuell, damit die Schleife nur die Wurzel kennen muss.HasParentundGetParentComponentmelden in der Wurzel „nirgends“; TControl überschreibt beide mitParent.- Bewusst weggelassen (mit Begründung in
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.
Eigenschaften
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 |
Methoden
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 |
Ereignisse
Keine.
Letzte Aktualisierung: 2026-08-20 — API maschinell aus Vega/Component.lyx erhoben, Beispiel mit lyxc 1.1.4A übersetzt und ausgeführt.
