Entscheidungen festgehalten: TBVM bestaetigt und eingebettet in die Executables; durchgaengig UTF-8 statt CP437 (dokumentierte Abweichung). - docs/: Sprachreferenz, Forms-Referenz, Dateiformate, TBVM-Design - tb-runtime::errors: klassischer Laufzeitfehler-Katalog (implementiert) - tb-ui::screen: 80x25-Unicode-Zellenpuffer mit 16-Farben-Abbildung, Scrollbereich (VIEW PRINT), Letterboxing; Ratatui-Widget + Tests - Spike: cargo run -p tb-ui --example spike (Farben, Unicode, Tasten, Maus) - tests/compat/: erste Referenzprogramme mit byte-genauer Sollausgabe Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
4.1 KiB
Forms-Referenz Terminal Basic
Rekonstruierte Referenz der Forms-Engine des Vorbilds (textbasierte,
ereignisgesteuerte Oberflächen). Grundlage für tb-ui::forms und den
Formular-Designer der IDE. Unklare Punkte sind mit TODO markiert.
Koordinatenmodell
Alle Maße in Textzellen (Zeilen/Spalten), Ursprung links oben.
Formulare liegen auf dem 80×25-Bildschirm; Steuerelemente relativ zum
Formular-Innenbereich. Eigenschaften Top, Left, Height, Width.
Steuerelemente (Übersicht)
| Steuerelement | Zweck | Schlüssel-Ereignisse |
|---|---|---|
| Form | Fenster (mit/ohne Rahmen, Titel, verschiebbar) | Load, Unload, Activate, Deactivate, Resize, Paint, Click, KeyPress |
| Label | statischer Text | Click |
| TextBox | ein-/mehrzeilige Texteingabe | Change, KeyPress, GotFocus, LostFocus |
| CommandButton | Schaltfläche | Click |
| CheckBox | Mehrfachauswahl (Value 0/1/2) | Click |
| OptionButton | Einfachauswahl in Gruppe (Value TRUE/FALSE) | Click |
| Frame | Gruppierungsrahmen (Container) | — |
| ListBox | Liste (List, ListCount, ListIndex, AddItem/RemoveItem) | Click, DblClick |
| ComboBox | Eingabe + Liste (Style 0/1/2) | Change, Click, DblClick |
| HScrollBar / VScrollBar | Bildlauf (Min, Max, Value, SmallChange, LargeChange) | Change, Scroll |
| PictureBox | Text-Zeichenfläche (PRINT/CLS auf Steuerelement) | Click, Paint |
| Timer | unsichtbar; Interval in ms (Vorbild: 55-ms-Ticks) | Timer |
| Menu | Menüleiste/-einträge (Designer-definiert) | Click |
Gemeinsame Eigenschaften
Name (Entwurfszeit), Caption/Text, Top/Left/Height/Width,
Visible, Enabled, TabIndex, TabStop, Tag, Index (Steuerelement-
Arrays), ForeColor/BackColor (0–15 bzw. 0–7), MousePointer (TODO).
Zugriff zur Laufzeit: form.eigenschaft, form!element.eigenschaft;
Standard-Eigenschaft (z. B. Text bei TextBox, Caption bei Label) bei
Zuweisung ohne Eigenschaftsname. TODO: exakte Standard-Eigenschaften prüfen.
Gemeinsame Methoden
Move top, left [, height, width] · SetFocus · Refresh · Drag (Nicht-
Ziel?) · Form zusätzlich: Show [modal], Hide, Cls, Print, Line
(Textmodus-Variante? TODO). ListBox/ComboBox: AddItem text$ [, index],
RemoveItem index, Clear (TODO: hieß es Clear?).
Ereignismodell
- Ereignisprozeduren heißen
SUB elementname_Ereignis (argumente)und liegen im Formular-Modul. - Tastatur:
KeyDown(KeyCode%, Shift%),KeyPress(KeyAscii%),KeyUp— KeyAscii ist bei uns ein Unicode-Codepoint (Abweichung UTF-8). - Maus:
MouseDown/MouseMove/MouseUp(Button%, Shift%, X!, Y!)in Zellen. - Fokusreihenfolge über
TabIndex; Tab/Shift+Tab wechseln, Access-Keys per&im Caption (z. B."&OK"→ Alt+O). - Zentrale Schleife: Ereignisse werden nur bei
DOEVENTS,SLEEP,INPUT- artigen Wartezuständen oder nach Ende einer Ereignisprozedur zugestellt (kooperativ, wie im Vorbild — keine Präemption).
Globale Objekte und Funktionen
SCREEN-Objekt:SCREEN.ActiveForm,SCREEN.ActiveControl,SCREEN.Height/Width(25/80),SCREEN.MousePointer(TODO: Umfang).MSGBOX(text$ [, typ% [, titel$]])als Anweisung und Funktion (Rückgabe: gedrückte Schaltfläche),INPUTBOX$(prompt$ [, titel$ [, standard$ [, spalte%, zeile%]]]).LOAD form(Load-Ereignis, unsichtbar),UNLOAD form(Unload-Ereignis), Formular-Referenzen sind statisch (keine Instanziierung wie in späteren Nachfolgern).
Farben und Zeichensatz
Rahmen, Schatten und Bedienelemente werden mit Unicode-Box-Drawing gezeichnet (Abweichung: UTF-8 statt CP437, identische Optik). Standard-Farbschema des Vorbilds (grauer Dialog, schwarze Schrift, weiße Akzente) wird als Default nachgebildet. TODO: exakte Attributtabelle je Steuerelement-Zustand (normal/fokussiert/deaktiviert) aus Screenshots/Emulator ableiten.
Offene Detailfragen (per Emulator-Session zu klären)
- Exakte Standardwerte aller Eigenschaften je Steuerelement
- Z-Reihenfolge/Überlappung von Steuerelementen und Formularen
- Verhalten
Show 1(modal): welche Ereignisse laufen weiter? - Timer-Auflösung und -Reihenfolge bei mehreren Timern
- Genauer Umfang von PictureBox im Textmodus