5.1 KiB
Phase 4 — Formularmodell und Objektsprache
Why
Nach der Ereignisschleife (phase-4-ereignisschleife) fehlt der Sprache
alles, worauf ein Formularprogramm zugreift: Formulare als Objekte,
Steuerelemente als benannte Eigenschaftsträger, Ereignisprozeduren
Name_Ereignis und die Sprachmittel aus Sprachreferenz §12
(FORM/CONTROL, IF TYPEOF, $FORM, form!steuerelement,
SCREEN-Objekt).
Heute kompiliert ein Formularprogramm nicht etwa mit einer Ablehnung, sondern falsch. Belegt an einem Dreizeiler:
Text1.Text = "hallo" -> Type mismatch (implizite SINGLE-Variable "Text1.Text")
Form1.Show 1 -> Subprogram not defined
UNLOAD Form1 -> Subprogram not defined
Der Lexer faltet den Punkt in den Bezeichner, die Semantik löst Punktpfade
nur auf, wenn die Basis ein benutzerdefinierter Typ ist — sonst entsteht
stillschweigend eine Variable namens Text1.Text. Das ist genau der Fall,
den der Guiding Principle als Bug definiert: ein dokumentiertes Element
wird ohne Namensnennung abgewiesen. Zusätzlich kollidiert der
Container-Operator form!steuerelement mit dem Typsuffix ! für SINGLE.
Dazu kommt eine Lücke im Messinstrument: das Inventar führt zum
Forms-Objektmodell null Einträge — weder SHOW noch TYPEOF, keine
Eigenschaft, keine Steuerelementklasse. Es ist Abnahmekriterium für
Phase 6 und läuft für den größten Teil der Phase 4 ins Leere.
What Changes
- Objektsprache im Frontend: Punktpfade auf Formulare und
Steuerelemente (
Form1.Caption,Text1.Text), der Container-Operatorform!steuerelement.eigenschaftmit einer Auflösung der Kollision zum SINGLE-Suffix, die DatentypenFORMundCONTROLals Parametertypen,IF TYPEOF ctl IS klasse, der Metabefehl$FORMund die EreignisprozedurenSUB Name_Ereignis (…)mit den Signaturen der Forms-Referenz. - Namentliche Abweisung statt Falschübersetzung (BREAKING für bestehende Diagnosen): Ein Punktpfad auf ein unbekanntes Objekt oder eine unbekannte Eigenschaft MUST das Objekt und die Eigenschaft namentlich nennen; eine implizite Variable mit Punkt im Namen MUST NOT mehr entstehen.
- Formularmodell zur Laufzeit: Formulare mit Eigenschaften,
Steuerelementbaum, Steuerelement-Arrays (
ctl(index%)), Lade-/Entladezyklus (LOAD/UNLOADmitForm_Load/Form_Unloadund wirksamemCancel),SHOW [style%]modeless und modal,HIDE, Sichtbarkeit und Z-Reihenfolge. - Modalität:
form.SHOW 1gibt die Kontrolle erst zurück, wenn das Formular entladen oder verborgen wird; die Ereignisschleife läuft währenddessen weiter. Die Stapelregeln des Vorbilds lösen die Fehler 400–403 aus. - Ereignisdispatch: Ein Ereignis der Warteschlange findet die
Prozedur
Name_Ereignisdes betroffenen Objekts und ruft sie mit den Argumenten ihrer Signatur auf; fehlt die Prozedur, verfällt das Ereignis wirkungslos. Die Zustellpunkte sind die der Ereignissteuerung, nicht neue. SCREEN-Objekt:ActiveControl,ActiveForm,Height,Width(aktuelle Terminalgröße, Abweichung vom Vorbild),MousePointer,ControlPanel,SHOW/HIDE.- Inventar deckt das Objektmodell (BREAKING für das Inventarformat): Eigenschaften, Methoden und Ereignisse je Klasse werden mit eigener Quellenangabe (Forms-Referenz statt Themenliste der Hilfe) als Einträge geführt, damit die Leitplanke „Vollständigkeit ist das Soll" auch für Forms ein Maß hat.
Non-Goals: Darstellung, Fokus, Tastatur- und Maussteuerung der
einzelnen Steuerelemente sowie Menüs und Dialoge (Change
phase-4-steuerelemente); das .FRM-Dateiformat (Change
phase-4-frm); native Erweiterungssteuerelemente (Stufe 2).
Capabilities
New Capabilities
forms-objektmodell: Formulare und Steuerelemente als benannte Objekte mit Eigenschaften, Lade-/Entladezyklus, Sichtbarkeit und Modalität, Steuerelement-Arrays, Ereignisprozeduren und ihr Dispatch,SCREEN-Objekt.
Modified Capabilities
sprach-frontend: Grammatik und Semantik SHALL Punktpfade auf Objekte, den Container-Operator,FORM/CONTROL,TYPEOF,$FORMund Ereignisprozeduren umfassen; ein Punktpfad MUST NOT mehr zu einer impliziten Variablen mit Punkt im Namen werden.sprachinventar: Das Inventar SHALL neben den Elementen der Original-Hilfe auch das Forms-Objektmodell führen.
Impact
crates/tb-frontend: Lexer (Punkt und!im Objektkontext), Parser (TYPEOF,$FORM, Ereignisprozedur-Signaturen), Semantik (Objektauflösung, Eigenschaftstypen, Ereignisprozedur-Erkennung).crates/tb-ui: Formularmodell, Steuerelementbaum, Lade-/Entladezyklus, Dispatch — der Platzhalterforms.rswird ausgefüllt.crates/tb-vm: Aufruf von Ereignisprozeduren über den Rückrufweg ausphase-4-ereignisschleife; Fortsetzungspunkt für modalesSHOW.crates/tb-runtime: Fehler 362 und 400–403 als Auslöser.docs/:inventar.mdum das Objektmodell erweitert;forms-referenz.mdum die belegten Detailfragen ergänzt;sprachreferenz.md§12 ausformuliert.- PLAN.md: Punkte „Formular-Modell" und „Ereignisdispatch" der Phase 4.