Vega — Eigenschaften
Jedes Steuerelement erbt von TControl und damit denselben Satz Eigenschaften: Geometrie, Zustand, Ausrichtung, Schrift, Zeiger. Wer sie kennt, kennt 90 % jeder Vega-Komponente — der Rest sind die paar Felder, die eine Liste, ein Eingabefeld oder ein Fortschrittsbalken zusätzlich mitbringt.
→ Erste Anwendung · Ereignisse · Komponenten
Geometrie
| Eigenschaft | Bedeutung |
|---|---|
Left, Top | Position relativ zum Elternteil. Absolute Koordinaten entstehen erst beim Zeichnen. |
Width, Height | Größe in Pixeln. |
SetBounds(l, t, w, h) | Alle vier auf einmal — und dabei werden die Größengrenzen durchgesetzt. |
MinWidth, MinHeight, MaxWidth, MaxHeight | Grenzen; 0 heißt „keine„. Gelten auch beim Layout und beim Ziehen am Fensterrand. |
ClientRect() | Die Fläche ohne Rahmen — das, worauf man zeichnet. |
Mehrere Zuweisungen hintereinander zieht man mit BeginUpdate() / EndUpdate() zusammen: dazwischen wird nicht neu gezeichnet.
Ausrichtung und Anker
Align verteilt Fläche, Anchors verteilt Zuwachs.
Align | Wirkung |
|---|---|
AL_NONE | Nur Left/Top/Width/Height zählen (Vorgabe). |
AL_TOP / AL_BOTTOM | Volle Breite am oberen/unteren Rand, Height bleibt. |
AL_LEFT / AL_RIGHT | Volle Höhe am linken/rechten Rand, Width bleibt. |
AL_CLIENT | Der ganze Rest. |
Die Reihenfolge der Kinder ist das Layout: Ränder zuerst anlegen, das AL_CLIENT-Kind zuletzt — jedes ausgerichtete Kind nimmt sich seinen Streifen vom verbleibenden Rest.
Anchors ist eine Bitmaske aus ANCHOR_LEFT (1), ANCHOR_TOP (2), ANCHOR_RIGHT (4) und ANCHOR_BOTTOM (8). Vorgabe ist ANCHOR_LEFT | ANCHOR_TOP — das Element bleibt oben links kleben. Mit ANCHOR_RIGHT | ANCHOR_BOTTOM wandert es beim Vergrößern mit.
Zustand
| Eigenschaft | Bedeutung |
|---|---|
Visible | Wird gezeichnet und nimmt am Layout teil. |
Enabled | Nimmt Eingaben an; gesperrte Elemente zeichnen sich blass. |
Focused | Hat den Tastaturfokus (lesen; gesetzt wird er über Dispatcher.SetFocus). |
Hovered, Pressed | Zeiger darüber / Taste gedrückt — für die Darstellung in Paint. |
CanFocus | Kann das Element den Fokus überhaupt bekommen? |
TabStop | Wird es beim Tabulator angesteuert? |
Cursor | Mauszeiger (CUR_*); CUR_DEFAULT erbt vom Elternteil. |
Tag | Freier int64 für die Anwendung — Vega rührt ihn nicht an. |
Name | Bezeichner des Elements; landet auch im LFM-Formularformat. |
Font | Eigene Schrift oder 0 = die des Elternteils. Zeiger, keine Kopie — mehrere Elemente teilen sich eine Schrift. |
Baum
Parent ist die zeichnerische Verschachtelung, Owner die logische Zugehörigkeit (meist die Form). Eingehängt wird über SetParent(eltern) oder eltern.AddChild(kind) — beides tut dasselbe, aus unterschiedlicher Richtung geschrieben.
Owner kommt seit dem Komponenten-Split von TComponent und ist darum vom Typ TComponent. sender.Owner as TForm schreibt sich unverändert; wer den Besitzer als Control braucht, nimmt sender.OwnerControl() und spart die Umwandlung (beides nachgemessen).
Beispiel
unit Main;
import std.io;
import Vega.Types;
import Vega.Events;
import Vega.Canvas;
import Vega.Theme;
import Vega.Control;
import Vega.Font;
import Vega.Strings;
import Vega.Lists;
import Vega.Style;
import Vega.StdCtrls;
import Vega.Backend;
import Vega.BackendAuto;
import Vega.Forms;
var g_app: TApplication;
fn OnBeenden(sender: TControl): void { g_app.Terminate(); }
fn main(): int64 {
g_app := new TApplication(NewPlatformBackend());
if (!g_app.Ready) { PrintLn("Kein Fenstersystem erreichbar."); return 1; }
var f: TForm := new TForm(420, 260, "Eigenschaften");
// Geometrie: einzeln oder in einem Zug
var l: TLabel := new TLabel("Kopfzeile");
l.BeginUpdate(); // sammelt Aenderungen, ein Neuzeichnen
l.Left := 12;
l.Top := 10;
l.Width := 200;
l.Height := 18;
l.EndUpdate();
l.SetParent(f);
// Zustand
var b: TButton := new TButton("Gesperrt");
b.SetBounds(12, 40, 120, 28);
b.Enabled := false;
b.Tag := 42; // freier Wert fuer die Anwendung
b.Name := "btnGesperrt"; // Bezeichner, auch fuer LFM
b.SetParent(f);
// Groessengrenzen gelten auch beim Layout und beim Ziehen am Rand
var seite: TPanel := new TPanel();
seite.Align := AL_LEFT;
seite.Width := 120;
seite.MinWidth := 80;
seite.MaxWidth := 200;
seite.SetParent(f);
// Anker: was beim Vergroessern mitwandert
var unten: TButton := new TButton("Beenden");
unten.SetBounds(280, 210, 120, 28);
unten.Anchors := ANCHOR_RIGHT | ANCHOR_BOTTOM;
unten.OnClick := OnBeenden;
unten.SetParent(f);
if (!g_app.ShowForm(f)) { return 2; }
f.ApplyLayout();
g_app.Run();
g_app.Shutdown();
return 0;
}
Nachgemessen mit lyxc 1.1.3I: übersetzt fehlerfrei (lyxc eigenschaften.lyx -I . -I platform/linux -o eigenschaften, rund 765 KB).
Neuzeichnen
Vega zeichnet nicht von selbst neu. Die Setter (SetCaption, SetText, …) lösen es aus; wer ein Feld direkt beschreibt, ruft danach Invalidate(). Bei Layoutänderungen an verschachtelten Containern zusätzlich ApplyLayout() — es wirkt nur eine Ebene tief.
Letzte Aktualisierung: 2026-08-19 — Beispiel mit lyxc 1.1.3I übersetzt; Eigenschaften gegen Vega/Control.lyx abgeglichen.
