Inhaltsverzeichnis

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.