Phase 4: Formularmodell und Objektsprache

This commit is contained in:
2026-09-04 17:30:32 +02:00
parent 5cf5a6582c
commit 54488b5b67
35 changed files with 7195 additions and 627 deletions

View File

@@ -0,0 +1,2 @@
schema: spec-driven
created: 2026-09-04

View File

@@ -0,0 +1,140 @@
# Design — Formularmodell und Objektsprache
## Context
Siehe proposal.md — Why. Drei Bestandsbefunde schneiden den Entwurf zu:
1. **Der Punkt gehört heute zum Bezeichner.** Der Lexer nimmt `.` in den
Namen auf (`a.b` ist ein Token), die Semantik zerlegt ihn nur, wenn
die Basis ein UDT ist. Ein Objektzugriff fällt deshalb durch bis zur
impliziten Variablen.
2. **`!` ist heute immer Typsuffix.** `Form1!Text1` liest sich als
`Form1` (SINGLE) gefolgt von `Text1`.
3. **Der Rückrufweg existiert bereits** aus `phase-4-ereignisschleife`:
die VM kann ein Ziel anspringen und zurückkehren. Ereignisprozeduren
brauchen davon die Variante „Prozedur mit Argumenten" statt
`GOSUB`-Ziel".
## Goals / Non-Goals
**Goals:**
- Objektzugriffe, die zur Übersetzungszeit gegen die Klasse geprüft
werden — kein Nachschlagen von Eigenschaftsnamen zur Laufzeit im
Normalfall.
- Ein Formularmodell, das die Steuerelemente des Folge-Changes nur noch
füllen, nicht umbauen müssen.
- Modales `SHOW` ohne zweiten Ausführungsstrang.
**Non-Goals:**
- Darstellung und Eingabebehandlung der Steuerelemente.
- Ein offenes Objektsystem für Anwenderklassen (Stufe 2).
## Decisions
### D1 — Objektnamen werden zur Übersetzungszeit aufgelöst
Formulare und Steuerelemente sind zur Übersetzungszeit bekannt: sie
stammen aus der `.FRM`-Beschreibung bzw. dem Formular-Designer. Der
Compiler löst `Text1.Text` deshalb in „Objekt 7, Eigenschaft 12" auf und
prüft Typ und Schreibbarkeit sofort.
| Alternative | Warum nicht |
|---|---|
| Eigenschaftsnamen zur Laufzeit nachschlagen | Verlagert jeden Tippfehler in eine Laufzeitmeldung — genau die stille Lücke, die der Guiding Principle verbietet; zudem eine Hashsuche pro Zugriff |
Der Zugriff über `CONTROL`-Parameter (`SUB Setze (c AS CONTROL)`) bleibt
dynamisch; dort prüft die Laufzeit und `TYPEOF` fragt die Klasse ab.
### D2 — Der Punkt wird im Lexer nicht mehr gefaltet, sondern im Parser zerlegt
Der Lexer liefert weiterhin ein Token, das Punkte enthalten kann (die
Rückwärtskompatibilität für Variablennamen mit Punkt bleibt: klassische
Programme nutzen `Kunde.Name` als gewöhnlichen Variablennamen). Die
Auflösung entscheidet die Semantik in dieser Reihenfolge:
```
Basis ist UDT-Variable -> Feldzugriff wie bisher
Basis ist Formular/Control -> Eigenschaftszugriff
Basis ist SCREEN -> Bildschirmobjekt
sonst -> Diagnose mit Basis- und Gliedname
(heute: implizite Variable)
```
Damit ändert sich für bestehende Programme nichts, solange kein Objekt
den Namen trägt; Objekte gewinnen gegen implizite Variablen, weil
implizite Variablen mit Punkt im Namen ohnehin ein Bug waren.
### D3 — `!` entscheidet sich am folgenden Token
Folgt auf `!` unmittelbar ein Bezeichner, ist es der Container-Operator;
sonst das Typsuffix. `Wert! = 1.5` und `Form1!Text1.Text = "a"` sind
damit unterscheidbar, ohne dass der Lexer wissen muss, was `Form1` ist.
Der Fall `Wert!Text` — SINGLE-Variable direkt gefolgt von einem
Bezeichner — ist in keiner gültigen Syntax des Dialekts erreichbar.
### D4 — Modales SHOW ist ein Frame-Zustand, kein zweiter Strang
`SHOW 1` markiert den aufrufenden Frame als „wartet auf Formular X" und
gibt an die Ereignisschleife zurück. Die Schleife stellt weiter zu; wird
X entladen oder verborgen, läuft der markierte Frame an der Anweisung
nach `SHOW` weiter.
```
Form1.SHOW 1
|
+-- Frame markieren (wartet auf Form1) --> Ereignisschleife
|
Ereignisse zustellen <--+
|
UNLOAD Form1 ------------+
|
PRINT "danach" <-- Marke faellt, Frame laeuft weiter
```
Eine geschachtelte Schleife innerhalb des `SHOW`-Aufrufs wäre die
naheliegende Variante, macht aber die Stapeltiefe von der Zahl
verschachtelter modaler Formulare abhängig und verträgt sich nicht mit
dem Einzelschritt des Debuggers in Phase 5.
### D5 — Ereignisprozeduren sind gewöhnliche Prozeduren mit fester Signatur
Der Dispatch ruft `Command1_Click` wie jeden anderen Prozeduraufruf, nur
angestoßen von der Schleife statt von einer Anweisung. Damit gelten
Frames, `ON ERROR`, `EXIT SUB` und der Debugger unverändert. Die
Zuordnung Name → Objekt/Ereignis entsteht zur Übersetzungszeit; zur
Laufzeit ist es ein Index.
### D6 — Das Inventar bekommt eine zweite Quelle
Die Themenliste der Original-Hilfe führt das Objektmodell nicht. Statt
es unerfasst zu lassen — und damit die Abnahme der Phase 6 blind zu
machen —, führt das Inventar Eigenschaften, Methoden und Ereignisse je
Klasse mit der Forms-Referenz als Quelle. Der bestehende Abgleichstest
prüft sie mit denselben Regeln.
Größenordnung: 17 Klassen, in Summe einige hundert Einträge. Das ist der
Preis dafür, dass „Vollständigkeit ist das Soll" für Forms überhaupt
messbar wird.
## Risks / Trade-offs
- **Namenskollision Objekt gegen Variable** → Objekte gewinnen; ein
Programm mit einer Variablen `Text1` und einem Steuerelement `Text1`
bekommt eine Diagnose statt einer stillen Umdeutung.
- **Der Inventarzuwachs erschlägt die Tabelle** → eigene Gruppe je
Klasse, damit die bestehenden Gruppen lesbar bleiben; der Abgleichstest
nennt weiterhin einzelne Einträge.
- **Modale Marke und Debugger** → der Fortsetzungspunkt ist derselbe
Mechanismus wie `STOP`/`CONT`; er wird zusammen mit Phase 5 geprüft.
- **`.FRM` fehlt noch** → bis dahin entstehen Formulare im Test aus einer
im Code aufgebauten Beschreibung; das Objektmodell hängt nicht am
Dateiformat.
## Open Questions
- Z-Reihenfolge bei überlappenden Steuerelementen (offene Detailfrage der
Forms-Referenz) — betrifft die Darstellung, nicht das Objektmodell.
- Ob `ControlPanel` alle 18 Systemfarbwerte des Vorbilds abbildet oder
eine Teilmenge, entscheidet sich mit der Darstellung im Folge-Change.

View File

