====== 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.