# 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 ``, 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` 0–65 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 260–480 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.