@@ -0,0 +1,644 @@
# Klassen und Eigenschaften — Belegstand
Diese Matrix ist die maschinennahe Auswertung der bestehenden
[Forms-Referenz](../../../docs/forms-referenz.md). Deren Primärquellen sind die
dekodierte Originalhilfe, `CONSTANT.BI`, die Stringtabellen der
Originalprogramme und zeitgenössische Beispielprojekte. Die Quelle steht in
jeder Tabellenzeile; „Forms-Referenz: Klasse-Art“ meint den gleichnamigen,
quellengeprüften Klassenabschnitt, nicht eine neue Behauptung dieses Changes.
Als unabhängige Gegenprobe wurde `cout/vbdos` in Commit
`1cdd2b32b829fe1721d0b6aecc433abc47a96fb6` ausgewertet. Die binären
Formulare belegen unter anderem `Form_Load`, `Form_Unload`,
`Form_Resize`, `*_Click`, `Caption`, `Text`, `Visible`,
`Enabled`, `SelText` und `MousePointer` in
`microsoft/check.frm`, `notepad.frm`, `qlbview.frm`, `seek.frm`,
`spindemo.frm`, `graphics/graphics.frm` und
`misc/mentors/mentors.frm`. Die SHA-256-Werte sind der Reihe nach
`ed552601…52c9`, `e11b76f6…3c97`, `358e7bab…b97`,
`2c7bf1df…b68`, `259e67a3…c738`, `58901348…ecb0f` und
`e3ac6a4e…87fb`. Die Beispiele erweitern die Originalhilfe nicht; sie
bestätigen nur tatsächlich verwendete Namen und Signaturen.
„INTEGER (Boolean)“ wird in BASIC als 0/1 gesehen. Ein fehlender
Wertebereich bedeutet, dass der Typ selbst begrenzt. „leer/Objektzustand“
ist kein frei schreibbarer Zahlenwert. Die Tabelle enthält bewusst auch
Elemente des Folge-Changes: hier werden ihre Namen und Verträge festgelegt,
nicht Darstellung oder Eingabeverhalten.
## Ereignissignaturen und Steuerelement-Arrays
| Ereignisfamilie | Forms-Referenz | Compiler-Signatur |
|---|---|---|
| `KeyDown`, `KeyUp` | `(KeyCode AS INTEGER, Shift AS INTEGER)` | identisch |
| `KeyPress` | `(KeyAscii AS INTEGER)` | identisch |
| `MouseDown`, `MouseMove`, `MouseUp` | `(Button AS INTEGER, Shift AS INTEGER, X AS SINGLE, Y AS SINGLE)` | identisch |
| `DragDrop` | `(Source AS CONTROL, X AS SINGLE, Y AS SINGLE)` | identisch |
| `DragOver` | `(Source AS CONTROL, X AS SINGLE, Y AS SINGLE, State AS INTEGER)` | identisch |
| `Unload` | `(Cancel AS INTEGER)` | identisch; ungleich 0 verhindert Entladen |
| alle übrigen geführten Ereignisse | keine Parameter | identisch |
Bei einem Steuerelement-Array steht gemäß Forms-Referenz
`Index AS INTEGER` immer als erster Parameter vor der jeweiligen
Signatur. `LOAD name(index)` klont Element 0 als Vorlage;
`UNLOAD name(index)` darf ein Entwurfszeit-Element nicht entfernen
(Fehler 362). `KeyAscii` ist die dokumentierte UTF-8-Abweichung als
Unicode-Codepoint; Shift-Bits (1/2/4), Maustasten (1/2/4) und
DragOver-State (0/1/2) bleiben kompatibel.
## FORM
| Element | Art/Typ | Bereich | Vorgabe | Laufzeit | Quelle |
|---|---|---|---|---|---|
| `BACKCOLOR` | Eigenschaft / INTEGER | 0…15 | 7 | lesen/schreiben | Forms-Referenz: FORM-Eigenschaften |
| `ENABLED` | Eigenschaft / INTEGER (Boolean) | — | True | lesen/schreiben | Forms-Referenz: FORM-Eigenschaften |
| `HEIGHT` | Eigenschaft / INTEGER | 1…254 | 1 | lesen/schreiben | Forms-Referenz: FORM-Eigenschaften |
| `LEFT` | Eigenschaft / INTEGER | 0…254 | 0 | lesen/schreiben | Forms-Referenz: FORM-Eigenschaften |
| `MOUSEPOINTER` | Eigenschaft / INTEGER | 0…12 | 0 | lesen/schreiben | Forms-Referenz: FORM-Eigenschaften |
| `PARENT` | Eigenschaft / CONTROL/FORM | — | leer/Objektzustand | read-only | Forms-Referenz: FORM-Eigenschaften |
| `TAG` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: FORM-Eigenschaften |
| `TOP` | Eigenschaft / INTEGER | 0…254 | 0 | lesen/schreiben | Forms-Referenz: FORM-Eigenschaften |
| `VISIBLE` | Eigenschaft / INTEGER (Boolean) | — | False | lesen/schreiben | Forms-Referenz: FORM-Eigenschaften |
| `WIDTH` | Eigenschaft / INTEGER | 1…254 | 1 | lesen/schreiben | Forms-Referenz: FORM-Eigenschaften |
| `FORECOLOR` | Eigenschaft / INTEGER | 0…15 | 0 | lesen/schreiben | Forms-Referenz: FORM-Eigenschaften |
| `DRAGMODE` | Eigenschaft / INTEGER | 0…1 | 0 | lesen/schreiben | Forms-Referenz: FORM-Eigenschaften |
| `AUTOREDRAW` | Eigenschaft / INTEGER (Boolean) | — | False | lesen/schreiben | Forms-Referenz: FORM-Eigenschaften |
| `BORDERSTYLE` | Eigenschaft / INTEGER | 0…6 | 2 | lesen/schreiben | Forms-Referenz: FORM-Eigenschaften |
| `CAPTION` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: FORM-Eigenschaften |
| `CONTROLBOX` | Eigenschaft / INTEGER (Boolean) | — | True | lesen/schreiben | Forms-Referenz: FORM-Eigenschaften |
| `CURRENTX` | Eigenschaft / INTEGER | — | 0 | lesen/schreiben | Forms-Referenz: FORM-Eigenschaften |
| `CURRENTY` | Eigenschaft / INTEGER | — | 0 | lesen/schreiben | Forms-Referenz: FORM-Eigenschaften |
| `FORMNAME` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: FORM-Eigenschaften |
| `FORMTYPE` | Eigenschaft / INTEGER | 0…1 | 0 | lesen/schreiben | Forms-Referenz: FORM-Eigenschaften |
| `MAXBUTTON` | Eigenschaft / INTEGER (Boolean) | — | True | lesen/schreiben | Forms-Referenz: FORM-Eigenschaften |
| `MINBUTTON` | Eigenschaft / INTEGER (Boolean) | — | True | lesen/schreiben | Forms-Referenz: FORM-Eigenschaften |
| `SCALEHEIGHT` | Eigenschaft / INTEGER | — | leer/Objektzustand | read-only | Forms-Referenz: FORM-Eigenschaften |
| `SCALEWIDTH` | Eigenschaft / INTEGER | — | leer/Objektzustand | read-only | Forms-Referenz: FORM-Eigenschaften |
| `WINDOWSTATE` | Eigenschaft / INTEGER | 0…2 | 0 | lesen/schreiben | Forms-Referenz: FORM-Eigenschaften |
| `CLS` | Methode | — | — | Aufruf | Forms-Referenz: FORM-Methoden |
| `DRAG` | Methode | — | — | Aufruf | Forms-Referenz: FORM-Methoden |
| `HIDE` | Methode | — | — | Aufruf | Forms-Referenz: FORM-Methoden |
| `LOAD` | Methode | — | — | Aufruf | Forms-Referenz: FORM-Methoden |
| `MOVE` | Methode | — | — | Aufruf | Forms-Referenz: FORM-Methoden |
| `PRINT` | Methode | — | — | Aufruf | Forms-Referenz: FORM-Methoden |
| `PRINTFORM` | Methode | — | — | Aufruf | Forms-Referenz: FORM-Methoden |
| `REFRESH` | Methode | — | — | Aufruf | Forms-Referenz: FORM-Methoden |
| `SHOW` | Methode | — | — | Aufruf | Forms-Referenz: FORM-Methoden |
| `TEXTHEIGHT` | Methode | — | — | Aufruf | Forms-Referenz: FORM-Methoden |
| `TEXTWIDTH` | Methode | — | — | Aufruf | Forms-Referenz: FORM-Methoden |
| `UNLOAD` | Methode | — | — | Aufruf | Forms-Referenz: FORM-Methoden |
| `CLICK` | Ereignis | — | — | Dispatch | Forms-Referenz: FORM-Ereignisse |
| `DBLCLICK` | Ereignis | — | — | Dispatch | Forms-Referenz: FORM-Ereignisse |
| `DRAGDROP` | Ereignis | — | — | Dispatch | Forms-Referenz: FORM-Ereignisse |
| `DRAGOVER` | Ereignis | — | — | Dispatch | Forms-Referenz: FORM-Ereignisse |
| `GOTFOCUS` | Ereignis | — | — | Dispatch | Forms-Referenz: FORM-Ereignisse |
| `KEYDOWN` | Ereignis | — | — | Dispatch | Forms-Referenz: FORM-Ereignisse |
| `KEYPRESS` | Ereignis | — | — | Dispatch | Forms-Referenz: FORM-Ereignisse |
| `KEYUP` | Ereignis | — | — | Dispatch | Forms-Referenz: FORM-Ereignisse |
| `LOAD` | Ereignis | — | — | Dispatch | Forms-Referenz: FORM-Ereignisse |
| `LOSTFOCUS` | Ereignis | — | — | Dispatch | Forms-Referenz: FORM-Ereignisse |
| `MOUSEDOWN` | Ereignis | — | — | Dispatch | Forms-Referenz: FORM-Ereignisse |
| `MOUSEMOVE` | Ereignis | — | — | Dispatch | Forms-Referenz: FORM-Ereignisse |
| `MOUSEUP` | Ereignis | — | — | Dispatch | Forms-Referenz: FORM-Ereignisse |
| `PAINT` | Ereignis | — | — | Dispatch | Forms-Referenz: FORM-Ereignisse |
| `RESIZE` | Ereignis | — | — | Dispatch | Forms-Referenz: FORM-Ereignisse |
| `UNLOAD` | Ereignis | — | — | Dispatch | Forms-Referenz: FORM-Ereignisse |
## CHECKBOX
| Element | Art/Typ | Bereich | Vorgabe | Laufzeit | Quelle |
|---|---|---|---|---|---|
| `BACKCOLOR` | Eigenschaft / INTEGER | 0…15 | 7 | lesen/schreiben | Forms-Referenz: CHECKBOX-Eigenschaften |
| `ENABLED` | Eigenschaft / INTEGER (Boolean) | — | True | lesen/schreiben | Forms-Referenz: CHECKBOX-Eigenschaften |
| `HEIGHT` | Eigenschaft / INTEGER | 1…254 | 1 | lesen/schreiben | Forms-Referenz: CHECKBOX-Eigenschaften |
| `LEFT` | Eigenschaft / INTEGER | 0…254 | 0 | lesen/schreiben | Forms-Referenz: CHECKBOX-Eigenschaften |
| `MOUSEPOINTER` | Eigenschaft / INTEGER | 0…12 | 0 | lesen/schreiben | Forms-Referenz: CHECKBOX-Eigenschaften |
| `PARENT` | Eigenschaft / CONTROL/FORM | — | leer/Objektzustand | read-only | Forms-Referenz: CHECKBOX-Eigenschaften |
| `TAG` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: CHECKBOX-Eigenschaften |
| `TOP` | Eigenschaft / INTEGER | 0…254 | 0 | lesen/schreiben | Forms-Referenz: CHECKBOX-Eigenschaften |
| `VISIBLE` | Eigenschaft / INTEGER (Boolean) | — | True | lesen/schreiben | Forms-Referenz: CHECKBOX-Eigenschaften |
| `WIDTH` | Eigenschaft / INTEGER | 1…254 | 1 | lesen/schreiben | Forms-Referenz: CHECKBOX-Eigenschaften |
| `INDEX` | Eigenschaft / INTEGER | — | 0 | lesen/schreiben | Forms-Referenz: CHECKBOX-Eigenschaften |
| `TABINDEX` | Eigenschaft / INTEGER | — | 0 | lesen/schreiben | Forms-Referenz: CHECKBOX-Eigenschaften |
| `TABSTOP` | Eigenschaft / INTEGER (Boolean) | — | True | lesen/schreiben | Forms-Referenz: CHECKBOX-Eigenschaften |
| `CTLNAME` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: CHECKBOX-Eigenschaften |
| `FORECOLOR` | Eigenschaft / INTEGER | 0…15 | 0 | lesen/schreiben | Forms-Referenz: CHECKBOX-Eigenschaften |
| `DRAGMODE` | Eigenschaft / INTEGER | 0…1 | 0 | lesen/schreiben | Forms-Referenz: CHECKBOX-Eigenschaften |
| `CAPTION` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: CHECKBOX-Eigenschaften |
| `VALUE` | Eigenschaft / INTEGER | 0…2 | 0 | lesen/schreiben | Forms-Referenz: CHECKBOX-Eigenschaften |
| `DRAG` | Methode | — | — | Aufruf | Forms-Referenz: CHECKBOX-Methoden |
| `MOVE` | Methode | — | — | Aufruf | Forms-Referenz: CHECKBOX-Methoden |
| `REFRESH` | Methode | — | — | Aufruf | Forms-Referenz: CHECKBOX-Methoden |
| `SETFOCUS` | Methode | — | — | Aufruf | Forms-Referenz: CHECKBOX-Methoden |
| `CLICK` | Ereignis | — | — | Dispatch | Forms-Referenz: CHECKBOX-Ereignisse |
| `DRAGDROP` | Ereignis | — | — | Dispatch | Forms-Referenz: CHECKBOX-Ereignisse |
| `DRAGOVER` | Ereignis | — | — | Dispatch | Forms-Referenz: CHECKBOX-Ereignisse |
| `GOTFOCUS` | Ereignis | — | — | Dispatch | Forms-Referenz: CHECKBOX-Ereignisse |
| `KEYDOWN` | Ereignis | — | — | Dispatch | Forms-Referenz: CHECKBOX-Ereignisse |
| `KEYPRESS` | Ereignis | — | — | Dispatch | Forms-Referenz: CHECKBOX-Ereignisse |
| `KEYUP` | Ereignis | — | — | Dispatch | Forms-Referenz: CHECKBOX-Ereignisse |
| `LOSTFOCUS` | Ereignis | — | — | Dispatch | Forms-Referenz: CHECKBOX-Ereignisse |
## COMBOBOX
| Element | Art/Typ | Bereich | Vorgabe | Laufzeit | Quelle |
|---|---|---|---|---|---|
| `BACKCOLOR` | Eigenschaft / INTEGER | 0…15 | 7 | lesen/schreiben | Forms-Referenz: COMBOBOX-Eigenschaften |
| `ENABLED` | Eigenschaft / INTEGER (Boolean) | — | True | lesen/schreiben | Forms-Referenz: COMBOBOX-Eigenschaften |
| `HEIGHT` | Eigenschaft / INTEGER | 1…254 | 1 | lesen/schreiben | Forms-Referenz: COMBOBOX-Eigenschaften |
| `LEFT` | Eigenschaft / INTEGER | 0…254 | 0 | lesen/schreiben | Forms-Referenz: COMBOBOX-Eigenschaften |
| `MOUSEPOINTER` | Eigenschaft / INTEGER | 0…12 | 0 | lesen/schreiben | Forms-Referenz: COMBOBOX-Eigenschaften |
| `PARENT` | Eigenschaft / CONTROL/FORM | — | leer/Objektzustand | read-only | Forms-Referenz: COMBOBOX-Eigenschaften |
| `TAG` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: COMBOBOX-Eigenschaften |
| `TOP` | Eigenschaft / INTEGER | 0…254 | 0 | lesen/schreiben | Forms-Referenz: COMBOBOX-Eigenschaften |
| `VISIBLE` | Eigenschaft / INTEGER (Boolean) | — | True | lesen/schreiben | Forms-Referenz: COMBOBOX-Eigenschaften |
| `WIDTH` | Eigenschaft / INTEGER | 1…254 | 1 | lesen/schreiben | Forms-Referenz: COMBOBOX-Eigenschaften |
| `INDEX` | Eigenschaft / INTEGER | — | 0 | lesen/schreiben | Forms-Referenz: COMBOBOX-Eigenschaften |
| `TABINDEX` | Eigenschaft / INTEGER | — | 0 | lesen/schreiben | Forms-Referenz: COMBOBOX-Eigenschaften |
| `TABSTOP` | Eigenschaft / INTEGER (Boolean) | — | True | lesen/schreiben | Forms-Referenz: COMBOBOX-Eigenschaften |
| `CTLNAME` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: COMBOBOX-Eigenschaften |
| `FORECOLOR` | Eigenschaft / INTEGER | 0…15 | 0 | lesen/schreiben | Forms-Referenz: COMBOBOX-Eigenschaften |
| `DRAGMODE` | Eigenschaft / INTEGER | 0…1 | 0 | lesen/schreiben | Forms-Referenz: COMBOBOX-Eigenschaften |
| `LIST` | Eigenschaft / STRING | — | leer/Objektzustand | read-only | Forms-Referenz: COMBOBOX-Eigenschaften |
| `LISTCOUNT` | Eigenschaft / INTEGER | — | leer/Objektzustand | read-only | Forms-Referenz: COMBOBOX-Eigenschaften |
| `LISTINDEX` | Eigenschaft / INTEGER | — | -1 | lesen/schreiben | Forms-Referenz: COMBOBOX-Eigenschaften |
| `SORTED` | Eigenschaft / INTEGER (Boolean) | — | False | lesen/schreiben | Forms-Referenz: COMBOBOX-Eigenschaften |
| `SELLENGTH` | Eigenschaft / INTEGER | — | 0 | lesen/schreiben | Forms-Referenz: COMBOBOX-Eigenschaften |
| `SELSTART` | Eigenschaft / INTEGER | — | 0 | lesen/schreiben | Forms-Referenz: COMBOBOX-Eigenschaften |
| `SELTEXT` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: COMBOBOX-Eigenschaften |
| `STYLE` | Eigenschaft / INTEGER | 0…2 | 0 | lesen/schreiben | Forms-Referenz: COMBOBOX-Eigenschaften |
| `TEXT` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: COMBOBOX-Eigenschaften |
| `ADDITEM` | Methode | — | — | Aufruf | Forms-Referenz: COMBOBOX-Methoden |
| `DRAG` | Methode | — | — | Aufruf | Forms-Referenz: COMBOBOX-Methoden |
| `MOVE` | Methode | — | — | Aufruf | Forms-Referenz: COMBOBOX-Methoden |
| `REFRESH` | Methode | — | — | Aufruf | Forms-Referenz: COMBOBOX-Methoden |
| `REMOVEITEM` | Methode | — | — | Aufruf | Forms-Referenz: COMBOBOX-Methoden |
| `SETFOCUS` | Methode | — | — | Aufruf | Forms-Referenz: COMBOBOX-Methoden |
| `CHANGE` | Ereignis | — | — | Dispatch | Forms-Referenz: COMBOBOX-Ereignisse |
| `CLICK` | Ereignis | — | — | Dispatch | Forms-Referenz: COMBOBOX-Ereignisse |
| `DBLCLICK` | Ereignis | — | — | Dispatch | Forms-Referenz: COMBOBOX-Ereignisse |
| `DRAGDROP` | Ereignis | — | — | Dispatch | Forms-Referenz: COMBOBOX-Ereignisse |
| `DRAGOVER` | Ereignis | — | — | Dispatch | Forms-Referenz: COMBOBOX-Ereignisse |
| `DROPDOWN` | Ereignis | — | — | Dispatch | Forms-Referenz: COMBOBOX-Ereignisse |
| `GOTFOCUS` | Ereignis | — | — | Dispatch | Forms-Referenz: COMBOBOX-Ereignisse |
| `KEYDOWN` | Ereignis | — | — | Dispatch | Forms-Referenz: COMBOBOX-Ereignisse |
| `KEYPRESS` | Ereignis | — | — | Dispatch | Forms-Referenz: COMBOBOX-Ereignisse |
| `KEYUP` | Ereignis | — | — | Dispatch | Forms-Referenz: COMBOBOX-Ereignisse |
| `LOSTFOCUS` | Ereignis | — | — | Dispatch | Forms-Referenz: COMBOBOX-Ereignisse |
| `MOUSEDOWN` | Ereignis | — | — | Dispatch | Forms-Referenz: COMBOBOX-Ereignisse |
| `MOUSEMOVE` | Ereignis | — | — | Dispatch | Forms-Referenz: COMBOBOX-Ereignisse |
| `MOUSEUP` | Ereignis | — | — | Dispatch | Forms-Referenz: COMBOBOX-Ereignisse |
## COMMANDBUTTON
| Element | Art/Typ | Bereich | Vorgabe | Laufzeit | Quelle |
|---|---|---|---|---|---|
| `BACKCOLOR` | Eigenschaft / INTEGER | 0…15 | 7 | lesen/schreiben | Forms-Referenz: COMMANDBUTTON-Eigenschaften |
| `ENABLED` | Eigenschaft / INTEGER (Boolean) | — | True | lesen/schreiben | Forms-Referenz: COMMANDBUTTON-Eigenschaften |
| `HEIGHT` | Eigenschaft / INTEGER | 1…254 | 1 | lesen/schreiben | Forms-Referenz: COMMANDBUTTON-Eigenschaften |
| `LEFT` | Eigenschaft / INTEGER | 0…254 | 0 | lesen/schreiben | Forms-Referenz: COMMANDBUTTON-Eigenschaften |
| `MOUSEPOINTER` | Eigenschaft / INTEGER | 0…12 | 0 | lesen/schreiben | Forms-Referenz: COMMANDBUTTON-Eigenschaften |
| `PARENT` | Eigenschaft / CONTROL/FORM | — | leer/Objektzustand | read-only | Forms-Referenz: COMMANDBUTTON-Eigenschaften |
| `TAG` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: COMMANDBUTTON-Eigenschaften |
| `TOP` | Eigenschaft / INTEGER | 0…254 | 0 | lesen/schreiben | Forms-Referenz: COMMANDBUTTON-Eigenschaften |
| `VISIBLE` | Eigenschaft / INTEGER (Boolean) | — | True | lesen/schreiben | Forms-Referenz: COMMANDBUTTON-Eigenschaften |
| `WIDTH` | Eigenschaft / INTEGER | 1…254 | 1 | lesen/schreiben | Forms-Referenz: COMMANDBUTTON-Eigenschaften |
| `INDEX` | Eigenschaft / INTEGER | — | 0 | lesen/schreiben | Forms-Referenz: COMMANDBUTTON-Eigenschaften |
| `TABINDEX` | Eigenschaft / INTEGER | — | 0 | lesen/schreiben | Forms-Referenz: COMMANDBUTTON-Eigenschaften |
| `TABSTOP` | Eigenschaft / INTEGER (Boolean) | — | True | lesen/schreiben | Forms-Referenz: COMMANDBUTTON-Eigenschaften |
| `CTLNAME` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: COMMANDBUTTON-Eigenschaften |
| `DRAGMODE` | Eigenschaft / INTEGER | 0…1 | 0 | lesen/schreiben | Forms-Referenz: COMMANDBUTTON-Eigenschaften |
| `CANCEL` | Eigenschaft / INTEGER (Boolean) | — | False | lesen/schreiben | Forms-Referenz: COMMANDBUTTON-Eigenschaften |
| `CAPTION` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: COMMANDBUTTON-Eigenschaften |
| `DEFAULT` | Eigenschaft / INTEGER (Boolean) | — | False | lesen/schreiben | Forms-Referenz: COMMANDBUTTON-Eigenschaften |
| `VALUE` | Eigenschaft / INTEGER (Boolean) | — | False | lesen/schreiben | Forms-Referenz: COMMANDBUTTON-Eigenschaften |
| `DRAG` | Methode | — | — | Aufruf | Forms-Referenz: COMMANDBUTTON-Methoden |
| `MOVE` | Methode | — | — | Aufruf | Forms-Referenz: COMMANDBUTTON-Methoden |
| `REFRESH` | Methode | — | — | Aufruf | Forms-Referenz: COMMANDBUTTON-Methoden |
| `SETFOCUS` | Methode | — | — | Aufruf | Forms-Referenz: COMMANDBUTTON-Methoden |
| `CLICK` | Ereignis | — | — | Dispatch | Forms-Referenz: COMMANDBUTTON-Ereignisse |
| `DRAGDROP` | Ereignis | — | — | Dispatch | Forms-Referenz: COMMANDBUTTON-Ereignisse |
| `DRAGOVER` | Ereignis | — | — | Dispatch | Forms-Referenz: COMMANDBUTTON-Ereignisse |
| `GOTFOCUS` | Ereignis | — | — | Dispatch | Forms-Referenz: COMMANDBUTTON-Ereignisse |
| `KEYDOWN` | Ereignis | — | — | Dispatch | Forms-Referenz: COMMANDBUTTON-Ereignisse |
| `KEYPRESS` | Ereignis | — | — | Dispatch | Forms-Referenz: COMMANDBUTTON-Ereignisse |
| `KEYUP` | Ereignis | — | — | Dispatch | Forms-Referenz: COMMANDBUTTON-Ereignisse |
| `LOSTFOCUS` | Ereignis | — | — | Dispatch | Forms-Referenz: COMMANDBUTTON-Ereignisse |
## DIRLISTBOX
| Element | Art/Typ | Bereich | Vorgabe | Laufzeit | Quelle |
|---|---|---|---|---|---|
| `BACKCOLOR` | Eigenschaft / INTEGER | 0…15 | 7 | lesen/schreiben | Forms-Referenz: DIRLISTBOX-Eigenschaften |
| `ENABLED` | Eigenschaft / INTEGER (Boolean) | — | True | lesen/schreiben | Forms-Referenz: DIRLISTBOX-Eigenschaften |
| `HEIGHT` | Eigenschaft / INTEGER | 1…254 | 1 | lesen/schreiben | Forms-Referenz: DIRLISTBOX-Eigenschaften |
| `LEFT` | Eigenschaft / INTEGER | 0…254 | 0 | lesen/schreiben | Forms-Referenz: DIRLISTBOX-Eigenschaften |
| `MOUSEPOINTER` | Eigenschaft / INTEGER | 0…12 | 0 | lesen/schreiben | Forms-Referenz: DIRLISTBOX-Eigenschaften |
| `PARENT` | Eigenschaft / CONTROL/FORM | — | leer/Objektzustand | read-only | Forms-Referenz: DIRLISTBOX-Eigenschaften |
| `TAG` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: DIRLISTBOX-Eigenschaften |
| `TOP` | Eigenschaft / INTEGER | 0…254 | 0 | lesen/schreiben | Forms-Referenz: DIRLISTBOX-Eigenschaften |
| `VISIBLE` | Eigenschaft / INTEGER (Boolean) | — | True | lesen/schreiben | Forms-Referenz: DIRLISTBOX-Eigenschaften |
| `WIDTH` | Eigenschaft / INTEGER | 1…254 | 1 | lesen/schreiben | Forms-Referenz: DIRLISTBOX-Eigenschaften |
| `INDEX` | Eigenschaft / INTEGER | — | 0 | lesen/schreiben | Forms-Referenz: DIRLISTBOX-Eigenschaften |
| `TABINDEX` | Eigenschaft / INTEGER | — | 0 | lesen/schreiben | Forms-Referenz: DIRLISTBOX-Eigenschaften |
| `TABSTOP` | Eigenschaft / INTEGER (Boolean) | — | True | lesen/schreiben | Forms-Referenz: DIRLISTBOX-Eigenschaften |
| `CTLNAME` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: DIRLISTBOX-Eigenschaften |
| `PATH` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: DIRLISTBOX-Eigenschaften |
| `TEXT` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: DIRLISTBOX-Eigenschaften |
| `CHANGE` | Ereignis | — | — | Dispatch | Forms-Referenz: DIRLISTBOX-Ereignisse |
| `CLICK` | Ereignis | — | — | Dispatch | Forms-Referenz: DIRLISTBOX-Ereignisse |
| `DBLCLICK` | Ereignis | — | — | Dispatch | Forms-Referenz: DIRLISTBOX-Ereignisse |
| `PATHCHANGE` | Ereignis | — | — | Dispatch | Forms-Referenz: DIRLISTBOX-Ereignisse |
## DRIVELISTBOX
| Element | Art/Typ | Bereich | Vorgabe | Laufzeit | Quelle |
|---|---|---|---|---|---|
| `BACKCOLOR` | Eigenschaft / INTEGER | 0…15 | 7 | lesen/schreiben | Forms-Referenz: DRIVELISTBOX-Eigenschaften |
| `ENABLED` | Eigenschaft / INTEGER (Boolean) | — | True | lesen/schreiben | Forms-Referenz: DRIVELISTBOX-Eigenschaften |
| `HEIGHT` | Eigenschaft / INTEGER | 1…254 | 1 | lesen/schreiben | Forms-Referenz: DRIVELISTBOX-Eigenschaften |
| `LEFT` | Eigenschaft / INTEGER | 0…254 | 0 | lesen/schreiben | Forms-Referenz: DRIVELISTBOX-Eigenschaften |
| `MOUSEPOINTER` | Eigenschaft / INTEGER | 0…12 | 0 | lesen/schreiben | Forms-Referenz: DRIVELISTBOX-Eigenschaften |
| `PARENT` | Eigenschaft / CONTROL/FORM | — | leer/Objektzustand | read-only | Forms-Referenz: DRIVELISTBOX-Eigenschaften |
| `TAG` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: DRIVELISTBOX-Eigenschaften |
| `TOP` | Eigenschaft / INTEGER | 0…254 | 0 | lesen/schreiben | Forms-Referenz: DRIVELISTBOX-Eigenschaften |
| `VISIBLE` | Eigenschaft / INTEGER (Boolean) | — | True | lesen/schreiben | Forms-Referenz: DRIVELISTBOX-Eigenschaften |
| `WIDTH` | Eigenschaft / INTEGER | 1…254 | 1 | lesen/schreiben | Forms-Referenz: DRIVELISTBOX-Eigenschaften |
| `INDEX` | Eigenschaft / INTEGER | — | 0 | lesen/schreiben | Forms-Referenz: DRIVELISTBOX-Eigenschaften |
| `TABINDEX` | Eigenschaft / INTEGER | — | 0 | lesen/schreiben | Forms-Referenz: DRIVELISTBOX-Eigenschaften |
| `TABSTOP` | Eigenschaft / INTEGER (Boolean) | — | True | lesen/schreiben | Forms-Referenz: DRIVELISTBOX-Eigenschaften |
| `CTLNAME` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: DRIVELISTBOX-Eigenschaften |
| `DRIVE` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: DRIVELISTBOX-Eigenschaften |
| `TEXT` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: DRIVELISTBOX-Eigenschaften |
| `CHANGE` | Ereignis | — | — | Dispatch | Forms-Referenz: DRIVELISTBOX-Ereignisse |
## FILELISTBOX
| Element | Art/Typ | Bereich | Vorgabe | Laufzeit | Quelle |
|---|---|---|---|---|---|
| `BACKCOLOR` | Eigenschaft / INTEGER | 0…15 | 7 | lesen/schreiben | Forms-Referenz: FILELISTBOX-Eigenschaften |
| `ENABLED` | Eigenschaft / INTEGER (Boolean) | — | True | lesen/schreiben | Forms-Referenz: FILELISTBOX-Eigenschaften |
| `HEIGHT` | Eigenschaft / INTEGER | 1…254 | 1 | lesen/schreiben | Forms-Referenz: FILELISTBOX-Eigenschaften |
| `LEFT` | Eigenschaft / INTEGER | 0…254 | 0 | lesen/schreiben | Forms-Referenz: FILELISTBOX-Eigenschaften |
| `MOUSEPOINTER` | Eigenschaft / INTEGER | 0…12 | 0 | lesen/schreiben | Forms-Referenz: FILELISTBOX-Eigenschaften |
| `PARENT` | Eigenschaft / CONTROL/FORM | — | leer/Objektzustand | read-only | Forms-Referenz: FILELISTBOX-Eigenschaften |
| `TAG` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: FILELISTBOX-Eigenschaften |
| `TOP` | Eigenschaft / INTEGER | 0…254 | 0 | lesen/schreiben | Forms-Referenz: FILELISTBOX-Eigenschaften |
| `VISIBLE` | Eigenschaft / INTEGER (Boolean) | — | True | lesen/schreiben | Forms-Referenz: FILELISTBOX-Eigenschaften |
| `WIDTH` | Eigenschaft / INTEGER | 1…254 | 1 | lesen/schreiben | Forms-Referenz: FILELISTBOX-Eigenschaften |
| `INDEX` | Eigenschaft / INTEGER | — | 0 | lesen/schreiben | Forms-Referenz: FILELISTBOX-Eigenschaften |
| `TABINDEX` | Eigenschaft / INTEGER | — | 0 | lesen/schreiben | Forms-Referenz: FILELISTBOX-Eigenschaften |
| `TABSTOP` | Eigenschaft / INTEGER (Boolean) | — | True | lesen/schreiben | Forms-Referenz: FILELISTBOX-Eigenschaften |
| `CTLNAME` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: FILELISTBOX-Eigenschaften |
| `FILENAME` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: FILELISTBOX-Eigenschaften |
| `PATH` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: FILELISTBOX-Eigenschaften |
| `PATTERN` | Eigenschaft / STRING | — | `*.*` | lesen/schreiben | Forms-Referenz: FILELISTBOX-Eigenschaften |
| `ARCHIVE` | Eigenschaft / INTEGER (Boolean) | — | True | lesen/schreiben | Forms-Referenz: FILELISTBOX-Eigenschaften |
| `HIDDEN` | Eigenschaft / INTEGER (Boolean) | — | False | lesen/schreiben | Forms-Referenz: FILELISTBOX-Eigenschaften |
| `NORMAL` | Eigenschaft / INTEGER (Boolean) | — | True | lesen/schreiben | Forms-Referenz: FILELISTBOX-Eigenschaften |
| `READONLY` | Eigenschaft / INTEGER (Boolean) | — | True | lesen/schreiben | Forms-Referenz: FILELISTBOX-Eigenschaften |
| `SYSTEM` | Eigenschaft / INTEGER (Boolean) | — | False | lesen/schreiben | Forms-Referenz: FILELISTBOX-Eigenschaften |
| `TEXT` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: FILELISTBOX-Eigenschaften |
| `CLICK` | Ereignis | — | — | Dispatch | Forms-Referenz: FILELISTBOX-Ereignisse |
| `DBLCLICK` | Ereignis | — | — | Dispatch | Forms-Referenz: FILELISTBOX-Ereignisse |
| `PATTERNCHANGE` | Ereignis | — | — | Dispatch | Forms-Referenz: FILELISTBOX-Ereignisse |
| `PATHCHANGE` | Ereignis | — | — | Dispatch | Forms-Referenz: FILELISTBOX-Ereignisse |
## FRAME
| Element | Art/Typ | Bereich | Vorgabe | Laufzeit | Quelle |
|---|---|---|---|---|---|
| `BACKCOLOR` | Eigenschaft / INTEGER | 0…15 | 7 | lesen/schreiben | Forms-Referenz: FRAME-Eigenschaften |
| `ENABLED` | Eigenschaft / INTEGER (Boolean) | — | True | lesen/schreiben | Forms-Referenz: FRAME-Eigenschaften |
| `HEIGHT` | Eigenschaft / INTEGER | 1…254 | 1 | lesen/schreiben | Forms-Referenz: FRAME-Eigenschaften |
| `LEFT` | Eigenschaft / INTEGER | 0…254 | 0 | lesen/schreiben | Forms-Referenz: FRAME-Eigenschaften |
| `MOUSEPOINTER` | Eigenschaft / INTEGER | 0…12 | 0 | lesen/schreiben | Forms-Referenz: FRAME-Eigenschaften |
| `PARENT` | Eigenschaft / CONTROL/FORM | — | leer/Objektzustand | read-only | Forms-Referenz: FRAME-Eigenschaften |
| `TAG` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: FRAME-Eigenschaften |
| `TOP` | Eigenschaft / INTEGER | 0…254 | 0 | lesen/schreiben | Forms-Referenz: FRAME-Eigenschaften |
| `VISIBLE` | Eigenschaft / INTEGER (Boolean) | — | True | lesen/schreiben | Forms-Referenz: FRAME-Eigenschaften |
| `WIDTH` | Eigenschaft / INTEGER | 1…254 | 1 | lesen/schreiben | Forms-Referenz: FRAME-Eigenschaften |
| `CTLNAME` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: FRAME-Eigenschaften |
| `DRAGMODE` | Eigenschaft / INTEGER | 0…1 | 0 | lesen/schreiben | Forms-Referenz: FRAME-Eigenschaften |
| `CAPTION` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: FRAME-Eigenschaften |
| `DRAG` | Methode | — | — | Aufruf | Forms-Referenz: FRAME-Methoden |
| `MOVE` | Methode | — | — | Aufruf | Forms-Referenz: FRAME-Methoden |
| `REFRESH` | Methode | — | — | Aufruf | Forms-Referenz: FRAME-Methoden |
| `DRAGDROP` | Ereignis | — | — | Dispatch | Forms-Referenz: FRAME-Ereignisse |
| `DRAGOVER` | Ereignis | — | — | Dispatch | Forms-Referenz: FRAME-Ereignisse |
## HSCROLLBAR
| Element | Art/Typ | Bereich | Vorgabe | Laufzeit | Quelle |
|---|---|---|---|---|---|
| `BACKCOLOR` | Eigenschaft / INTEGER | 0…15 | 7 | lesen/schreiben | Forms-Referenz: HSCROLLBAR-Eigenschaften |
| `ENABLED` | Eigenschaft / INTEGER (Boolean) | — | True | lesen/schreiben | Forms-Referenz: HSCROLLBAR-Eigenschaften |
| `HEIGHT` | Eigenschaft / INTEGER | 1…254 | 1 | lesen/schreiben | Forms-Referenz: HSCROLLBAR-Eigenschaften |
| `LEFT` | Eigenschaft / INTEGER | 0…254 | 0 | lesen/schreiben | Forms-Referenz: HSCROLLBAR-Eigenschaften |
| `MOUSEPOINTER` | Eigenschaft / INTEGER | 0…12 | 0 | lesen/schreiben | Forms-Referenz: HSCROLLBAR-Eigenschaften |
| `PARENT` | Eigenschaft / CONTROL/FORM | — | leer/Objektzustand | read-only | Forms-Referenz: HSCROLLBAR-Eigenschaften |
| `TAG` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: HSCROLLBAR-Eigenschaften |
| `TOP` | Eigenschaft / INTEGER | 0…254 | 0 | lesen/schreiben | Forms-Referenz: HSCROLLBAR-Eigenschaften |
| `VISIBLE` | Eigenschaft / INTEGER (Boolean) | — | True | lesen/schreiben | Forms-Referenz: HSCROLLBAR-Eigenschaften |
| `WIDTH` | Eigenschaft / INTEGER | 1…254 | 1 | lesen/schreiben | Forms-Referenz: HSCROLLBAR-Eigenschaften |
| `INDEX` | Eigenschaft / INTEGER | — | 0 | lesen/schreiben | Forms-Referenz: HSCROLLBAR-Eigenschaften |
| `TABINDEX` | Eigenschaft / INTEGER | — | 0 | lesen/schreiben | Forms-Referenz: HSCROLLBAR-Eigenschaften |
| `TABSTOP` | Eigenschaft / INTEGER (Boolean) | — | True | lesen/schreiben | Forms-Referenz: HSCROLLBAR-Eigenschaften |
| `CTLNAME` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: HSCROLLBAR-Eigenschaften |
| `FORECOLOR` | Eigenschaft / INTEGER | 0…15 | 0 | lesen/schreiben | Forms-Referenz: HSCROLLBAR-Eigenschaften |
| `DRAGMODE` | Eigenschaft / INTEGER | 0…1 | 0 | lesen/schreiben | Forms-Referenz: HSCROLLBAR-Eigenschaften |
| `ATTACHED` | Eigenschaft / INTEGER (Boolean) | — | leer/Objektzustand | read-only | Forms-Referenz: HSCROLLBAR-Eigenschaften |
| `LARGECHANGE` | Eigenschaft / INTEGER | 1…32767 | 1 | lesen/schreiben | Forms-Referenz: HSCROLLBAR-Eigenschaften |
| `MIN` | Eigenschaft / INTEGER | -32768…32767 | 0 | lesen/schreiben | Forms-Referenz: HSCROLLBAR-Eigenschaften |
| `MAX` | Eigenschaft / INTEGER | -32768…32767 | 32767 | lesen/schreiben | Forms-Referenz: HSCROLLBAR-Eigenschaften |
| `SMALLCHANGE` | Eigenschaft / INTEGER | 1…32767 | 1 | lesen/schreiben | Forms-Referenz: HSCROLLBAR-Eigenschaften |
| `VALUE` | Eigenschaft / INTEGER | -32768…32767 | 0 | lesen/schreiben | Forms-Referenz: HSCROLLBAR-Eigenschaften |
| `DRAG` | Methode | — | — | Aufruf | Forms-Referenz: HSCROLLBAR-Methoden |
| `MOVE` | Methode | — | — | Aufruf | Forms-Referenz: HSCROLLBAR-Methoden |
| `REFRESH` | Methode | — | — | Aufruf | Forms-Referenz: HSCROLLBAR-Methoden |
| `CHANGE` | Ereignis | — | — | Dispatch | Forms-Referenz: HSCROLLBAR-Ereignisse |
| `DRAGDROP` | Ereignis | — | — | Dispatch | Forms-Referenz: HSCROLLBAR-Ereignisse |
| `DRAGOVER` | Ereignis | — | — | Dispatch | Forms-Referenz: HSCROLLBAR-Ereignisse |
| `GOTFOCUS` | Ereignis | — | — | Dispatch | Forms-Referenz: HSCROLLBAR-Ereignisse |
| `KEYDOWN` | Ereignis | — | — | Dispatch | Forms-Referenz: HSCROLLBAR-Ereignisse |
| `KEYPRESS` | Ereignis | — | — | Dispatch | Forms-Referenz: HSCROLLBAR-Ereignisse |
| `KEYUP` | Ereignis | — | — | Dispatch | Forms-Referenz: HSCROLLBAR-Ereignisse |
| `LOSTFOCUS` | Ereignis | — | — | Dispatch | Forms-Referenz: HSCROLLBAR-Ereignisse |
## LABEL
| Element | Art/Typ | Bereich | Vorgabe | Laufzeit | Quelle |
|---|---|---|---|---|---|
| `BACKCOLOR` | Eigenschaft / INTEGER | 0…15 | 7 | lesen/schreiben | Forms-Referenz: LABEL-Eigenschaften |
| `ENABLED` | Eigenschaft / INTEGER (Boolean) | — | True | lesen/schreiben | Forms-Referenz: LABEL-Eigenschaften |
| `HEIGHT` | Eigenschaft / INTEGER | 1…254 | 1 | lesen/schreiben | Forms-Referenz: LABEL-Eigenschaften |
| `LEFT` | Eigenschaft / INTEGER | 0…254 | 0 | lesen/schreiben | Forms-Referenz: LABEL-Eigenschaften |
| `MOUSEPOINTER` | Eigenschaft / INTEGER | 0…12 | 0 | lesen/schreiben | Forms-Referenz: LABEL-Eigenschaften |
| `PARENT` | Eigenschaft / CONTROL/FORM | — | leer/Objektzustand | read-only | Forms-Referenz: LABEL-Eigenschaften |
| `TAG` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: LABEL-Eigenschaften |
| `TOP` | Eigenschaft / INTEGER | 0…254 | 0 | lesen/schreiben | Forms-Referenz: LABEL-Eigenschaften |
| `VISIBLE` | Eigenschaft / INTEGER (Boolean) | — | True | lesen/schreiben | Forms-Referenz: LABEL-Eigenschaften |
| `WIDTH` | Eigenschaft / INTEGER | 1…254 | 1 | lesen/schreiben | Forms-Referenz: LABEL-Eigenschaften |
| `CTLNAME` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: LABEL-Eigenschaften |
| `FORECOLOR` | Eigenschaft / INTEGER | 0…15 | 0 | lesen/schreiben | Forms-Referenz: LABEL-Eigenschaften |
| `DRAGMODE` | Eigenschaft / INTEGER | 0…1 | 0 | lesen/schreiben | Forms-Referenz: LABEL-Eigenschaften |
| `ALIGNMENT` | Eigenschaft / INTEGER | 0…2 | 0 | lesen/schreiben | Forms-Referenz: LABEL-Eigenschaften |
| `AUTOSIZE` | Eigenschaft / INTEGER (Boolean) | — | False | lesen/schreiben | Forms-Referenz: LABEL-Eigenschaften |
| `BORDERSTYLE` | Eigenschaft / INTEGER | 0…2 | 0 | lesen/schreiben | Forms-Referenz: LABEL-Eigenschaften |
| `CAPTION` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: LABEL-Eigenschaften |
| `DRAG` | Methode | — | — | Aufruf | Forms-Referenz: LABEL-Methoden |
| `MOVE` | Methode | — | — | Aufruf | Forms-Referenz: LABEL-Methoden |
| `REFRESH` | Methode | — | — | Aufruf | Forms-Referenz: LABEL-Methoden |
| `CHANGE` | Ereignis | — | — | Dispatch | Forms-Referenz: LABEL-Ereignisse |
| `CLICK` | Ereignis | — | — | Dispatch | Forms-Referenz: LABEL-Ereignisse |
| `DBLCLICK` | Ereignis | — | — | Dispatch | Forms-Referenz: LABEL-Ereignisse |
| `DRAGDROP` | Ereignis | — | — | Dispatch | Forms-Referenz: LABEL-Ereignisse |
| `DRAGOVER` | Ereignis | — | — | Dispatch | Forms-Referenz: LABEL-Ereignisse |
| `MOUSEDOWN` | Ereignis | — | — | Dispatch | Forms-Referenz: LABEL-Ereignisse |
| `MOUSEMOVE` | Ereignis | — | — | Dispatch | Forms-Referenz: LABEL-Ereignisse |
| `MOUSEUP` | Ereignis | — | — | Dispatch | Forms-Referenz: LABEL-Ereignisse |
## LISTBOX
| Element | Art/Typ | Bereich | Vorgabe | Laufzeit | Quelle |
|---|---|---|---|---|---|
| `BACKCOLOR` | Eigenschaft / INTEGER | 0…15 | 7 | lesen/schreiben | Forms-Referenz: LISTBOX-Eigenschaften |
| `ENABLED` | Eigenschaft / INTEGER (Boolean) | — | True | lesen/schreiben | Forms-Referenz: LISTBOX-Eigenschaften |
| `HEIGHT` | Eigenschaft / INTEGER | 1…254 | 1 | lesen/schreiben | Forms-Referenz: LISTBOX-Eigenschaften |
| `LEFT` | Eigenschaft / INTEGER | 0…254 | 0 | lesen/schreiben | Forms-Referenz: LISTBOX-Eigenschaften |
| `MOUSEPOINTER` | Eigenschaft / INTEGER | 0…12 | 0 | lesen/schreiben | Forms-Referenz: LISTBOX-Eigenschaften |
| `PARENT` | Eigenschaft / CONTROL/FORM | — | leer/Objektzustand | read-only | Forms-Referenz: LISTBOX-Eigenschaften |
| `TAG` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: LISTBOX-Eigenschaften |
| `TOP` | Eigenschaft / INTEGER | 0…254 | 0 | lesen/schreiben | Forms-Referenz: LISTBOX-Eigenschaften |
| `VISIBLE` | Eigenschaft / INTEGER (Boolean) | — | True | lesen/schreiben | Forms-Referenz: LISTBOX-Eigenschaften |
| `WIDTH` | Eigenschaft / INTEGER | 1…254 | 1 | lesen/schreiben | Forms-Referenz: LISTBOX-Eigenschaften |
| `INDEX` | Eigenschaft / INTEGER | — | 0 | lesen/schreiben | Forms-Referenz: LISTBOX-Eigenschaften |
| `TABINDEX` | Eigenschaft / INTEGER | — | 0 | lesen/schreiben | Forms-Referenz: LISTBOX-Eigenschaften |
| `TABSTOP` | Eigenschaft / INTEGER (Boolean) | — | True | lesen/schreiben | Forms-Referenz: LISTBOX-Eigenschaften |
| `CTLNAME` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: LISTBOX-Eigenschaften |
| `FORECOLOR` | Eigenschaft / INTEGER | 0…15 | 0 | lesen/schreiben | Forms-Referenz: LISTBOX-Eigenschaften |
| `DRAGMODE` | Eigenschaft / INTEGER | 0…1 | 0 | lesen/schreiben | Forms-Referenz: LISTBOX-Eigenschaften |
| `LIST` | Eigenschaft / STRING | — | leer/Objektzustand | read-only | Forms-Referenz: LISTBOX-Eigenschaften |
| `LISTCOUNT` | Eigenschaft / INTEGER | — | leer/Objektzustand | read-only | Forms-Referenz: LISTBOX-Eigenschaften |
| `LISTINDEX` | Eigenschaft / INTEGER | — | -1 | lesen/schreiben | Forms-Referenz: LISTBOX-Eigenschaften |
| `SORTED` | Eigenschaft / INTEGER (Boolean) | — | False | lesen/schreiben | Forms-Referenz: LISTBOX-Eigenschaften |
| `TEXT` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: LISTBOX-Eigenschaften |
| `ADDITEM` | Methode | — | — | Aufruf | Forms-Referenz: LISTBOX-Methoden |
| `DRAG` | Methode | — | — | Aufruf | Forms-Referenz: LISTBOX-Methoden |
| `MOVE` | Methode | — | — | Aufruf | Forms-Referenz: LISTBOX-Methoden |
| `REFRESH` | Methode | — | — | Aufruf | Forms-Referenz: LISTBOX-Methoden |
| `REMOVEITEM` | Methode | — | — | Aufruf | Forms-Referenz: LISTBOX-Methoden |
| `SETFOCUS` | Methode | — | — | Aufruf | Forms-Referenz: LISTBOX-Methoden |
| `CLICK` | Ereignis | — | — | Dispatch | Forms-Referenz: LISTBOX-Ereignisse |
| `DBLCLICK` | Ereignis | — | — | Dispatch | Forms-Referenz: LISTBOX-Ereignisse |
| `DRAGDROP` | Ereignis | — | — | Dispatch | Forms-Referenz: LISTBOX-Ereignisse |
| `DRAGOVER` | Ereignis | — | — | Dispatch | Forms-Referenz: LISTBOX-Ereignisse |
| `GOTFOCUS` | Ereignis | — | — | Dispatch | Forms-Referenz: LISTBOX-Ereignisse |
| `KEYDOWN` | Ereignis | — | — | Dispatch | Forms-Referenz: LISTBOX-Ereignisse |
| `KEYPRESS` | Ereignis | — | — | Dispatch | Forms-Referenz: LISTBOX-Ereignisse |
| `KEYUP` | Ereignis | — | — | Dispatch | Forms-Referenz: LISTBOX-Ereignisse |
| `LOSTFOCUS` | Ereignis | — | — | Dispatch | Forms-Referenz: LISTBOX-Ereignisse |
| `MOUSEDOWN` | Ereignis | — | — | Dispatch | Forms-Referenz: LISTBOX-Ereignisse |
| `MOUSEMOVE` | Ereignis | — | — | Dispatch | Forms-Referenz: LISTBOX-Ereignisse |
| `MOUSEUP` | Ereignis | — | — | Dispatch | Forms-Referenz: LISTBOX-Ereignisse |
## MENU
| Element | Art/Typ | Bereich | Vorgabe | Laufzeit | Quelle |
|---|---|---|---|---|---|
| `CAPTION` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: MENU-Eigenschaften |
| `CHECKED` | Eigenschaft / INTEGER (Boolean) | — | False | lesen/schreiben | Forms-Referenz: MENU-Eigenschaften |
| `CTLNAME` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: MENU-Eigenschaften |
| `ENABLED` | Eigenschaft / INTEGER (Boolean) | — | True | lesen/schreiben | Forms-Referenz: MENU-Eigenschaften |
| `INDEX` | Eigenschaft / INTEGER | — | 0 | lesen/schreiben | Forms-Referenz: MENU-Eigenschaften |
| `PARENT` | Eigenschaft / CONTROL/FORM | — | leer/Objektzustand | read-only | Forms-Referenz: MENU-Eigenschaften |
| `SEPARATOR` | Eigenschaft / INTEGER (Boolean) | — | False | lesen/schreiben | Forms-Referenz: MENU-Eigenschaften |
| `TAG` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: MENU-Eigenschaften |
| `VISIBLE` | Eigenschaft / INTEGER (Boolean) | — | True | lesen/schreiben | Forms-Referenz: MENU-Eigenschaften |
| `CLICK` | Ereignis | — | — | Dispatch | Forms-Referenz: MENU-Ereignisse |
## OPTIONBUTTON
| Element | Art/Typ | Bereich | Vorgabe | Laufzeit | Quelle |
|---|---|---|---|---|---|
| `BACKCOLOR` | Eigenschaft / INTEGER | 0…15 | 7 | lesen/schreiben | Forms-Referenz: OPTIONBUTTON-Eigenschaften |
| `ENABLED` | Eigenschaft / INTEGER (Boolean) | — | True | lesen/schreiben | Forms-Referenz: OPTIONBUTTON-Eigenschaften |
| `HEIGHT` | Eigenschaft / INTEGER | 1…254 | 1 | lesen/schreiben | Forms-Referenz: OPTIONBUTTON-Eigenschaften |
| `LEFT` | Eigenschaft / INTEGER | 0…254 | 0 | lesen/schreiben | Forms-Referenz: OPTIONBUTTON-Eigenschaften |
| `MOUSEPOINTER` | Eigenschaft / INTEGER | 0…12 | 0 | lesen/schreiben | Forms-Referenz: OPTIONBUTTON-Eigenschaften |
| `PARENT` | Eigenschaft / CONTROL/FORM | — | leer/Objektzustand | read-only | Forms-Referenz: OPTIONBUTTON-Eigenschaften |
| `TAG` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: OPTIONBUTTON-Eigenschaften |
| `TOP` | Eigenschaft / INTEGER | 0…254 | 0 | lesen/schreiben | Forms-Referenz: OPTIONBUTTON-Eigenschaften |
| `VISIBLE` | Eigenschaft / INTEGER (Boolean) | — | True | lesen/schreiben | Forms-Referenz: OPTIONBUTTON-Eigenschaften |
| `WIDTH` | Eigenschaft / INTEGER | 1…254 | 1 | lesen/schreiben | Forms-Referenz: OPTIONBUTTON-Eigenschaften |
| `INDEX` | Eigenschaft / INTEGER | — | 0 | lesen/schreiben | Forms-Referenz: OPTIONBUTTON-Eigenschaften |
| `TABINDEX` | Eigenschaft / INTEGER | — | 0 | lesen/schreiben | Forms-Referenz: OPTIONBUTTON-Eigenschaften |
| `TABSTOP` | Eigenschaft / INTEGER (Boolean) | — | True | lesen/schreiben | Forms-Referenz: OPTIONBUTTON-Eigenschaften |
| `CTLNAME` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: OPTIONBUTTON-Eigenschaften |
| `FORECOLOR` | Eigenschaft / INTEGER | 0…15 | 0 | lesen/schreiben | Forms-Referenz: OPTIONBUTTON-Eigenschaften |
| `DRAGMODE` | Eigenschaft / INTEGER | 0…1 | 0 | lesen/schreiben | Forms-Referenz: OPTIONBUTTON-Eigenschaften |
| `CAPTION` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: OPTIONBUTTON-Eigenschaften |
| `VALUE` | Eigenschaft / INTEGER | -1…0 | 0 | lesen/schreiben | Forms-Referenz: OPTIONBUTTON-Eigenschaften |
| `DRAG` | Methode | — | — | Aufruf | Forms-Referenz: OPTIONBUTTON-Methoden |
| `MOVE` | Methode | — | — | Aufruf | Forms-Referenz: OPTIONBUTTON-Methoden |
| `REFRESH` | Methode | — | — | Aufruf | Forms-Referenz: OPTIONBUTTON-Methoden |
| `SETFOCUS` | Methode | — | — | Aufruf | Forms-Referenz: OPTIONBUTTON-Methoden |
| `CLICK` | Ereignis | — | — | Dispatch | Forms-Referenz: OPTIONBUTTON-Ereignisse |
| `DBLCLICK` | Ereignis | — | — | Dispatch | Forms-Referenz: OPTIONBUTTON-Ereignisse |
| `DRAGDROP` | Ereignis | — | — | Dispatch | Forms-Referenz: OPTIONBUTTON-Ereignisse |
| `DRAGOVER` | Ereignis | — | — | Dispatch | Forms-Referenz: OPTIONBUTTON-Ereignisse |
| `GOTFOCUS` | Ereignis | — | — | Dispatch | Forms-Referenz: OPTIONBUTTON-Ereignisse |
| `KEYDOWN` | Ereignis | — | — | Dispatch | Forms-Referenz: OPTIONBUTTON-Ereignisse |
| `KEYPRESS` | Ereignis | — | — | Dispatch | Forms-Referenz: OPTIONBUTTON-Ereignisse |
| `KEYUP` | Ereignis | — | — | Dispatch | Forms-Referenz: OPTIONBUTTON-Ereignisse |
| `LOSTFOCUS` | Ereignis | — | — | Dispatch | Forms-Referenz: OPTIONBUTTON-Ereignisse |
## PICTUREBOX
| Element | Art/Typ | Bereich | Vorgabe | Laufzeit | Quelle |
|---|---|---|---|---|---|
| `BACKCOLOR` | Eigenschaft / INTEGER | 0…15 | 7 | lesen/schreiben | Forms-Referenz: PICTUREBOX-Eigenschaften |
| `ENABLED` | Eigenschaft / INTEGER (Boolean) | — | True | lesen/schreiben | Forms-Referenz: PICTUREBOX-Eigenschaften |
| `HEIGHT` | Eigenschaft / INTEGER | 1…254 | 1 | lesen/schreiben | Forms-Referenz: PICTUREBOX-Eigenschaften |
| `LEFT` | Eigenschaft / INTEGER | 0…254 | 0 | lesen/schreiben | Forms-Referenz: PICTUREBOX-Eigenschaften |
| `MOUSEPOINTER` | Eigenschaft / INTEGER | 0…12 | 0 | lesen/schreiben | Forms-Referenz: PICTUREBOX-Eigenschaften |
| `PARENT` | Eigenschaft / CONTROL/FORM | — | leer/Objektzustand | read-only | Forms-Referenz: PICTUREBOX-Eigenschaften |
| `TAG` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: PICTUREBOX-Eigenschaften |
| `TOP` | Eigenschaft / INTEGER | 0…254 | 0 | lesen/schreiben | Forms-Referenz: PICTUREBOX-Eigenschaften |
| `VISIBLE` | Eigenschaft / INTEGER (Boolean) | — | True | lesen/schreiben | Forms-Referenz: PICTUREBOX-Eigenschaften |
| `WIDTH` | Eigenschaft / INTEGER | 1…254 | 1 | lesen/schreiben | Forms-Referenz: PICTUREBOX-Eigenschaften |
| `CTLNAME` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: PICTUREBOX-Eigenschaften |
| `FORECOLOR` | Eigenschaft / INTEGER | 0…15 | 0 | lesen/schreiben | Forms-Referenz: PICTUREBOX-Eigenschaften |
| `DRAGMODE` | Eigenschaft / INTEGER | 0…1 | 0 | lesen/schreiben | Forms-Referenz: PICTUREBOX-Eigenschaften |
| `AUTOREDRAW` | Eigenschaft / INTEGER (Boolean) | — | False | lesen/schreiben | Forms-Referenz: PICTUREBOX-Eigenschaften |
| `BORDERSTYLE` | Eigenschaft / INTEGER | 0…2 | 1 | lesen/schreiben | Forms-Referenz: PICTUREBOX-Eigenschaften |
| `CURRENTX` | Eigenschaft / INTEGER | — | 0 | lesen/schreiben | Forms-Referenz: PICTUREBOX-Eigenschaften |
| `CURRENTY` | Eigenschaft / INTEGER | — | 0 | lesen/schreiben | Forms-Referenz: PICTUREBOX-Eigenschaften |
| `SCALEHEIGHT` | Eigenschaft / INTEGER | — | leer/Objektzustand | read-only | Forms-Referenz: PICTUREBOX-Eigenschaften |
| `SCALEWIDTH` | Eigenschaft / INTEGER | — | leer/Objektzustand | read-only | Forms-Referenz: PICTUREBOX-Eigenschaften |
| `CLS` | Methode | — | — | Aufruf | Forms-Referenz: PICTUREBOX-Methoden |
| `DRAG` | Methode | — | — | Aufruf | Forms-Referenz: PICTUREBOX-Methoden |
| `MOVE` | Methode | — | — | Aufruf | Forms-Referenz: PICTUREBOX-Methoden |
| `PRINT` | Methode | — | — | Aufruf | Forms-Referenz: PICTUREBOX-Methoden |
| `REFRESH` | Methode | — | — | Aufruf | Forms-Referenz: PICTUREBOX-Methoden |
| `SETFOCUS` | Methode | — | — | Aufruf | Forms-Referenz: PICTUREBOX-Methoden |
| `TEXTHEIGHT` | Methode | — | — | Aufruf | Forms-Referenz: PICTUREBOX-Methoden |
| `TEXTWIDTH` | Methode | — | — | Aufruf | Forms-Referenz: PICTUREBOX-Methoden |
| `CLICK` | Ereignis | — | — | Dispatch | Forms-Referenz: PICTUREBOX-Ereignisse |
| `DBLCLICK` | Ereignis | — | — | Dispatch | Forms-Referenz: PICTUREBOX-Ereignisse |
| `DRAGDROP` | Ereignis | — | — | Dispatch | Forms-Referenz: PICTUREBOX-Ereignisse |
| `DRAGOVER` | Ereignis | — | — | Dispatch | Forms-Referenz: PICTUREBOX-Ereignisse |
| `GOTFOCUS` | Ereignis | — | — | Dispatch | Forms-Referenz: PICTUREBOX-Ereignisse |
| `KEYDOWN` | Ereignis | — | — | Dispatch | Forms-Referenz: PICTUREBOX-Ereignisse |
| `KEYPRESS` | Ereignis | — | — | Dispatch | Forms-Referenz: PICTUREBOX-Ereignisse |
| `KEYUP` | Ereignis | — | — | Dispatch | Forms-Referenz: PICTUREBOX-Ereignisse |
| `LOSTFOCUS` | Ereignis | — | — | Dispatch | Forms-Referenz: PICTUREBOX-Ereignisse |
| `MOUSEDOWN` | Ereignis | — | — | Dispatch | Forms-Referenz: PICTUREBOX-Ereignisse |
| `MOUSEMOVE` | Ereignis | — | — | Dispatch | Forms-Referenz: PICTUREBOX-Ereignisse |
| `MOUSEUP` | Ereignis | — | — | Dispatch | Forms-Referenz: PICTUREBOX-Ereignisse |
| `PAINT` | Ereignis | — | — | Dispatch | Forms-Referenz: PICTUREBOX-Ereignisse |
## TEXTBOX
| Element | Art/Typ | Bereich | Vorgabe | Laufzeit | Quelle |
|---|---|---|---|---|---|
| `BACKCOLOR` | Eigenschaft / INTEGER | 0…15 | 7 | lesen/schreiben | Forms-Referenz: TEXTBOX-Eigenschaften |
| `ENABLED` | Eigenschaft / INTEGER (Boolean) | — | True | lesen/schreiben | Forms-Referenz: TEXTBOX-Eigenschaften |
| `HEIGHT` | Eigenschaft / INTEGER | 1…254 | 1 | lesen/schreiben | Forms-Referenz: TEXTBOX-Eigenschaften |
| `LEFT` | Eigenschaft / INTEGER | 0…254 | 0 | lesen/schreiben | Forms-Referenz: TEXTBOX-Eigenschaften |
| `MOUSEPOINTER` | Eigenschaft / INTEGER | 0…12 | 0 | lesen/schreiben | Forms-Referenz: TEXTBOX-Eigenschaften |
| `PARENT` | Eigenschaft / CONTROL/FORM | — | leer/Objektzustand | read-only | Forms-Referenz: TEXTBOX-Eigenschaften |
| `TAG` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: TEXTBOX-Eigenschaften |
| `TOP` | Eigenschaft / INTEGER | 0…254 | 0 | lesen/schreiben | Forms-Referenz: TEXTBOX-Eigenschaften |
| `VISIBLE` | Eigenschaft / INTEGER (Boolean) | — | True | lesen/schreiben | Forms-Referenz: TEXTBOX-Eigenschaften |
| `WIDTH` | Eigenschaft / INTEGER | 1…254 | 1 | lesen/schreiben | Forms-Referenz: TEXTBOX-Eigenschaften |
| `INDEX` | Eigenschaft / INTEGER | — | 0 | lesen/schreiben | Forms-Referenz: TEXTBOX-Eigenschaften |
| `TABINDEX` | Eigenschaft / INTEGER | — | 0 | lesen/schreiben | Forms-Referenz: TEXTBOX-Eigenschaften |
| `TABSTOP` | Eigenschaft / INTEGER (Boolean) | — | True | lesen/schreiben | Forms-Referenz: TEXTBOX-Eigenschaften |
| `CTLNAME` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: TEXTBOX-Eigenschaften |
| `FORECOLOR` | Eigenschaft / INTEGER | 0…15 | 0 | lesen/schreiben | Forms-Referenz: TEXTBOX-Eigenschaften |
| `DRAGMODE` | Eigenschaft / INTEGER | 0…1 | 0 | lesen/schreiben | Forms-Referenz: TEXTBOX-Eigenschaften |
| `BORDERSTYLE` | Eigenschaft / INTEGER | 0…1 | 1 | lesen/schreiben | Forms-Referenz: TEXTBOX-Eigenschaften |
| `MULTILINE` | Eigenschaft / INTEGER (Boolean) | — | False | lesen/schreiben | Forms-Referenz: TEXTBOX-Eigenschaften |
| `SCROLLBARS` | Eigenschaft / INTEGER | 0…3 | 0 | lesen/schreiben | Forms-Referenz: TEXTBOX-Eigenschaften |
| `SELLENGTH` | Eigenschaft / INTEGER | — | 0 | lesen/schreiben | Forms-Referenz: TEXTBOX-Eigenschaften |
| `SELSTART` | Eigenschaft / INTEGER | — | 0 | lesen/schreiben | Forms-Referenz: TEXTBOX-Eigenschaften |
| `SELTEXT` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: TEXTBOX-Eigenschaften |
| `TEXT` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: TEXTBOX-Eigenschaften |
| `DRAG` | Methode | — | — | Aufruf | Forms-Referenz: TEXTBOX-Methoden |
| `MOVE` | Methode | — | — | Aufruf | Forms-Referenz: TEXTBOX-Methoden |
| `REFRESH` | Methode | — | — | Aufruf | Forms-Referenz: TEXTBOX-Methoden |
| `SETFOCUS` | Methode | — | — | Aufruf | Forms-Referenz: TEXTBOX-Methoden |
| `CHANGE` | Ereignis | — | — | Dispatch | Forms-Referenz: TEXTBOX-Ereignisse |
| `DRAGDROP` | Ereignis | — | — | Dispatch | Forms-Referenz: TEXTBOX-Ereignisse |
| `DRAGOVER` | Ereignis | — | — | Dispatch | Forms-Referenz: TEXTBOX-Ereignisse |
| `GOTFOCUS` | Ereignis | — | — | Dispatch | Forms-Referenz: TEXTBOX-Ereignisse |
| `KEYDOWN` | Ereignis | — | — | Dispatch | Forms-Referenz: TEXTBOX-Ereignisse |
| `KEYPRESS` | Ereignis | — | — | Dispatch | Forms-Referenz: TEXTBOX-Ereignisse |
| `KEYUP` | Ereignis | — | — | Dispatch | Forms-Referenz: TEXTBOX-Ereignisse |
| `LOSTFOCUS` | Ereignis | — | — | Dispatch | Forms-Referenz: TEXTBOX-Ereignisse |
## TIMER
| Element | Art/Typ | Bereich | Vorgabe | Laufzeit | Quelle |
|---|---|---|---|---|---|
| `CTLNAME` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: TIMER-Eigenschaften |
| `ENABLED` | Eigenschaft / INTEGER (Boolean) | — | True | lesen/schreiben | Forms-Referenz: TIMER-Eigenschaften |
| `INDEX` | Eigenschaft / INTEGER | — | 0 | lesen/schreiben | Forms-Referenz: TIMER-Eigenschaften |
| `INTERVAL` | Eigenschaft / INTEGER | 0…65535 | 0 | lesen/schreiben | Forms-Referenz: TIMER-Eigenschaften |
| `PARENT` | Eigenschaft / CONTROL/FORM | — | leer/Objektzustand | read-only | Forms-Referenz: TIMER-Eigenschaften |
| `TAG` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: TIMER-Eigenschaften |
| `TIMER` | Ereignis | — | — | Dispatch | Forms-Referenz: TIMER-Ereignisse |
## VSCROLLBAR
| Element | Art/Typ | Bereich | Vorgabe | Laufzeit | Quelle |
|---|---|---|---|---|---|
| `BACKCOLOR` | Eigenschaft / INTEGER | 0…15 | 7 | lesen/schreiben | Forms-Referenz: VSCROLLBAR-Eigenschaften |
| `ENABLED` | Eigenschaft / INTEGER (Boolean) | — | True | lesen/schreiben | Forms-Referenz: VSCROLLBAR-Eigenschaften |
| `HEIGHT` | Eigenschaft / INTEGER | 1…254 | 1 | lesen/schreiben | Forms-Referenz: VSCROLLBAR-Eigenschaften |
| `LEFT` | Eigenschaft / INTEGER | 0…254 | 0 | lesen/schreiben | Forms-Referenz: VSCROLLBAR-Eigenschaften |
| `MOUSEPOINTER` | Eigenschaft / INTEGER | 0…12 | 0 | lesen/schreiben | Forms-Referenz: VSCROLLBAR-Eigenschaften |
| `PARENT` | Eigenschaft / CONTROL/FORM | — | leer/Objektzustand | read-only | Forms-Referenz: VSCROLLBAR-Eigenschaften |
| `TAG` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: VSCROLLBAR-Eigenschaften |
| `TOP` | Eigenschaft / INTEGER | 0…254 | 0 | lesen/schreiben | Forms-Referenz: VSCROLLBAR-Eigenschaften |
| `VISIBLE` | Eigenschaft / INTEGER (Boolean) | — | True | lesen/schreiben | Forms-Referenz: VSCROLLBAR-Eigenschaften |
| `WIDTH` | Eigenschaft / INTEGER | 1…254 | 1 | lesen/schreiben | Forms-Referenz: VSCROLLBAR-Eigenschaften |
| `INDEX` | Eigenschaft / INTEGER | — | 0 | lesen/schreiben | Forms-Referenz: VSCROLLBAR-Eigenschaften |
| `TABINDEX` | Eigenschaft / INTEGER | — | 0 | lesen/schreiben | Forms-Referenz: VSCROLLBAR-Eigenschaften |
| `TABSTOP` | Eigenschaft / INTEGER (Boolean) | — | True | lesen/schreiben | Forms-Referenz: VSCROLLBAR-Eigenschaften |
| `CTLNAME` | Eigenschaft / STRING | — | `` | lesen/schreiben | Forms-Referenz: VSCROLLBAR-Eigenschaften |
| `FORECOLOR` | Eigenschaft / INTEGER | 0…15 | 0 | lesen/schreiben | Forms-Referenz: VSCROLLBAR-Eigenschaften |
| `DRAGMODE` | Eigenschaft / INTEGER | 0…1 | 0 | lesen/schreiben | Forms-Referenz: VSCROLLBAR-Eigenschaften |
| `ATTACHED` | Eigenschaft / INTEGER (Boolean) | — | leer/Objektzustand | read-only | Forms-Referenz: VSCROLLBAR-Eigenschaften |
| `LARGECHANGE` | Eigenschaft / INTEGER | 1…32767 | 1 | lesen/schreiben | Forms-Referenz: VSCROLLBAR-Eigenschaften |
| `MIN` | Eigenschaft / INTEGER | -32768…32767 | 0 | lesen/schreiben | Forms-Referenz: VSCROLLBAR-Eigenschaften |
| `MAX` | Eigenschaft / INTEGER | -32768…32767 | 32767 | lesen/schreiben | Forms-Referenz: VSCROLLBAR-Eigenschaften |
| `SMALLCHANGE` | Eigenschaft / INTEGER | 1…32767 | 1 | lesen/schreiben | Forms-Referenz: VSCROLLBAR-Eigenschaften |
| `VALUE` | Eigenschaft / INTEGER | -32768…32767 | 0 | lesen/schreiben | Forms-Referenz: VSCROLLBAR-Eigenschaften |
| `DRAG` | Methode | — | — | Aufruf | Forms-Referenz: VSCROLLBAR-Methoden |
| `MOVE` | Methode | — | — | Aufruf | Forms-Referenz: VSCROLLBAR-Methoden |
| `REFRESH` | Methode | — | — | Aufruf | Forms-Referenz: VSCROLLBAR-Methoden |
| `CHANGE` | Ereignis | — | — | Dispatch | Forms-Referenz: VSCROLLBAR-Ereignisse |
| `DRAGDROP` | Ereignis | — | — | Dispatch | Forms-Referenz: VSCROLLBAR-Ereignisse |
| `DRAGOVER` | Ereignis | — | — | Dispatch | Forms-Referenz: VSCROLLBAR-Ereignisse |
| `GOTFOCUS` | Ereignis | — | — | Dispatch | Forms-Referenz: VSCROLLBAR-Ereignisse |
| `KEYDOWN` | Ereignis | — | — | Dispatch | Forms-Referenz: VSCROLLBAR-Ereignisse |
| `KEYPRESS` | Ereignis | — | — | Dispatch | Forms-Referenz: VSCROLLBAR-Ereignisse |
| `KEYUP` | Ereignis | — | — | Dispatch | Forms-Referenz: VSCROLLBAR-Ereignisse |
| `LOSTFOCUS` | Ereignis | — | — | Dispatch | Forms-Referenz: VSCROLLBAR-Ereignisse |
## SCREEN
| Element | Art/Typ | Bereich | Vorgabe | Laufzeit | Quelle |
|---|---|---|---|---|---|
| `ACTIVECONTROL` | Eigenschaft / CONTROL/FORM | — | leer/Objektzustand | read-only | Forms-Referenz: SCREEN-Eigenschaften |
| `ACTIVEFORM` | Eigenschaft / CONTROL/FORM | — | leer/Objektzustand | read-only | Forms-Referenz: SCREEN-Eigenschaften |
| `AUTOREDRAW` | Eigenschaft / INTEGER (Boolean) | — | False | lesen/schreiben | Forms-Referenz: SCREEN-Eigenschaften |
| `CONTROLPANEL` | Eigenschaft / INTEGER-Array | 0…15 | 0 | lesen/schreiben | Forms-Referenz: SCREEN-Eigenschaften |
| `HEIGHT` | Eigenschaft / INTEGER | — | leer/Objektzustand | read-only | Forms-Referenz: SCREEN-Eigenschaften |
| `WIDTH` | Eigenschaft / INTEGER | — | leer/Objektzustand | read-only | Forms-Referenz: SCREEN-Eigenschaften |
| `MOUSEPOINTER` | Eigenschaft / INTEGER | 0…12 | 0 | lesen/schreiben | Forms-Referenz: SCREEN-Eigenschaften |
| `HIDE` | Methode | — | — | Aufruf | Forms-Referenz: SCREEN-Methoden |
| `SHOW` | Methode | — | — | Aufruf | Forms-Referenz: SCREEN-Methoden |

