Files
TerminalBasic/docs/forms-referenz.md
Chili Palmer 7e6fa6ea88 Phase 0: Referenzdokumente, Fehlerkatalog, Testkorpus, Ratatui-Spike
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>
2026-09-01 16:36:45 +02:00

86 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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` (015 bzw. 07), `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