Phase 0.1: Referenzen gegen Original-Dokumentation verifiziert
Drei parallele Recherchen ueber die Original-Hilfedateien des Vorbilds (dos-help.soulsphere.org, dekodierte VBDOS.HLP, CONSTANT.BI, README der Professional Edition) eingearbeitet: - Sprachreferenz: OPTION EXPLICIT und ON [LOCAL] ERROR RESUME NEXT existieren; Zeilenfortsetzung mit Underscore; Literalregeln; Limits (40-Zeichen-Bezeichner, 60 Array-Dimensionen); Event-Traps inkl. UEVENT; PRINT-USING-Zeichen inkl. **$; native Datumsfunktionen (NOW, DATESERIAL, ...) und FORMAT$; MSGBOX/INPUTBOX$-Signaturen - Forms-Referenz komplett neu: alle 16 Steuerelemente mit Eigenschaften/ Methoden/Ereignissen, Default-Tabelle, SCREEN-Objekt inkl. ControlPanel, Koordinaten in Zellen (0-254), Modalitaet (SHOW 0/1), Menuesystem, Control-Arrays, Drag&Drop; keine Default-Eigenschaften - Neue IDE-Referenz (docs/ide-referenz.md): Menuestruktur, Fenster- verwaltung, Form Designer, Farbschema, Tastenbelegung, Statuszeile - Fehlerkatalog vervollstaendigt: ISAM 80-89 und Forms 260-480, Code-Typ auf u16 erweitert, Tests ergaenzt - Dateiformate: .MAK-Format belegt, .FRM binaer/Text geklaert Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,85 +1,181 @@
|
||||
# Forms-Referenz Terminal Basic
|
||||
|
||||
Rekonstruierte Referenz der Forms-Engine des Vorbilds (textbasierte,
|
||||
ereignisgesteuerte Oberflächen). Grundlage für `tb-ui::forms` und den
|
||||
Formular-Designer der IDE. Unklare Punkte sind mit `TODO` markiert.
|
||||
Rekonstruierte Referenz der Forms-Engine des Vorbilds (VBDOS 1.0) —
|
||||
Grundlage für `tb-ui::forms` und den Formular-Designer. Primärquellen:
|
||||
Original-Hilfedatei (dekodiert), `CONSTANT.BI`, Stringtabellen der
|
||||
Original-Programme, Beispielprojekte. Aussagen ohne TODO sind daraus belegt.
|
||||
|
||||
## Koordinatenmodell
|
||||
|
||||
Alle Maße in **Textzellen** (Zeilen/Spalten), Ursprung links oben.
|
||||
Formulare liegen auf dem 80×25-Bildschirm; Steuerelemente relativ zum
|
||||
Formular-Innenbereich. Eigenschaften `Top`, `Left`, `Height`, `Width`.
|
||||
Einheit ist durchgängig die **Textzelle** (Spalte/Zeile), keine Twips.
|
||||
`Left`/`Top` relativ zum Container, gültiger Bereich 0–254; `Height`/`Width`
|
||||
für Controls 1–254, für Formulare bis Bildschirmgröße. `ScaleHeight`/
|
||||
`ScaleWidth` (nur Form/PictureBox, read-only) = Innenmaß ohne Rahmen/Menü.
|
||||
Maus-Koordinaten in Ereignissen sind SINGLE, aber in Zellen.
|
||||
|
||||
## Steuerelemente (Übersicht)
|
||||
## Steuerelemente (exakte Klassennamen)
|
||||
|
||||
| Steuerelement | Zweck | Schlüssel-Ereignisse |
|
||||
`CheckBox, ComboBox, CommandButton, DirListBox, DriveListBox, FileListBox,
|
||||
Frame, HScrollBar, Label, ListBox, Menu, OptionButton, PictureBox, TextBox,
|
||||
Timer, VScrollBar` — alle außer `Menu` über die Toolbox platzierbar
|
||||
(Menüs entstehen im Menu Design Window). Default-Namen: `Check1`, `Combo1`,
|
||||
`Command1`, `Dir1`, `Drive1`, `File1`, `Frame1`, `HScroll1`, `Label1`,
|
||||
`List1`, `Option1`, `Picture1`, `Text1`, `Timer1`, `VScroll1`.
|
||||
|
||||
## Eigenschaften/Methoden/Ereignisse je Steuerelement
|
||||
|
||||
**Form** — Ereignisse: Click, DblClick, DragDrop, DragOver, GotFocus,
|
||||
KeyDown, KeyPress, KeyUp, Load, LostFocus, MouseDown, MouseMove, MouseUp,
|
||||
Paint, Resize, Unload. Methoden: CLS, DRAG, HIDE, LOAD, MOVE, PRINT,
|
||||
PRINTFORM, REFRESH, SHOW, TEXTHEIGHT, TEXTWIDTH, UNLOAD. Eigenschaften:
|
||||
AutoRedraw, BackColor, BorderStyle, Caption, ControlBox, CurrentX, CurrentY,
|
||||
DragMode, Enabled, ForeColor, FormName, FormType, Height, Left, MaxButton,
|
||||
MinButton, MousePointer, Parent, ScaleHeight, ScaleWidth, Tag, Top,
|
||||
Visible, Width, WindowState.
|
||||
|
||||
**CommandButton** — Ereignisse: Click, DragDrop, DragOver, GotFocus,
|
||||
KeyDown, KeyPress, KeyUp, LostFocus. Methoden: DRAG, MOVE, REFRESH,
|
||||
SETFOCUS. Eigenschaften: BackColor, Cancel, Caption, CtlName, Default,
|
||||
DragMode, Enabled, Height, Index, Left, MousePointer, Parent, TabIndex,
|
||||
TabStop, Tag, Top, Value, Visible, Width. Darstellung nach Höhe:
|
||||
1 = `<Text>`, 2 = einzeiliger Rahmen, ≥3 = Kasten; Mindestgröße 1×3.
|
||||
|
||||
**TextBox** — Ereignisse: Change, DragDrop, DragOver, GotFocus, KeyDown,
|
||||
KeyPress, KeyUp, LostFocus. Methoden: DRAG, MOVE, REFRESH, SETFOCUS.
|
||||
Eigenschaften: BackColor, BorderStyle, CtlName, DragMode, Enabled,
|
||||
ForeColor, Height, Index, Left, MousePointer, MultiLine, Parent,
|
||||
ScrollBars, SelLength, SelStart, SelText, TabIndex, TabStop, Tag, Text,
|
||||
Top, Visible, Width.
|
||||
|
||||
**ListBox** — Ereignisse: Click, DblClick, DragDrop, DragOver, GotFocus,
|
||||
Key*, LostFocus, Mouse*. Methoden: ADDITEM, DRAG, MOVE, REFRESH,
|
||||
REMOVEITEM, SETFOCUS. Eigenschaften: BackColor, CtlName, DragMode, Enabled,
|
||||
ForeColor, Height, Index, Left, List, ListCount, ListIndex, MousePointer,
|
||||
Parent, Sorted, TabIndex, TabStop, Tag, Text, Top, Visible, Width.
|
||||
|
||||
**ComboBox** — wie ListBox plus Change, DropDown (Ereignisse), SelLength/
|
||||
SelStart/SelText/Style/Text (Eigenschaften).
|
||||
|
||||
**CheckBox / OptionButton** — Ereignisse: Click (Option auch DblClick),
|
||||
Drag*, GotFocus, Key*, LostFocus. Methoden: DRAG, MOVE, REFRESH, SETFOCUS.
|
||||
Eigenschaften: BackColor, Caption, CtlName, DragMode, Enabled, ForeColor,
|
||||
Height, Index, Left, MousePointer, Parent, TabIndex, TabStop, Tag, Top,
|
||||
Value, Visible, Width.
|
||||
|
||||
**Frame** — nur DragDrop/DragOver; DRAG, MOVE, REFRESH (kein SetFocus);
|
||||
Container für Gruppierung (OptionButton-Gruppen).
|
||||
|
||||
**Label** — Ereignisse: Change, Click, DblClick, Drag*, Mouse*. Methoden:
|
||||
DRAG, MOVE, REFRESH. Eigenschaften: zusätzlich Alignment, AutoSize,
|
||||
BorderStyle.
|
||||
|
||||
**HScrollBar/VScrollBar** — Ereignisse: Change, Drag*, GotFocus, Key*,
|
||||
LostFocus (**kein** separates Scroll-Ereignis). Eigenschaften: zusätzlich
|
||||
Attached (VBDOS-Spezifikum: am Formularrand angedockt; Laufzeit read-only),
|
||||
LargeChange, Min, Max, SmallChange, Value.
|
||||
|
||||
**PictureBox** — Text-Zeichenfläche (PRINT/CLS aufs Control) und Container
|
||||
für OptionButton-Gruppen. Ereignisse: Click, DblClick, Drag*, GotFocus,
|
||||
Key*, LostFocus, Mouse*, Paint. Methoden: CLS, DRAG, MOVE, PRINT, REFRESH,
|
||||
SETFOCUS, TEXTHEIGHT, TEXTWIDTH. Eigenschaften: zusätzlich AutoRedraw,
|
||||
CurrentX, CurrentY, ScaleHeight, ScaleWidth.
|
||||
|
||||
**Timer** — Ereignis Timer, keine Methoden; Eigenschaften: CtlName, Enabled,
|
||||
Index, Interval (0 = aus … 65 535 ms), Parent, Tag.
|
||||
|
||||
**Menu** — Ereignis Click; Eigenschaften Caption, Checked, CtlName, Enabled,
|
||||
Index, Parent, Separator, Tag, Visible (Shortcut nur zur Entwurfszeit).
|
||||
|
||||
**DirListBox/DriveListBox/FileListBox** — Datei-Browser-Controls
|
||||
(Path/Drive/FileName/Pattern/Archive/Hidden/Normal/ReadOnly/System;
|
||||
Ereignisse u. a. Change, PathChange, PatternChange). Terminal Basic bildet
|
||||
sie plattformneutral nach (Laufwerksliste → Wurzeln/Mounts).
|
||||
|
||||
## Standardwerte und Wertebereiche
|
||||
|
||||
| Eigenschaft | Bereich | Default |
|
||||
|---|---|---|
|
||||
| Form | Fenster (mit/ohne Rahmen, Titel, verschiebbar) | Load, Unload, Activate, Deactivate, Resize, Paint, Click, KeyPress |
|
||||
| Label | statischer Text | Click |
|
||||
| TextBox | ein-/mehrzeilige Texteingabe | Change, KeyPress, GotFocus, LostFocus |
|
||||
| CommandButton | Schaltfläche | Click |
|
||||
| CheckBox | Mehrfachauswahl (Value 0/1/2) | Click |
|
||||
| OptionButton | Einfachauswahl in Gruppe (Value TRUE/FALSE) | Click |
|
||||
| Frame | Gruppierungsrahmen (Container) | — |
|
||||
| ListBox | Liste (List, ListCount, ListIndex, AddItem/RemoveItem) | Click, DblClick |
|
||||
| ComboBox | Eingabe + Liste (Style 0/1/2) | Change, Click, DblClick |
|
||||
| HScrollBar / VScrollBar | Bildlauf (Min, Max, Value, SmallChange, LargeChange) | Change, Scroll |
|
||||
| PictureBox | Text-Zeichenfläche (PRINT/CLS auf Steuerelement) | Click, Paint |
|
||||
| Timer | unsichtbar; Interval in ms (Vorbild: 55-ms-Ticks) | Timer |
|
||||
| Menu | Menüleiste/-einträge (Designer-definiert) | Click |
|
||||
| CheckBox.Value | 0 Unchecked · 1 Checked · 2 Grayed | 0 |
|
||||
| OptionButton.Value | 0/−1 | 0 |
|
||||
| CommandButton.Value | True löst Click aus | False |
|
||||
| ComboBox.Style | 0 Dropdown · 1 Simple · 2 Dropdown List | 0 |
|
||||
| BorderStyle (Form) | 0 None · 1 Fixed Single · 2 Sizable Single · 3 Fixed Double · 4 Sizable Double · 5 Fixed Solid · 6 Sizable Solid | 2 |
|
||||
| BorderStyle (Control) | 0 None · 1 Single · 2 Double (nur Label/PictureBox) | Label 0; TextBox/PictureBox 1 |
|
||||
| WindowState | 0 Normal · 1 Minimized · 2 Maximized | 0 |
|
||||
| FormType | 0 Normal · 1 MDI-Container | 0 |
|
||||
| Timer.Interval | 0–65 535 ms | 0 |
|
||||
| ScrollBar Min/Max | −32 768…32 767 | 0 / 32 767 |
|
||||
| Small-/LargeChange | 1…32 767 | 1 |
|
||||
| TextBox.ScrollBars | 0 None · 1 H · 2 V · 3 Both | 0 |
|
||||
| MultiLine/Sorted/Attached | Boolean, Laufzeit read-only | False |
|
||||
| Alignment (Label) | 0 Left · 1 Right · 2 Center | 0 |
|
||||
| DragMode | 0 Manual · 1 Automatic | 0 |
|
||||
| MousePointer | 0–12 (Default, Block, Cross, I-Beam, …) | 0 |
|
||||
| ForeColor/BackColor | 0–15 | 0 / 7 |
|
||||
| Text (TextBox/ComboBox) | — | Entwurfszeit = CtlName |
|
||||
| ListIndex | −1 = keine Auswahl | −1 |
|
||||
|
||||
## Gemeinsame Eigenschaften
|
||||
**Keine Default-Eigenschaften:** `Text1 = "x"` gibt es nicht — Zugriff
|
||||
immer explizit (`Text1.Text`). „Default" ist nur die CommandButton-
|
||||
Eigenschaft (Enter-Taste); „Cancel" analog für Esc.
|
||||
|
||||
`Name` (Entwurfszeit), `Caption`/`Text`, `Top`/`Left`/`Height`/`Width`,
|
||||
`Visible`, `Enabled`, `TabIndex`, `TabStop`, `Tag`, `Index` (Steuerelement-
|
||||
Arrays), `ForeColor`/`BackColor` (0–15 bzw. 0–7), `MousePointer` (TODO).
|
||||
Zugriff zur Laufzeit: `form.eigenschaft`, `form!element.eigenschaft`;
|
||||
Standard-Eigenschaft (z. B. `Text` bei TextBox, `Caption` bei Label) bei
|
||||
Zuweisung ohne Eigenschaftsname. TODO: exakte Standard-Eigenschaften prüfen.
|
||||
## Ereignis-Signaturen
|
||||
|
||||
## Gemeinsame Methoden
|
||||
```basic
|
||||
SUB Form_KeyDown (KeyCode AS INTEGER, Shift AS INTEGER)
|
||||
SUB ctl_KeyPress ([Index AS INTEGER,] KeyAscii AS INTEGER)
|
||||
SUB Form_MouseDown (Button AS INTEGER, Shift AS INTEGER, X AS SINGLE, Y AS SINGLE)
|
||||
SUB Form_DragDrop (Source AS CONTROL, X AS SINGLE, Y AS SINGLE)
|
||||
SUB Form_DragOver (Source AS CONTROL, X AS SINGLE, Y AS SINGLE, State AS INTEGER)
|
||||
SUB Form_Unload (Cancel AS INTEGER) ' Cancel <> 0 verhindert Entladen
|
||||
```
|
||||
|
||||
`Move top, left [, height, width]` · `SetFocus` · `Refresh` · `Drag` (Nicht-
|
||||
Ziel?) · Form zusätzlich: `Show [modal]`, `Hide`, `Cls`, `Print`, `Line`
|
||||
(Textmodus-Variante? TODO). ListBox/ComboBox: `AddItem text$ [, index]`,
|
||||
`RemoveItem index`, `Clear` (TODO: hieß es `Clear`?).
|
||||
Shift-Bitfeld 1 Shift · 2 Ctrl · 4 Alt; Button 1 links · 2 rechts;
|
||||
DragOver-State 0 Enter · 1 Leave · 2 Over. Bei Steuerelement-Arrays steht
|
||||
`Index AS INTEGER` immer vorn. KeyAscii ist bei uns ein Unicode-Codepoint
|
||||
(UTF-8-Abweichung); klassische KeyCode-Konstanten bleiben gültig
|
||||
(Vorbild-Eigenheit: Entf = 127).
|
||||
|
||||
## Ereignismodell
|
||||
## SCREEN-Objekt
|
||||
|
||||
- Ereignisprozeduren heißen `SUB elementname_Ereignis (argumente)` und liegen
|
||||
im Formular-Modul.
|
||||
- Tastatur: `KeyDown(KeyCode%, Shift%)`, `KeyPress(KeyAscii%)`, `KeyUp` —
|
||||
KeyAscii ist bei uns ein Unicode-Codepoint (Abweichung UTF-8).
|
||||
- Maus: `MouseDown/MouseMove/MouseUp(Button%, Shift%, X!, Y!)` in Zellen.
|
||||
- Fokusreihenfolge über `TabIndex`; Tab/Shift+Tab wechseln, Access-Keys per
|
||||
`&` im Caption (z. B. `"&OK"` → Alt+O).
|
||||
- Zentrale Schleife: Ereignisse werden nur bei `DOEVENTS`, `SLEEP`, `INPUT`-
|
||||
artigen Wartezuständen oder nach Ende einer Ereignisprozedur zugestellt
|
||||
(kooperativ, wie im Vorbild — keine Präemption).
|
||||
Eigenschaften: ActiveControl, ActiveForm, AutoRedraw, ControlPanel,
|
||||
Height, Width (Zeichen, read-only), MousePointer. Methoden: HIDE, SHOW
|
||||
(alle sichtbaren Formulare ein-/ausblenden). `SCREEN.ControlPanel(0–17)`
|
||||
konfiguriert Systemfarben/-effekte (AccessKey-/Desktop-/Menü-/Titel-
|
||||
Farben, Schatten, 3D-Effekte, Desktop-Füllzeichen) — Konstanten in der
|
||||
Konstanten-Include-Datei.
|
||||
|
||||
## Globale Objekte und Funktionen
|
||||
## Show/Hide/Load/Unload und Modalität
|
||||
|
||||
- `SCREEN`-Objekt: `SCREEN.ActiveForm`, `SCREEN.ActiveControl`,
|
||||
`SCREEN.Height`/`Width` (25/80), `SCREEN.MousePointer` (TODO: Umfang).
|
||||
- `MSGBOX(text$ [, typ% [, titel$]])` als Anweisung und Funktion
|
||||
(Rückgabe: gedrückte Schaltfläche), `INPUTBOX$(prompt$ [, titel$
|
||||
[, standard$ [, spalte%, zeile%]]])`.
|
||||
- `LOAD form` (Load-Ereignis, unsichtbar), `UNLOAD form` (Unload-Ereignis),
|
||||
Formular-Referenzen sind statisch (keine Instanziierung wie in späteren
|
||||
Nachfolgern).
|
||||
`form.SHOW [style%]`: **0 = modeless (Standard), 1 = modal**; lädt bei
|
||||
Bedarf. Bei modal läuft der Code nach `SHOW` erst nach Schließen weiter.
|
||||
Modal-Stacking-Regeln → Fehler 400–403 (u. a. „MDI form cannot be shown
|
||||
modally"). `HIDE` setzt nur `Visible = False`; `LOAD`/`UNLOAD` mit
|
||||
Load-/Unload-Ereignis (Cancel-Parameter). `LOAD/UNLOAD ctl(index%)` für
|
||||
Steuerelement-Arrays (Entwurfszeit-Elemente sind nicht entladbar,
|
||||
Fehler 362).
|
||||
|
||||
## Farben und Zeichensatz
|
||||
## Menüsystem
|
||||
|
||||
Rahmen, Schatten und Bedienelemente werden mit Unicode-Box-Drawing gezeichnet
|
||||
(Abweichung: UTF-8 statt CP437, identische Optik). Standard-Farbschema des
|
||||
Vorbilds (grauer Dialog, schwarze Schrift, weiße Akzente) wird als Default
|
||||
nachgebildet. TODO: exakte Attributtabelle je Steuerelement-Zustand
|
||||
(normal/fokussiert/deaktiviert) aus Screenshots/Emulator ableiten.
|
||||
Definition pro Formular im **Menu Design Window**, bis zu 6 Ebenen.
|
||||
Felder: Caption (`&` Access-Key, `-` Separator), CtlName, Tag, Index,
|
||||
Checked/Enabled/Visible/Separator, Shortcut-Dropdown. Regeln: Separatoren
|
||||
nicht checked/disabled/mit Shortcut; Menütitel ohne Shortcut.
|
||||
Menü-Steuerelement-Arrays sind möglich.
|
||||
|
||||
## Offene Detailfragen (per Emulator-Session zu klären)
|
||||
## Steuerelement-Arrays, Drag & Drop, Custom Controls
|
||||
|
||||
- Exakte Standardwerte aller Eigenschaften je Steuerelement
|
||||
- Z-Reihenfolge/Überlappung von Steuerelementen und Formularen
|
||||
- Verhalten `Show 1` (modal): welche Ereignisse laufen weiter?
|
||||
- Timer-Auflösung und -Reihenfolge bei mehreren Timern
|
||||
- Genauer Umfang von PictureBox im Textmodus
|
||||
- **Control-Arrays:** gleiche CtlName + Index; Laufzeit-Erzeugung per
|
||||
`LOAD ctl(index%)`.
|
||||
- **Drag & Drop:** DragMode 0/1, Methode `DRAG action%` (0 Cancel ·
|
||||
1 Begin · 2 Drop), Ereignisse DragDrop/DragOver mit `Source AS CONTROL`.
|
||||
- **Custom Controls:** das Vorbild lud sie aus Quick-Libraries; für
|
||||
Terminal Basic ist ein natives Erweiterungsmodell **Stufe 2** (PLAN.md).
|
||||
|
||||
## Offene Detailfragen
|
||||
|
||||
- Exakte Optik je Steuerelement-Zustand (normal/fokussiert/deaktiviert):
|
||||
aus den Original-Screenshots ableiten (Phase 4)
|
||||
- Z-Reihenfolge/Überlappung: Verhalten bei überlappenden Controls
|
||||
- Timer-Reihenfolge bei mehreren gleichzeitig fälligen Timern
|
||||
- `.FRM`-Textformat: exakte Serialisierung (siehe dateiformate.md)
|
||||
Reference in New Issue
Block a user