Files

84 lines
4.1 KiB
Markdown
Raw Permalink 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.
# Phase 4 (Abschluss) — Steuerelemente, Menüs, Dialoge
## Why
Das Objektmodell (`phase-4-objektmodell`) macht Formulare und
Steuerelemente ansprechbar, zeigt aber nichts an und nimmt nichts
entgegen. Dieser Change füllt die Klassen mit Verhalten: Darstellung im
Zellenpuffer, Fokus- und Tabreihenfolge, Access-Keys, Maussteuerung,
Menüsystem und die drei vordefinierten Dialoge. Damit schließt Phase 4.
Die drei Dialoge (`MSGBOX` als Anweisung **und** als Funktion,
`INPUTBOX$`) sind die letzten drei offenen Inventareinträge der Phase.
Sie stehen in keiner Steuerelementliste und fielen deshalb bisher
zwischen die Aufgaben.
## What Changes
- **Steuerelementklassen mit Verhalten**: CommandButton, TextBox,
ListBox, ComboBox, CheckBox, OptionButton, Frame, Label, HScrollBar,
VScrollBar, PictureBox, Timer sowie die Dateisystem-Steuerelemente
DirListBox, DriveListBox, FileListBox und VSpin/HSpin — je mit Darstellung,
Zuständen (normal, fokussiert, deaktiviert) und ihren Methoden.
- **Darstellung im Zellenpuffer**: Steuerelemente zeichnen in den
vorhandenen Textbildschirm; es entsteht keine zweite Zeichenschicht.
Die höhenabhängige Darstellung des CommandButton (1 Zeile `<Text>`,
2 Zeilen Rahmen, ab 3 Zeilen Kasten) und die Rahmenarten der übrigen
Klassen folgen der Forms-Referenz.
- **Fokus, Tabreihenfolge, Access-Keys**: `TabIndex`/`TabStop`,
Weiterschalten mit Tab und Umschalt-Tab, `&` im Text als Access-Key,
`Default`- und `Cancel`-Schaltfläche für Enter und Esc, `SETFOCUS`,
`GotFocus`/`LostFocus`.
- **Maussteuerung**: Die Mausereignisse aus `phase-4-ereignisschleife`
werden auf Steuerelemente abgebildet — Trefferprüfung über die
Z-Reihenfolge, Klick, Doppelklick, `MouseDown`/`MouseMove`/`MouseUp`
sowie Ziehen und Ablegen (`DragMode`, `DRAG`, `DragDrop`, `DragOver`).
- **Menüsystem**: Menüleiste je Formular, bis zu sechs Ebenen,
Access-Keys, Shortcuts, `Checked`/`Enabled`/`Visible`/`Separator`,
Menü-Steuerelement-Arrays. Während ein Menü den Fokus hält, ruhen
Zeitereignisse und Traps.
- **Vordefinierte Dialoge** (3 Inventareinträge): `MSGBOX` als Anweisung
und als Funktion mit den Schaltflächengruppen und Rückgabewerten der
Sprachreferenz, `INPUTBOX$` mit fester Größe 46×16 Zeichen und
Positionierung in Zeichen.
- **Timer als Steuerelement**: `Interval` 065 535 ms auf der Zeitquelle
der Ereignisschleife, Ereignis `Timer`.
- **VBDOS-Kompatibilität**: `.MAK`- und `$INCLUDE`-Auflösung, `RUN`,
VSpin/HSpin, die verwendete Zellgrafik (`SCREEN`, `LINE`, `PAINT`, `VIEW`)
und die von den Beispielen benutzten Common-Dialog-Routinen.
**Non-Goals:** Der Formular-Designer (Phase 5). Für den geforderten
VBDOS-Kompatibilitätsnachweis notwendige Projektauflösung, native
Erweiterungssteuerelemente und Grafikausgabe gehören zu diesem Change.
## Capabilities
### New Capabilities
- `forms-steuerelemente`: Verhalten und Darstellung der
Steuerelementklassen, Fokus- und Tabreihenfolge, Access-Keys,
Maussteuerung mit Ziehen und Ablegen, Menüsystem und die
vordefinierten Dialoge.
### Modified Capabilities
- `kompat-testkorpus`: Der Korpus SHALL Formularprogramme mit
Bildschirm-Sollausgabe und deterministischer Ereignisfolge führen.
## Impact
- `crates/tb-ui`: Darstellung und Eingabebehandlung je Klasse, Menüs,
Dialoge, Trefferprüfung, Fokusverwaltung.
- `crates/tb-runtime`: Fehler 260480 des Forms-Bereichs als Auslöser,
`MSGBOX`/`INPUTBOX$` und die benötigte Zellgrafik.
- `crates/tb-frontend`: Signaturen von `MSGBOX` (Anweisung und Funktion)
und `INPUTBOX$`, Projektquellen, `RUN` und die verwendete Grafiksyntax.
- `tests/compat`: Formularprogramme mit Sollausgabe; die Programme aus
`github.com/cout/vbdos` als Kompatibilitätsnachweis.
- `docs/`: `forms-referenz.md` — die offenen Detailfragen (Optik je
Zustand, Z-Reihenfolge, Reihenfolge gleichzeitig fälliger Timer)
werden beantwortet; `inventar.md` setzt die Einträge dieses Changes
auf `implementiert`.
- PLAN.md: Punkte „Steuerelemente", „Menüsystem", „Fokus-/Tab-Reihenfolge",
„Vordefinierte Dialoge" und die beiden Meilensteine der Phase 4.