View File

@@ -0,0 +1,106 @@
# 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-Operator
`form!steuerelement.eigenschaft` mit einer Auflösung der Kollision zum
SINGLE-Suffix, die Datentypen `FORM` und `CONTROL` als Parametertypen,
`IF TYPEOF ctl IS klasse`, der Metabefehl `$FORM` und die
Ereignisprozeduren `SUB 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`/`UNLOAD` mit `Form_Load`/`Form_Unload` und
wirksamem `Cancel`), `SHOW [style%]` modeless und modal, `HIDE`,
Sichtbarkeit und Z-Reihenfolge.
- **Modalität**: `form.SHOW 1` gibt 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
400403 aus.
- **Ereignisdispatch**: Ein Ereignis der Warteschlange findet die
Prozedur `Name_Ereignis` des 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`, `$FORM` und
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 Platzhalter `forms.rs` wird ausgefüllt.
- `crates/tb-vm`: Aufruf von Ereignisprozeduren über den Rückrufweg aus
`phase-4-ereignisschleife`; Fortsetzungspunkt für modales `SHOW`.
- `crates/tb-runtime`: Fehler 362 und 400403 als Auslöser.
- `docs/`: `inventar.md` um das Objektmodell erweitert;
`forms-referenz.md` um die belegten Detailfragen ergänzt;
`sprachreferenz.md` §12 ausformuliert.
- PLAN.md: Punkte „Formular-Modell" und „Ereignisdispatch" der Phase 4.

View File

@@ -0,0 +1,136 @@
## Purpose
Das Forms-Objektmodell macht Formulare und Steuerelemente zu benannten
Objekten des laufenden Programms: Eigenschaften lesen und schreiben,
Formulare laden, zeigen, verbergen und entladen — modal wie nicht-modal —,
Steuerelement-Arrays führen und Ereignisse an die Prozeduren
`Name_Ereignis` zustellen. Es ist die Grundlage der Steuerelemente und der
vordefinierten Dialoge.
## ADDED Requirements
### Requirement: Formulare und Steuerelemente als benannte Objekte
Ein Formular SHALL unter seinem Namen ansprechbar sein, ein
Steuerelement unter seinem Namen innerhalb seines Formulars. Eigenschaften
SHALL über `objekt.eigenschaft` gelesen und geschrieben werden, mit dem
in der Forms-Referenz festgelegten Typ und Wertebereich. Es SHALL keine
Standardeigenschaft geben: `Text1 = "x"` MUST abgewiesen werden. Das
Schreiben eines Wertes außerhalb des Wertebereichs MUST Laufzeitfehler 5
auslösen; eine zur Laufzeit schreibgeschützte Eigenschaft MUST bei
Zuweisung einen Fehler auslösen.
#### Scenario: Eigenschaft lesen und schreiben
- **WHEN** `Text1.Text = "hallo"` ausgeführt und danach `Text1.Text` gelesen wird
- **THEN** liefert der Zugriff `hallo`
#### Scenario: Keine Standardeigenschaft
- **WHEN** ein Programm `Text1 = "x"` enthält
- **THEN** wird es abgewiesen und die Meldung nennt `Text1`
#### Scenario: Wert außerhalb des Bereichs
- **WHEN** `Check1.Value = 3` ausgeführt wird
- **THEN** tritt Laufzeitfehler 5 auf
### Requirement: Container-Zugriff über den Bang-Operator
`form!steuerelement.eigenschaft` SHALL ein Steuerelement eines benannten
Formulars ansprechen. Die Schreibweise MUST NOT mit dem Typsuffix `!`
für SINGLE verwechselt werden; eine Variable `Form1!` und ein Zugriff
`Form1!Text1` MUST unterscheidbar bleiben.
#### Scenario: Zugriff über den Container
- **WHEN** `Form1!Text1.Text = "a"` ausgeführt wird
- **THEN** trägt die Eigenschaft `Text` des Steuerelements `Text1` in `Form1` den Wert `a`
#### Scenario: Typsuffix bleibt Typsuffix
- **WHEN** ein Programm die Variable `Wert!` verwendet
- **THEN** bleibt sie eine SINGLE-Variable und wird nicht als Containerzugriff gelesen
### Requirement: Lade- und Entladezyklus
`LOAD form` SHALL das Formular anlegen und `Form_Load` ausführen, bevor
es sichtbar wird. `UNLOAD form` SHALL `Form_Unload (Cancel)` ausführen;
ein von der Prozedur gesetzter Wert `Cancel <> 0` MUST das Entladen
verhindern. `HIDE` SHALL nur die Sichtbarkeit zurücknehmen und das
Formular geladen lassen. Der Zugriff auf ein nicht geladenes Formular
SHALL es implizit laden.
#### Scenario: Load läuft vor der Anzeige
- **WHEN** ein Formular gezeigt wird, dessen `Form_Load` eine Eigenschaft setzt
- **THEN** ist der gesetzte Wert bereits in der ersten Anzeige sichtbar
#### Scenario: Entladen abbrechen
- **WHEN** `Form_Unload` den Parameter `Cancel` auf 1 setzt und `UNLOAD Form1` ausgeführt wird
- **THEN** bleibt das Formular geladen und sichtbar
#### Scenario: HIDE entlädt nicht
- **WHEN** `Form1.HIDE` ausgeführt und danach eine Eigenschaft von `Form1` gelesen wird
- **THEN** ist der zuvor gesetzte Wert erhalten und `Form_Load` läuft nicht erneut
### Requirement: Modales und nicht-modales Anzeigen
`form.SHOW [style%]` SHALL das Formular anzeigen; `style%` 0 (Vorgabe)
zeigt es nicht-modal, 1 modal. Bei modaler Anzeige MUST die Anweisung
nach `SHOW` erst ausgeführt werden, wenn das Formular entladen oder
verborgen wurde; die Ereignisschleife MUST währenddessen weiterlaufen.
Verstöße gegen die Stapelregeln des Vorbilds MUST die Fehler 400403
auslösen.
#### Scenario: Modal hält den Ablauf an
- **WHEN** ein Programm `Form1.SHOW 1 : PRINT "danach"` ausführt und ein Ereignis `Form1` entlädt
- **THEN** erscheint `danach` erst nach dem Entladen
#### Scenario: Ereignisse laufen während der Modalität
- **WHEN** ein modales Formular angezeigt wird und ein Ereignis eintrifft
- **THEN** läuft die zugehörige Ereignisprozedur
### Requirement: Steuerelement-Arrays
Steuerelemente mit gleichem Namen und `Index` SHALL als Array
ansprechbar sein. `LOAD ctl(index%)` SHALL ein weiteres Element zur
Laufzeit anlegen, `UNLOAD ctl(index%)` es entfernen. Der Versuch, ein zur
Entwurfszeit angelegtes Element zu entladen, MUST Fehler 362 auslösen.
Bei einem Array MUST `Index AS INTEGER` als erster Parameter der
Ereignisprozedur übergeben werden.
#### Scenario: Element zur Laufzeit anlegen
- **WHEN** `LOAD Command1(3)` ausgeführt wird
- **THEN** existiert `Command1(3)` mit den Eigenschaften des Elements 0 als Vorlage
#### Scenario: Entwurfszeit-Element ist nicht entladbar
- **WHEN** `UNLOAD Command1(0)` für ein zur Entwurfszeit angelegtes Element ausgeführt wird
- **THEN** tritt Fehler 362 auf
#### Scenario: Index als erster Parameter
- **WHEN** ein Klick auf `Command1(3)` zugestellt wird
- **THEN** wird `Command1_Click` mit `Index = 3` aufgerufen
### Requirement: Ereignisdispatch an Name_Ereignis
Ein Ereignis SHALL die Prozedur `Name_Ereignis` des betroffenen Objekts
aufrufen und ihr die Argumente der in der Forms-Referenz festgelegten
Signatur übergeben. Fehlt die Prozedur, MUST das Ereignis wirkungslos
verfallen, ohne Fehler. Die Zustellung SHALL an den Zustellpunkten der
Ereignissteuerung erfolgen; es MUST NOT neue Zustellpunkte geben.
#### Scenario: Ereignisprozedur wird gerufen
- **WHEN** ein Klick auf `Command1` zugestellt wird und `SUB Command1_Click` existiert
- **THEN** läuft die Prozedur genau einmal
#### Scenario: Fehlende Ereignisprozedur
- **WHEN** ein Klick auf ein Steuerelement ohne passende Prozedur zugestellt wird
- **THEN** läuft das Programm unverändert weiter und es entsteht kein Fehler
#### Scenario: Signatur mit Mausargumenten
- **WHEN** `Form_MouseDown` definiert ist und ein Mausereignis in Zeile 5, Spalte 7 zugestellt wird
- **THEN** erhält die Prozedur Taste, Umschaltzustand und die Position in Zellen
### Requirement: SCREEN-Objekt
`SCREEN` SHALL als Objekt ansprechbar sein mit `ActiveControl`,
`ActiveForm`, `Height`, `Width`, `MousePointer` und `ControlPanel` sowie
den Methoden `SHOW` und `HIDE`. `Height` und `Width` SHALL die
**aktuelle** Terminalgröße in Zeichen liefern und schreibgeschützt sein;
die feste Größe des Vorbilds MUST als Abweichung dokumentiert sein.
#### Scenario: Größe folgt dem Terminal
- **WHEN** die Darstellungsfläche 120×40 misst und `SCREEN.Width` gelesen wird
- **THEN** liefert es 120
#### Scenario: Aktives Formular
- **WHEN** zwei Formulare geladen sind und eines den Fokus hat
- **THEN** liefert `SCREEN.ActiveForm` dieses Formular

View File

@@ -0,0 +1,53 @@
## ADDED Requirements
### Requirement: Objektzugriffe in Grammatik und Semantik
Der Parser SHALL Punktpfade auf Formulare und Steuerelemente
(`objekt.eigenschaft`), den Container-Operator
`form!steuerelement[.eigenschaft]`, `IF TYPEOF ausdruck IS klasse`, den
Metabefehl `$FORM` und die Datentypen `FORM` und `CONTROL` als
Parametertypen erkennen. Die Semantik SHALL Eigenschaften gegen die
Klasse des Objekts prüfen und ihren Typ bestimmen. Ein Punktpfad, dessen
Basis weder ein benutzerdefinierter Typ noch ein bekanntes Objekt ist,
MUST eine Diagnose erzeugen, die Basis und Eigenschaft namentlich nennt;
er MUST NOT zu einer impliziten Variablen mit Punkt im Namen werden.
#### Scenario: Unbekanntes Objekt wird benannt
- **WHEN** ein Modul `Text9.Text = "a"` ohne Steuerelement `Text9` enthält
- **THEN** nennt die Diagnose `Text9` als unbekanntes Objekt statt „Type mismatch" zu melden
#### Scenario: Unbekannte Eigenschaft wird benannt
- **WHEN** ein Modul `Text1.Farbe = 3` enthält
- **THEN** nennt die Diagnose `Farbe` als unbekannte Eigenschaft von `TextBox`
#### Scenario: Eigenschaftstyp wird geprüft
- **WHEN** ein Modul `Text1.Text = 5` enthält
- **THEN** meldet die Semantik einen Typkonflikt mit Nennung der Eigenschaft
#### Scenario: TYPEOF
- **WHEN** ein Modul `IF TYPEOF Ziel IS CommandButton THEN` enthält
- **THEN** wird es übersetzt und die Klasse gegen die bekannten Steuerelementklassen geprüft
### Requirement: Bang-Operator neben dem SINGLE-Suffix
Der Lexer SHALL `!` als Container-Operator erkennen, wenn ihm ein
Bezeichner folgt, und andernfalls als Typsuffix für SINGLE. Beide Formen
MUST im selben Modul nebeneinander verwendbar sein.
#### Scenario: Beide Bedeutungen im selben Modul
- **WHEN** ein Modul `Wert! = 1.5` und `Form1!Text1.Text = "a"` enthält
- **THEN** wird die erste Zeile als SINGLE-Variable und die zweite als Containerzugriff übersetzt
### Requirement: Ereignisprozeduren mit festen Signaturen
Die Semantik SHALL eine `SUB`, deren Name der Form `Objekt_Ereignis`
entspricht und deren Objekt bekannt ist, als Ereignisprozedur erkennen
und ihre Parameterliste gegen die Signatur der Forms-Referenz prüfen.
Eine abweichende Parameterliste MUST namentlich gemeldet werden. Eine
`SUB` mit Unterstrich im Namen ohne bekanntes Objekt MUST weiterhin eine
gewöhnliche Prozedur sein.
#### Scenario: Falsche Signatur
- **WHEN** ein Modul `SUB Form_MouseDown (X AS SINGLE)` enthält
- **THEN** nennt die Diagnose die erwartete Parameterliste der Ereignisprozedur
#### Scenario: Gewöhnliche SUB mit Unterstrich
- **WHEN** ein Modul `SUB Zins_Berechnen (n AS INTEGER)` ohne Objekt `Zins` enthält
- **THEN** wird sie als gewöhnliche Prozedur übersetzt

View File

@@ -0,0 +1,29 @@
## MODIFIED Requirements
### Requirement: Vollständiges Inventar der Original-Hilfe
`docs/inventar.md` SHALL jede in der Original-Hilfe des Vorbilds
dokumentierte Anweisung, Funktion, Metabefehl, Operator-Schlüsselwort und
Klausel als eigenen Eintrag führen. Darüber hinaus SHALL es das
**Forms-Objektmodell** führen: je Klasse ihre Eigenschaften, Methoden und
Ereignisse als eigene Einträge. Ein dokumentiertes Element MUST NOT
fehlen; Vollständigkeit gegenüber der Quelle geht der Kürze vor. Jeder
Eintrag SHALL Name, Art (Anweisung/Funktion/Metabefehl/Eigenschaft/
Methode/Ereignis), Themengruppe, Status, Fundstelle und Quelle tragen.
Für Einträge des Objektmodells SHALL die Quelle die Forms-Referenz sein,
weil die Themenliste der Original-Hilfe sie nicht führt.
#### Scenario: Dokumentiertes Element ist erfasst
- **WHEN** die Original-Hilfe die Anweisung `VIEW PRINT` dokumentiert
- **THEN** enthält das Inventar einen Eintrag `VIEW PRINT` mit Art, Gruppe, Status und Fundstelle
#### Scenario: Non-Feature ist erfasst, nicht weggelassen
- **WHEN** `PEEK` als Non-Feature deklariert ist
- **THEN** steht `PEEK` mit Status `Non-Feature` im Inventar und die Fundstelle verweist auf den Abschnitt „Abweichungen" der Sprachreferenz
#### Scenario: Eigenschaft einer Steuerelementklasse ist erfasst
- **WHEN** die Forms-Referenz für `TextBox` die Eigenschaft `SelStart` führt
- **THEN** enthält das Inventar einen Eintrag für `TextBox.SelStart` mit Art `Eigenschaft`, Status und Quelle Forms-Referenz
#### Scenario: Ereignis einer Klasse ist erfasst
- **WHEN** die Forms-Referenz für `Form` das Ereignis `Resize` führt
- **THEN** enthält das Inventar einen Eintrag für `Form_Resize` mit Art `Ereignis`

View File

@@ -0,0 +1,42 @@
## 1. Belege
- [x] 1.1 Eigenschaften, Methoden und Ereignisse je Klasse aus Original-Hilfe, `CONSTANT.BI` und den Beispielprojekten in `klassen-und-eigenschaften.md` dieses Changes zusammenstellen (Typ, Wertebereich, Vorgabewert, Schreibbarkeit zur Laufzeit); verifiziert durch die Datei mit Quellenangabe je Zeile
- [x] 1.2 Signaturen der Ereignisprozeduren und die Regeln für Steuerelement-Arrays belegen; verifiziert durch einen Abschnitt in derselben Datei, der jede Signatur der Forms-Referenz gegenüberstellt
## 2. Frontend: Objektsprache
- [x] 2.1 `!` am folgenden Token entscheiden (D3); verifiziert durch Lexer-Tests für beide Bedeutungen im selben Modul
- [x] 2.2 Punktpfade in der Semantik nach D2 auflösen, mit Diagnose statt impliziter Variablen; verifiziert durch Sema-Tests für unbekanntes Objekt, unbekannte Eigenschaft und unveränderten UDT-Feldzugriff
- [x] 2.3 Eigenschaftstabelle je Klasse aus 1.1 im Frontend führen und Typ/Schreibbarkeit prüfen; verifiziert durch Sema-Tests für Typkonflikt und schreibgeschützte Eigenschaft
- [x] 2.4 `IF TYPEOF … IS klasse`, Datentypen `FORM`/`CONTROL` als Parametertypen, Metabefehl `$FORM`; verifiziert durch Parser- und Sema-Tests je Konstrukt
- [x] 2.5 Ereignisprozeduren erkennen und ihre Parameterlisten prüfen; verifiziert durch Sema-Tests für richtige Signatur, falsche Signatur und gewöhnliche `SUB` mit Unterstrich
- [x] 2.6 Absenkung ins HIR: Objektzugriff als Objekt-/Eigenschaftsindex, Ereignisprozeduren mit ihrer Zuordnung; verifiziert durch `cargo test -p tb-frontend`
## 3. Laufzeit: Formularmodell
- [x] 3.1 Formular- und Steuerelementobjekte mit Eigenschaftsspeicher und Vorgabewerten aus 1.1; verifiziert durch Unit-Tests für Vorgabewerte und Wertebereichsprüfung (Fehler 5)
- [x] 3.2 Lade-/Entladezyklus mit `Form_Load` und `Form_Unload (Cancel)`; verifiziert durch Unit-Tests, darunter das verhinderte Entladen
- [x] 3.3 `SHOW`/`HIDE`, Sichtbarkeit, implizites Laden beim Zugriff; verifiziert durch Unit-Tests für „HIDE entlädt nicht" und implizites Laden
- [x] 3.4 Steuerelement-Arrays: `LOAD ctl(i)`, `UNLOAD ctl(i)`, Fehler 362 für Entwurfszeit-Elemente; verifiziert durch Unit-Tests je Fall
- [x] 3.5 `SCREEN`-Objekt mit `ActiveForm`, `ActiveControl`, `Height`/`Width` aus der aktuellen Terminalgröße; verifiziert durch Unit-Tests, darunter einer nach Größenänderung
## 4. Modalität und Dispatch
- [x] 4.1 Modales `SHOW` als Frame-Marke (D4) mit Fortsetzung nach dem Entladen; verifiziert durch einen VM-Test, der die Anweisung nach `SHOW 1` erst nach dem Entladen ausführt
- [x] 4.2 Stapelregeln der Modalität mit den Fehlern 400403; verifiziert durch Unit-Tests je Fehlercode
- [x] 4.3 Ereignisdispatch: Ereignis der Warteschlange auf `Name_Ereignis` abbilden und mit Argumenten aufrufen (D5); verifiziert durch VM-Tests für vorhandene und fehlende Prozedur
- [x] 4.4 Mausereignisse aus `phase-4-ereignisschleife` an die Formularereignisse übergeben (Taste, Umschaltzustand, Position in Zellen); verifiziert durch einen Test, der `Form_MouseDown` mit den erwarteten Argumenten sieht
- [x] 4.5 Nachweis, dass keine neuen Zustellpunkte entstehen; verifiziert durch einen Test, der die Zustellpunkte der Ereignissteuerung gegenprüft
## 5. Inventar und Dokumentation
- [x] 5.1 `docs/inventar.md` um Art `Eigenschaft`/`Methode`/`Ereignis` und die Spalte Quelle erweitern, Einträge aus 1.1 eintragen (Status zunächst `offen`); verifiziert durch `inventar_stimmt_mit_code_ueberein`
- [x] 5.2 Abgleichstest auf die neuen Arten ausdehnen; verifiziert durch einen Testfall, der eine falsch gesetzte Eigenschaft im Inventar erkennt
- [x] 5.3 Einträge dieses Changes auf `implementiert` setzen; verifiziert durch denselben Test
- [x] 5.4 `docs/sprachreferenz.md` §12 ausformulieren und `docs/forms-referenz.md` um die Belege aus 1.1 ergänzen; verifiziert durch die Abschnitte
- [x] 5.5 PLAN.md: Punkte „Formular-Modell" und „Ereignisdispatch" abhaken; verifiziert durch die aktualisierte Liste
## 6. Abnahme
- [x] 6.1 Der Dreizeiler aus proposal.md wird namentlich abgewiesen statt falsch übersetzt; verifiziert durch einen Test, der die drei Diagnosen prüft
- [x] 6.2 `cargo test` grün und `openspec validate phase-4-objektmodell --strict` ohne Befund; verifiziert durch beide Kommandos