Forms-Zustand und Darstellung korrigieren und Change archivieren

This commit is contained in:
2026-09-05 20:48:13 +02:00
parent 644a86212f
commit 58b1f620ea
22 changed files with 1362 additions and 101 deletions

View File

@@ -64,6 +64,19 @@ Parent, Sorted, TabIndex, TabStop, Tag, Text, Top, Visible, Width.
**ComboBox** — wie ListBox plus Change, DropDown (Ereignisse), SelLength/
SelStart/SelText/Style/Text (Eigenschaften).
`ListIndex = -1` hebt die Auswahl auch bei leerer Liste auf. ADDITEM vor dem
ausgewählten Eintrag verschiebt seinen Index nach rechts, REMOVEITEM davor
nach links; Entfernen des ausgewählten Eintrags setzt ihn auf 1. Das gilt
auch für sortierte Listen. `ListCount` und `List(i)` spiegeln die geänderte
Liste unmittelbar wider. Ohne Auswahl liefern ListBox und ComboBox.Style 2
leeren Text. Die editierbaren ComboBox-Stile 0 und 1 erhalten ihren separaten
Eingabetext; ihre Anzeige entspricht auch ohne Auswahl diesem Text.
Nachträgliches `Sorted = -1` sortiert den vorhandenen Inhalt ohne Beachtung
der Groß-/Kleinschreibung. Gleich sortierte Einträge behalten ihre relative
Reihenfolge; die Auswahl bleibt beim selben Eintrag, auch bei Duplikaten.
Die Simple-ComboBox zeigt unter dem Eingabefeld ihre Listeneinträge samt
Auswahlmarkierung; Inhalt wird auf den verfügbaren Listenbereich begrenzt.
**CheckBox / OptionButton** — Ereignisse: Click (Option auch DblClick),
Drag*, GotFocus, Key*, LostFocus. Methoden: DRAG, MOVE, REFRESH, SETFOCUS.
Eigenschaften: BackColor, Caption, CtlName, DragMode, Enabled, ForeColor,
@@ -97,6 +110,21 @@ TabStop, AutoRedraw, CurrentX, CurrentY, ScaleHeight, ScaleWidth.
**Timer** — Ereignis Timer, keine Methoden; Eigenschaften: CtlName, Enabled,
Index, Interval (0 = aus … 65 535 ms), Parent, Tag.
Die erste Frist beginnt mit der Aktivierung auf einem sichtbaren Formular
oder dem Zuweisen eines positiven Intervalls an der aktuellen Hostzeit.
Erneutes Zuweisen von Enabled = 1 an einen bereits aktiven Timer verändert
die Frist nicht. Intervalländerungen beginnen eine neue Phase und verwerfen
alte wartende Timerereignisse; Enabled = 0 und Interval = 0 verwerfen sie
ebenfalls. Verstecken/Entladen beendet die aktive Phase. Ein durchgehend
aktiver 100-ms-Timer erzeugt bei einem Fortschritt um 250 ms zwei Ereignisse.
Zeiten vor Aktivierung oder während einer inaktiven Phase werden nicht nachgeholt.
Einbetter, die das Forms-Modell direkt verändern, rufen nach der Änderung
`sync_timers(|| host.jetzt_ms())` auf. Die Closure wird ausschließlich bei
neu beginnenden aktiven Timern ausgewertet. Die VM erledigt dies nach
Property-Zuweisungen, SHOW und dem Laden von Arrayelementen sowie beim
Übernehmen eines vorbereiteten Modells; es gibt keinen globalen Zeitcache.
**Menu** — Ereignis Click; Eigenschaften Caption, Checked, CtlName, Enabled,
Index, Parent, Separator, Shortcut, Tag, Visible.
@@ -140,6 +168,13 @@ nur den Access-Key und wird nicht ausgegeben. Die Beispiele zeigen jeweils
normal · fokussiert · deaktiviert; Inhalt wird auf die verfügbare Breite
gekürzt und der Rest mit Leerzeichen gefüllt.
Listenrahmen bleiben auch bei Width = 1 oder Height = 1 innerhalb des
Steuerelements; nicht passende Rahmenstücke und Zeilen entfallen.
Die Kürzung von Listen- und Combo-Inhalten zählt Bildschirmzellen: breite
Unicode-Zeichen werden nur vollständig ausgegeben, Steuerzeichen als
Leerzeichen dargestellt. Am Bildschirmrand wird die Forms-Ausgabe ohne
Umbruch oder Scrollen abgeschnitten.
| Klasse | normal | fokussiert | deaktiviert |
|---|---|---|---|
| CommandButton, Höhe 1 | `<OK>` | `<OK>` | `<OK>` |
@@ -182,7 +217,13 @@ Referenzverhalten:
- **Timer-Reihenfolge:** Sind mehrere Timer am selben Zustellpunkt fällig,
werden ihre Ereignisse in aufsteigender, ASCII-unabhängig
großgeschriebener `CtlName`-Reihenfolge zugestellt. Mehrere verstrichene
Intervalle desselben Timers bleiben in zeitlicher Reihenfolge davor.
Intervalle desselben Timers bleiben in zeitlicher Reihenfolge davor. Bei
gleichem Arraynamen folgt der aufsteigende numerische Index.
Die Korpusfälle `listenauswahl.frm` und `timer-aktivierung.frm` prüfen diese
Verträge mit festgelegten Sollausgaben: Listenauswahl/Combo-Eingabetext und
späte Timeraktivierung bei 1000 ms mit erster Zustellung bei 1100 ms.
Dies sind Vertragsregressionen, keine neu aufgenommenen VBDOS-Referenzläufe.
**Keine Default-Eigenschaften:** `Text1 = "x"` gibt es nicht — Zugriff
immer explizit (`Text1.Text`). „Default" ist nur die CommandButton-