LyxVision ist ein Text User Interface Framework, inspiriert von Borland Turbo Vision (1990). Es bietet ein vollständiges Widget-System mit Fenstern, Dialogen, Menüs, Buttons, Eingabefeldern und Listen für terminalbasierte Anwendungen.
→ Guides · std.lyxvision Referenz
import std.lyxvision.main; // importiert alle Sub-Units automatisch
lyxvision/main — Haupt-Import + Init/Done/Run, direkte Zeichenfunktionen
lyxvision/types — TPoint, TRect, TEvent (Basis-Typen)
lyxvision/consts — sfVisible/sfFocused, mrOK/mrCancel, colorBlue/..., Flags
lyxvision/drivers — Terminal-Treiber (ANSI/VT100)
lyxvision/view — TView: Basisklasse aller sichtbaren Objekte
lyxvision/group — TGroup: Container (besitzt Kind-Views)
lyxvision/tapplication — TApplication, TMenuBar, TStatusLine, TDesktop
lyxvision/window — TWindow: Fenster mit Rahmen, Titel, Zoom
lyxvision/dialog — TDialog: Modaler Dialog (DialogExecute)
lyxvision/menu — TMenu, TMenuBar, TMenuItem
lyxvision/button — TButton: Klickbarer Knopf mit Befehl
lyxvision/inputline — TInputLine: Einzeilige Texteingabe
lyxvision/statictext — TStaticText: Nicht-interaktiver Text
lyxvision/staticline — TStaticLine: Horizontale Trennlinie
lyxvision/cluster — TCluster: Radio-Buttons / Checkboxen
lyxvision/listview — TListView: Scrollbare Liste
lyxvision/textdevice — TTextDevice: Text-Ausgabepuffer
lyxvision/terminal — TTerminal: Eingebettetes Terminal-Widget
import std.lyxvision.main;
import std.lyxvision.tapplication;
import std.lyxvision.window;
import std.lyxvision.consts;
fn main(): int64 {
Init(); // Terminal initialisieren
var app: TApplication := AppInit(0 as TApplication);
// Fenster erstellen (x=5, y=3, w=40, h=15):
var win: TWindow := WindowNew(5, 3, 40, 15, "Mein Fenster"c);
AppInsertWindow(app, win);
AppDrawMenuBar(app);
AppRun(app); // Ereignisschleife
AppDone(app);
Done();
return 0;
}
Alle sichtbaren Elemente erben von TView. Gruppen (TGroup) können Kind-Views besitzen:
TView
└─ TGroup
├─ TApplication (Wurzel)
│ ├─ TDesktop
│ ├─ TMenuBar
│ └─ TStatusLine
└─ TWindow / TDialog
├─ TButton
├─ TInputLine
├─ TListView
└─ TStaticText
Ereignisse werden als TEvent-Struktur durch die View-Hierarchie weitergeleitet. Wichtigste Ereigniskonstanten aus lyxvision/types:
import std.lyxvision.types;
// TEvent enthält:
// .what — Ereignistyp (evNothing, evKeyDown, evMouseDown, evCommand)
// .keyCode — Tastaturcode
// .command — Befehlsnummer (für evCommand)
Buttons und Menüs senden Befehle. Reservierte Befehle:
| Konstante | Wert | Bedeutung |
|---|---|---|
mrOK | 10 | OK / Bestätigen |
mrCancel | 11 | Abbrechen |
mrYes | 12 | Ja |
mrNo | 13 | Nein |
mrAbort | 100 | Abbruch |
import std.lyxvision.button;
import std.lyxvision.consts;
// Standard-Button (x=5, y=10):
var btn: TButton := ButtonCreateStd(5, 10, "OK"c, mrOK);
// Standard-Button mit Fokus (Default-Button):
var defBtn: TButton := ButtonCreateDefault(20, 10, "Abbrechen"c, mrCancel);
import std.lyxvision.inputline;
// Einzeilige Eingabe (x=3, y=5, maxLen=40):
var input: TInputLine := InputLineCreate(3, 5, 40);
// Passwort-Modus:
InputLineSetInsertMode(input, ilPassword);
import std.lyxvision.listview;
// Einfachauswahl-Liste (x=2, y=2, w=30, h=10):
var lv: TListView := ListViewNew(2, 2, 30, 10, lvSingle);
ListViewAddItem(lv, "Eintrag 1"c);
ListViewAddItem(lv, "Eintrag 2"c);
ListViewAddItem(lv, "Eintrag 3"c);
// Ausgewählten Index holen:
var selected: int64 := ListViewGetFocused(lv);
import std.lyxvision.dialog;
import std.lyxvision.button;
// Dialog zentriert (w=50, h=15):
var dlg: TDialog := DialogNewCentered(50, 15, "Einstellungen"c);
// Button zum Dialog hinzufügen:
var okBtn: TButton := ButtonCreateDefault(18, 12, "OK"c, mrOK);
// ... Widgets zu dlg hinzufügen ...
// Modal ausführen — blockiert bis Button geklickt:
var result: int64 := DialogExecute(dlg);
if result == mrOK {
// OK wurde gedrückt
}
import std.lyxvision.menu;
import std.lyxvision.tapplication;
// Menüleiste mit zwei Menüs:
var mb: TMenuBar := MenuBarAddMenu(0 as TMenuBar, "Datei"c);
MenuAddItem(mb as TMenu, "Öffnen"c, 100, 0, 0);
MenuAddItem(mb as TMenu, "Speichern"c, 101, 0, 0);
MenuAddSeparator(mb as TMenu);
MenuAddItem(mb as TMenu, "Beenden"c, 102, 0, 0);
MenuBarAddMenu(mb, "Bearbeiten"c);
MenuAddItem(mb as TMenu, "Kopieren"c, 200, 0, 0);
Farben aus lyxvision/consts:
import std.lyxvision.main;
import std.lyxvision.consts;
// Vordergrund- und Hintergrundfarbe setzen:
SetColors(colorWhite, colorBlue);
FillRect(0, 0, 79, 24); // Hintergrund füllen
SetColors(colorYellow, colorBlue);
WriteStr(30, 12, "Hallo Welt!"c);
| Farbe | Wert | ||||
|---|---|---|---|---|---|
colorBlack | 0 | colorBlue | 1 | colorGreen | 2 |
colorRed | 4 | colorMagenta | 5 | colorBrown | 6 |
colorLightGray | 7 | colorDarkGray | 8 | colorWhite | 15 |
colorYellow | 14 | colorLightBlue | 9 | colorLightGreen | 10 |
Für einfache Terminal-Ausgaben ohne vollständiges Widget-System:
import std.lyxvision.main;
fn main(): int64 {
Init();
ClearScreen();
SetColors(colorLightGreen, colorBlack);
MoveCursor(10, 5);
WriteStr(10, 5, "Status: OK"c);
DrawBox(5, 3, 50, 20); // Rahmen zeichnen
// ... Taste warten, dann aufräumen ...
Done();
return 0;
}
| Funktion | Beschreibung |
|---|---|
Init() | Terminal initialisieren, Rawmode |
Done() | Terminal zurücksetzen |
ClearScreen() | Bildschirm löschen |
WriteStr(x, y, s) | Text an Position schreiben |
DrawBox(x1, y1, x2, y2) | Rahmen zeichnen |
FillRect(x1, y1, x2, y2) | Rechteck mit Hintergrundfarbe füllen |
MoveCursor(x, y) | Cursor positionieren |
HideCursor() | Cursor ausblenden |
SetColors(fg, bg) | Farben setzen |
Letzte Aktualisierung: 2026-06-08