====== Lyx — Vega VCL ======
> Diese Seiten beschreiben die **Oberflächenbibliothek** Vega. Sie liegt in einem eigenen Repository (''lyx-vcl'') und gehört nicht zur Standardbibliothek — alle Beispiele werden aus dessen Wurzel übersetzt, mit ''-I .'' und dem passenden Plattformpfad.
Eine Komponentenbibliothek für grafische Oberflächen, geschrieben in **Lyx**.
Aufbau und Benennung folgen Delphis VCL — wer [[lyx_-_programmiersprache:vega:controls:tform|TForm]], [[lyx_-_programmiersprache:vega:controls:tbutton|TButton]] und
''OnClick'' kennt, findet sich sofort zurecht.
Vega zeichnet **alles selbst**. Es gibt keine Systemwidgets, keine GTK-,
keine Qt-Abhängigkeit. Vom Betriebssystem braucht die Bibliothek genau
zwei Dinge: ein Fenster und einen Ereignisstrom. Alles andere — Rahmen,
Schrift, Knöpfe, Menüs, Bildlaufleisten — entsteht Pixel für Pixel im
eigenen Puffer.
===== Stand =====
^ Bereich ^ Stand ^
| Steuerelemente | 54 Controlklassen (37 direkt an [[lyx_-_programmiersprache:vega:controls:tcontrol|TControl]]), 113 Klassen in 53 Units |
| Backends | X11 (Linux), Win32 (Windows), Null (Tests) |
| Formularformat LFM | Kern vollständig: Werte, Parser, Registry, Lader, Schreiber |
| Themes | ''.vtheme''-Dateien, Kaskade, Fünf-Achsen-Selektor |
| Tests | 67 unter Linux, 2 weitere nur für Windows; dazu 4 statische Prüfungen |
| Beispiele | 33 lauffähige Programme |
| Doku hier | 136 Seiten: 15 Guides, 55 Detailseiten (51 Steuerelemente und Bausteine + 4 Hilfsklassen), 54 Unit-Seiten (Einstieg, Layout, Zeichnen, Dialoge, Listen, Befehle, LFM, Themes, Fenster, Drag&Drop, Portabilität, eigene Steuerelemente, Praxis), dazu Architektur, Controls, Backends, LFM-Referenz, Themes, Werkzeuge, Beispiele, Lyx-Eigenheiten |
===== Wo anfangen =====
* [[lyx_-_programmiersprache:vega:guides|Guides]] — **hier anfangen**: erste Anwendung, Eigenschaften, Ereignisse, Komponenten
* [[lyx_-_programmiersprache:vega:architektur|Architektur]] — die vier Schichten und warum es sie gibt
* [[lyx_-_programmiersprache:vega:bauen|Bauen und Testen]] — Übersetzen, Ziele, Testlauf
* [[lyx_-_programmiersprache:vega:controls|Steuerelemente]] — was es gibt, nach Units geordnet
* [[lyx_-_programmiersprache:vega:units|Units]] — eine Seite je Quelldatei: Thema, Inhalt, Fallstricke, Abhängigkeiten
* [[lyx_-_programmiersprache:vega:backends|Backends]] — X11, Win32, Null und die Auswahl nach Ziel
* [[lyx_-_programmiersprache:vega:lfm|LFM-Formularformat]] — Oberflächen aus Dateien statt aus Code
* [[lyx_-_programmiersprache:vega:themes|Themes]] — Aussehen ohne Codeänderung
* [[lyx_-_programmiersprache:vega:lyx-eigenheiten|Lyx-Eigenheiten]] — **vor dem ersten Beitrag lesen**
* [[lyx_-_programmiersprache:vega:werkzeuge|Werkzeuge]] — Testlauf und statische Prüfungen
* [[lyx_-_programmiersprache:vega:praxis|Anwendungen aufbauen]] — Layout, eigene Steuerelemente, Timer, Dialoge
* [[lyx_-_programmiersprache:vega:beispiele|Beispiele]] — was man ausprobieren kann
===== Das erste Programm =====
unit Main;
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;
import std.io;
var g_app: TApplication;
fn OnEnde(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(320, 200, "Hallo Vega");
var l: TLabel := new TLabel("Guten Tag.");
l.SetBounds(16, 16, 280, 20);
l.SetParent(f);
var b: TButton := new TButton("Schliessen");
b.SetBounds(16, 60, 120, 30);
b.OnClick := OnEnde;
b.SetParent(f);
g_app.ShowForm(f);
g_app.Run();
g_app.Shutdown();
return 0;
}
Übersetzen und starten — aus der Wurzel des ''lyx-vcl''-Repositorys:
lyxc hallo.lyx -I . -I platform/linux -o hallo # Linux/X11
./hallo
lyxc hallo.lyx -I . -I platform/win64 --target=win64 --format=pe -o hallo.exe
Der Plattformpfad entscheidet, welches Backend ''Vega.BackendAuto'' liefert; ohne ihn meldet der Compiler ''Modul nicht gefunden … Vega.BackendAuto''. Nachgemessen mit ''lyxc 1.1.3I'': das obige Programm übersetzt zu rund 770 KB.
===== Grundregeln =====
* **Die Bibliothek zeichnet, das Betriebssystem zeigt an.** Was in der
HAL steht, ist bewusst wenig — 21 Methoden. Alles andere ist geteilter
Code und läuft überall gleich.
* **Ein Fehler ist laut oder er ist keiner.** Unbekannte Eigenschaften,
nicht eingetragene Handler, falsche Signaturen: alles meldet sich mit
Zeilennummer, statt still nichts zu tun.
* **Keine Bibliothek für den Regelzyklus.** Vega alloziert, zeichnet in Puffer und ruft Handler indirekt — für eine Oberfläche genau richtig, unter ''@flight_crit'' genau falsch. Wo beides in einem Programm vorkommt, gehören Anzeige und Regelung getrennt; Einzelheiten im Abschnitt [[lyx_-_programmiersprache:vega:guides:lfm#lfm_und_flight_crit|LFM und @flight_crit]].
* **Kein Feld ohne Wirkung.** Lieber eine fehlende Eigenschaft mit
Begründung als eine vorhandene, die niemand liest.
----
**Weiterführend:** [[lyx_-_programmiersprache:sprache|Sprachreferenz]] · [[lyx_-_programmiersprache:units|Standard Library]] · [[lyx_-_programmiersprache:guides|Guides]]
Letzte Aktualisierung: 2026-08-19 — Seiten aus ''lyx-vcl/doku/dokuwiki/vega'' in die Lyx-Doku übernommen; Übersetzungsbefehl und Binärgröße mit ''lyxc 1.1.3I'' nachgemessen.