# Terminal Basic IDE bedienen

`cargo run -p tb-ide -- [Projekt.mak|Modul.bas|Formular.frm]` startet die IDE.
Ohne Datei erscheint ein neues Projekt mit `[1] Untitled` und dem Project
Window rechts. Versions- und Copyright-Begrüßung blockieren keine Eingabe.
Bei bereits vorhandener `Untitled.bas` bekommt das neue Dokument einen
freien Namen. Es wird beim Start keine Datei angelegt.

Das Terminal muss mindestens 80×25 Zellen haben. Darunter erscheint nur
der Größenhinweis; Dokumente, Fokus und Fensterzustand bleiben erhalten.
Beim Vergrößern werden die Fenster wieder innerhalb der Terminalfläche
dargestellt. Normales Beenden und Fehlerpfade stellen Raw Mode, Cursor,
Mausmodus und Alternate Screen zurück.

## Menüs, Fenster und Dialoge

- Alt plus Menübuchstabe oder F11 öffnet die Menüleiste. Pfeile wählen
  Menü/Eintrag, Enter führt aus; der unterstrichene Buchstabe wählt direkt.
  Esc bricht ab. F11 ist die Alternative, wenn das Terminal Alt allein
  nicht meldet. Menüs sind auch anklickbar, Help steht rechts.
- File enthält Projekt- und Dateiaktionen einschließlich New Form,
  New Module, Add/Remove File, Save File/As, Load/Save Text und Exit.
  Run → Set Start-up File speichert eine Auswahl oder den bisherigen Standard.
- Dialoge binden Tastatur und Maus an sich. Tab/Shift+Tab wechselt das Feld,
  Links/Rechts ändert Auswahlwerte, Leertaste schaltet Kästchen. Textfelder
  unterstützen Cursor, Pos1/Ende, Backspace/Entf und Ctrl+A zum Ersetzen.
  Enter/OK übernimmt, Esc/Abbrechen verwirft den Dialog.
- F2 in einem Dateipfad öffnet die Dateiauswahl. Links/Rechts wählt einen
  Eintrag, Enter öffnet ein Verzeichnis oder übernimmt eine Datei. Esc
  kehrt zum vorherigen Dialog mit dessen Angaben zurück. Neue Dateinamen
  lassen sich direkt ins Pfadfeld schreiben.
- F6/Ctrl+F6 bzw. Shift+F6 wechselt Fenster. Ctrl+F4 schließt eine Ansicht;
  Dokument und Änderungen bleiben im Projektmodell erhalten. Alt+Minus
  oder die Control-Menü-Box öffnet die Fensterbefehle.
- Ctrl+F7 verschiebt und Ctrl+F8 skaliert mit Pfeilen (Ctrl+Pfeile: fünf
  Zellen); Enter bestätigt, Esc stellt die vorige Geometrie wieder her.
  Ctrl+F9 minimiert, Ctrl+F10 maximiert, Ctrl+F5 stellt die Normalgeometrie
  wieder her. Window → Arrange All kachelt, New Window öffnet eine weitere
  Ansicht desselben Dokuments. Die Window-Liste markiert die aktive Ansicht.
- Im Project Window wählen Pfeile das Mitglied; Enter öffnet Code oder
  Formular entsprechend dem Dateityp. Form/Code-Buttons öffnen die gewählte
  Ansicht. View → Code/Form bietet zusätzlich einen Auswahldialog.
- Die Umgebung zeigt unten anklickbare Tastenkürzel und `00001:001` als
  Zeile/Spalte. Der Designer besitzt stattdessen die Properties Bar.
  F10 wechselt dort zwischen Menü- und Properties Bar, F2 fokussiert Value.
  Die Formularbearbeitung ist unten beschrieben.

## Speichern und Wechseln

Save File nutzt den bestehenden Pfad; neue Dateien, Importziele und
Speicherkonflikte öffnen den Speicherdialog. Save Project zeigt Projektziel
und Dokumentziele mit separaten Überschreibentscheidungen. Eine Änderung
eines Pfades allein autorisiert kein Überschreiben einer vorhandenen Datei.
Binäre FRM-Originale bleiben auch mit gesetzter Überschreibentscheidung
geschützt; für bearbeitete Importe ist ein anderes Textziel erforderlich.

Beim Projektwechsel und Beenden stehen Abbrechen, Speichern und Verwerfen
zur Auswahl. Abbrechen ist vorausgewählt. Bei einem Teilspeicherfehler
bleibt der Dialog mit allen Angaben offen: erfolgreich gespeicherte Dateien
sind gespeichert, übrige Änderungen bleiben erhalten; die IDE schließt
nicht. Die MAK-Datei wird zuletzt geschrieben. Details stehen in
[Dateiformate](dateiformate.md#bearbeitete-dokumente-und-speichern).

Load Text fügt am Cursor als eine Undo-Aktion ein; Save Text exportiert im
Rahmen den gesamten Code. Der Dokumentvertrag unterstützt bereits
Auswahlexport des markierten Bereichs. Remove
File löscht keine Datei; beim Entfernen der Startdatei ist die Wahl eines
Ersatzes oder des bisherigen Standards ausdrücklich im Dialog enthalten.

## Display und Benutzereinstellungen

Options → Display bietet Vorder- und Hintergrund (0–15) für Menü, Desktop,
Code, aktiven Titel, Rahmen, Dialog/Projekt und Status. Default ist Schwarz
auf Hellgrau für Menüs/Dialogs, Hellgrau auf Blau für Code, Weiß auf Magenta
für aktive Titel und Schwarz auf Cyan für den Status. Desktop: `▒`,
Hellgrau auf Schwarz; Tabweite: 8. Ein Desktopzeichen muss genau eine
Terminalzelle belegen, Tabweite liegt zwischen 1 und 32. Änderungen gelten
sofort für die IDE; BASIC-Laufzeitfarben bleiben unabhängig.

Set Paths verwaltet Quellen-, Ausgabe- und Include-Verzeichnisse. Mehrere
Includes werden mit `|` getrennt; relative Optionspfade werden beim
Übernehmen relativ zum Projektverzeichnis absolut aufgelöst. Das Include
neben der Quelldatei hat Vorrang vor Suchverzeichnissen. Right Mouse
schaltet Kontext-Hilfe per Rechtsklick (Default an); die Hilfefunktion
folgt in Change 07. Syntax Checking ist zunächst an; seine Wirkung ist unten beschrieben.

Erst Options → Save… / OK schreibt die versionierte Benutzerdatei:

| System | Pfad |
| --- | --- |
| Unix mit absolutem XDG_CONFIG_HOME | `$XDG_CONFIG_HOME/TerminalBasic/options.ini` |
| macOS ohne XDG_CONFIG_HOME | `$HOME/Library/Application Support/TerminalBasic/options.ini` |
| anderes Unix ohne XDG_CONFIG_HOME | `$HOME/.config/TerminalBasic/options.ini` |
| Windows | `%APPDATA%/TerminalBasic/options.ini` |

Die Datei ist unabhängig vom Arbeitsverzeichnis. Ungültige Werte erhalten
eine Diagnose und behalten die Vorgabe; unbekannte Schlüssel werden mit
Hinweis ignoriert. Unbekannte Versionen/ungültige Textkodierung verwenden
Defaults. Schreibfehler erhalten die aktuellen, ungespeicherten Optionen.
Externe Änderungen der Optionsdatei werden vor dem Ersetzen erkannt.

## Native Exporte: UI in Phase 5, Erzeugung in Phase 6

Run → Make EXE File… (Alt+R, E) und Make Library… (Alt+R, L) öffnen
vollständig bedienbare Dialoge. Artefaktart ist das native eigenständige
Executable bzw. die native Systembibliothek. Zielsystem (Linux/macOS/Windows)
und Architektur (x86_64/aarch64) sind auswählbar; Vorgabe ist das laufende
Zielsystem. Ausgabepfad und Überschreibentscheidung werden je Auftrag
erfasst. Die Auswahl ist noch keine Zusage einer vom Backend unterstützten
Kombination; die Phase-6-Plattformmatrix bestätigt die tatsächlichen Ziele.

Prüfen/Enter validiert die Angaben und schützt Projektdatei, geöffnete
Dokumente und binäre FRM-Originale. Leere/ungültige Pfade, fehlende
Zielverzeichnisse, bestehende Ziele ohne Zustimmung und `.tbc` als natives
Ziel ergeben eine Diagnose; die anderen Angaben bleiben erhalten.

Nur **Erzeugen** ist bis Phase 6 gesperrt, mit dem Hinweis „Native
Erzeugung folgt in Phase 6“. Ein Produktionsaufruf schreibt keine Datei
und meldet keinen erfundenen Erfolg. Der vorbereitete Auftrag trägt
Projektidentität und Revisionsstand, Artefakt, Zielsystem, Architektur,
Pfad und Überschreibentscheidung. Die UI kann zu diesem Auftrag Laufend,
Erfolg, Fehler und Abbruch darstellen. Oberflächentests speisen diese
Ergebnisse kontrolliert ein; sie belegen keine native Erzeugung.

Die tatsächliche Erzeugung und reale Backend-Anbindung, native Formate,
Library-Symbole/Aufrufvertrag und der native Verbraucher-Nachweis stehen
explizit in [PLAN.md, Phase 6](../PLAN.md). Ein umbenanntes TBC erfüllt
keines der beiden Exportziele.

## Befehlsabdeckung nach Change 05

Alle Referenzbefehle sind in ihrer Menüfolge vorhanden. Fachbefehle der
folgenden Changes sind sichtbar deaktiviert und zeigen einen
Verfügbarkeitsgrund; ihre Kürzel gelangen nicht versehentlich an BASIC.
Ctrl+C im Editor ist Kopieren, bei laufendem Programm mit
Output-Fokus unterbricht Ctrl+C sofort die Sitzung, ohne eine BASIC-Taste einzureihen.

| Bereich | Rahmenaktion jetzt | Fachaktion im Folgechange |
| --- | --- | --- |
| File | New/Open/Save Project, New Form/Module, Add/Remove File, Save File/As, Load/Save Text, Print (UTF-8-Datei), Shell, Exit | — |
| Edit | Undo, Cut/Copy/Paste/Clear, New Sub/Function, Event Procedures | — |
| View | Code/Form-Auswahl, Prozedurauswahl, Included File/Lines, Diagnostics, Designer Menu Bar/Value-Fokus, Grid Lines, Output Screen | Next Statement: 06 |
| Search | Find, Selected Text, Repeat Last Find, Change | — |
| Run | Start/Restart/Continue/Pause, COMMAND$, wirksame Startdatei und beide Make-Dialoge | Native Erzeugung: Phase 6 |
| Debug | Vollständiges Menü und Kürzelzuordnung, einschließlich F7/F8/F9/F10 und History | Watches, Watchpoints, Trace, History, Breakpoints, Break on Errors, Set Next Statement: 06 |
| Options | Display, Set Paths, Right Mouse, Save, Syntax Checking einschließlich Zeilenprüfung | Kontext-Hilfe: 07 |
| Window | New Window, Arrange All, Calls/Debug/Help/Immediate/Output/Project, aktive Codeliste, alle Fensterkürzel | Debug/Calls/Immediate-Inhalte: 06; Hilfeinhalt: 07 |
| Designer Tools/Window | Vollständige Toolbox einschließlich Spin, Formliste, Color Palette, Menu Design Window | — |
| Help | Vollständiges Menü, About und Help-Fensterrahmen | Index, Contents, Keyboard, Topic, Using Help, Tutorial: 07 |

Editor, inkrementelle Übersetzung, Ausführung und Formulardesigner sind umgesetzt. Die gesamte
Phase-5-Abnahme erfolgt in Change 08.

## Programme ausführen

Shift+F5/Run → Start kompiliert den aktuellen Projektstand einschließlich
ungespeicherter Dokumente und startet eine frische TBVM. F5/Continue startet
im Bearbeitungsmodus oder setzt eine Pause fort. Run → Pause und Ctrl+Break
unterbrechen auch bei Editorfokus; Ctrl+C unterbricht ausschließlich bei
Programmfokus. Die Statusmeldung nennt Quelldatei und Unterbrechungszeile.
STOP pausiert. END/SYSTEM beenden die Sitzung, erhalten die letzte Ausgabe
und lassen die IDE offen. Natürliches Modulende hält sichtbare Formulare
weiter bedienbar. Laufzeitfehler erscheinen als Diagnose
mit Fehlernummer und Zeile; Kompilierfehler verhindern einen neuen Lauf.

Nach Quelländerungen während einer Pause verlangt Continue eine Entscheidung:
aktuellen Stand neu starten oder das alte Kompilat ausdrücklich fortsetzen.
Die zweite Wahl kennzeichnet das Output-Fenster mit **ALTES KOMPILAT**.
Laufender Code wird nicht nachträglich ersetzt. Der Dialog Modify COMMAND$
setzt Argumente für den nächsten Start. Restart und BASIC RUN erzeugen eine
neue VM samt Variablen, DATA-Zeiger, Fehlerzustand, Forms, Timern und Dateien.
RUN mit Dateiname löst das Ziel relativ zum Ausführungsziel auf; fremde Ziele
ersetzen das bearbeitete IDE-Projekt nicht. RUN auf dasselbe Ziel verwendet
den aktuellen Editorstand. Fehlende Ziele erhalten die Dokumente.

Eine ausgewählte Startdatei läuft zuerst; die übrigen Modulrümpfe behalten
ihre relative Reihenfolge. Ein ausgewähltes FRM wird Startformular, ein
ausgewähltes BAS verhindert den automatischen Formularstart allein aufgrund
der Projektmitgliedschaft. Ohne Auswahl bleiben Projektreihenfolge und erstes
Startformular wie bisher. CLI und gespeichertes TBC verwenden denselben Vertrag.

Window → Output und F4 zeigen denselben TextScreen. Das kleine Fenster schneidet
die Ansicht ab, verändert aber weder BASIC-Farben noch logische Bildschirmgröße.
Nur ein echtes Terminal-Resize verändert den Laufzeitbildschirm. Auch während
INPUT, LINE INPUT, INPUT$, RANDOMIZE ohne Argument, SLEEP und modaler Dialoge
bleiben Umschalten und Pausieren möglich; Eingabeteile, Prompt, Fokus und
Deadline bleiben erhalten. Eine Pause friert die Hostuhr nicht ein: Eine
verstrichene SLEEP-Deadline wird nach Continue sofort erkannt.

File → Shell und BASIC SHELL geben Raw Mode, Maus-/Paste-Erfassung und
Alternativschirm an ein Vordergrund-Kindprogramm mit geerbtem Standard-I/O ab.
Nach Ende, Fehler oder Ctrl+C werden Terminal und bisheriger IDE-Fokus
wiederhergestellt. SHELL als Funktion liefert den Exit-Code (bei unterbrochenem
Kind ohne regulären Exit-Code wie bisher: 0); ein fehlgeschlagener Prozessstart wird
BASIC-Fehler 53. Die IDE führt während der Übergabe keine VM-Schritte aus.

File → Print ist eine Plattformanpassung: Der Dialog schreibt Auswahl oder
Gesamttext als UTF-8 in eine wählbare Druckdatei (Vorgabe `LPT1.TXT`). Er nutzt
dieselben geschützten, atomaren Dateipfade wie Save Text. Überschreiben muss
explizit gewählt werden; Projekt-/Quelldateien und originale Binärdateien sind
weiter geschützt. Fehler halten den Dialog offen und verändern den Quelltext
nicht. Ein Druckertreiber ist dafür nicht erforderlich.

Die VM gibt nach einem festen Instruktionsbudget oder bei ausstehender Eingabe
die Kontrolle zurück. Synchrone Betriebssystemoperationen wie Öffnen, Lesen,
Schreiben, Datenbank-I/O oder Dateiauswahl lassen sich innerhalb eines laufenden
Systemaufrufs nicht unterbrechen. Sie sind keine Eingabewarte-Schleifen; nach
Rückkehr gelten wieder die normalen Unterbrechungsgrenzen. Es gibt keinen
VM-Hintergrundthread und keine zweite Kopie des Programmbildschirms.

## Reproduzierbarer Testpfad

`cargo test -p tb-ide` prüft denselben `App::handle(Event)`-Dispatcher und
dieselbe `App::render`-Funktion wie der Terminalprozess mit
`ratatui::TestBackend`. Die Tests bedienen Menü, Tastatur, Dialog und Maus;
sie prüfen Fokus, Dokumente, Fenster, sichtbare Texte und Farben. Dieser
Pfad steht den Folgechanges zur Verfügung. `TerminalGuard` prüft zusätzlich
Normalende, Fehlerende und teilweise fehlgeschlagene Initialisierung.

## Editor, Suche und Quelltextpflege

Einfügen/Überschreiben wechselt mit Insert. Shift mit Pfeilen, Pos1/Ende und
Bild auf/ab markiert Text; Ctrl+A markiert alles. Ctrl+Links/Rechts navigiert
wortweise, Ctrl+Pos1/Ende zum Dateianfang/-ende. Ctrl+Y löscht die aktuelle
Zeile. Unicode-Codepunkte und CRLF-Zeilenumbrüche bleiben unbeschädigt;
Tabs und breite Zeichen verwenden Bildschirmspalten für die Vertikalbewegung.
Markierungen werden invertiert dargestellt, der Cursor bleibt im sichtbaren Bereich.

Ctrl+C/X/V/Z sowie Ctrl+Insert, Shift+Delete/Insert und Alt+Backspace bedienen
Kopieren, Ausschneiden, Einfügen und Undo. Die Zwischenablage ist IDE-intern und
funktioniert zwischen Codefenstern. Terminal-Paste wird mit Bracketed Paste als
eine Aktion verarbeitet. Paste, Ausschneiden, Ersetzen aller Treffer,
Normalisierung und Prozedurerzeugung sind jeweils eine Undo-Einheit. Undo
stellt auch Cursor, Markierungen und Lesezeichen der gemeinsamen Ansichten her.

WordStar: Ctrl+Q, dann S/D setzt den Zeilenanfang/-ende, R/C den
Dateianfang/-ende. Ctrl+K, dann 0–3 setzt vier Lesezeichen je Ansicht;
Ctrl+Q, dann 0–3 springt dorthin. Esc oder eine unbekannte Folgetaste bricht
ab, ohne Quelltext einzufügen. Mausaktionen beenden einen begonnenen Chord.

Find und Change bieten Suchtext, Ersetzung, Richtung, Groß-/Kleinschreibung,
ganze Wörter und den Bereich „Dokument“ oder „Nur Auswahl“. Das Aktionsfeld
wählt Suchen, Einzeln ersetzen oder Alle ersetzen. Eine leere Ersetzung löscht
Treffer. Ctrl+Backslash übernimmt die Auswahl als Suchtext, F3 sucht weiter.
Am Bereichsende zeigt die Statusmeldung den angebotenen Rücksprung an;
erneutes F3 bestätigt ihn. Alle Treffer einer Ersetzungsaktion werden gemeinsam
rückgängig gemacht.

Shift+F2 beziehungsweise View → Procedures öffnet Modulrumpf und Prozeduren;
Ctrl+F2 kehrt zur vorherigen Codeposition zurück. New Sub/Function prüft Namen
auch gegen andere Projektmodule und übernimmt die am Erzeugungsort wirksamen
DEFtype-Regeln, einschließlich Includes und des aktuellen Prozedurkontexts.

View → Included File öffnet das Original der Include-Anweisung auf der
Cursorzeile. Included Lines zeigt die expandierte Übersetzungseinheit mit
Dateinamen und physischen Zeilen als schreibgeschützte Ansicht. Pfeile und
Bild auf/ab scrollen; erneuter Aufruf kehrt zum Quelltext zurück. Save File
speichert immer das physische Dokument. Eine Expansion wird niemals zur BAS-Datei.
View → Diagnostics ist eine ergänzende IDE-Funktion: Die Auswahl springt zur
richtigen physischen Datei, Zeile und Spalte, auch bei Includes und FRM-Code.

Syntax Checking prüft beim Verlassen einer geänderten Zeile. Der reguläre
Parser unterscheidet fehlende Blockabschlüsse am Dateiende von Syntaxfehlern.
Unvollständige Blöcke bleiben ohne modalen Fehlerdialog bearbeitbar. Gültige
Zeilen erhalten normalisierte Keywords und zulässige Abstände anhand der
Lexerpositionen; Tokenvergleich schützt Strings, Kommentare, DATA und Bezeichner.
Abschalten unterbindet automatische Prüfung, Formatierung und Fehlerdialoge.
Die explizite Übersetzungs-API prüft unabhängig davon den vollständigen Stand.

Save File/As und Save Project pflegen DECLAREs im kommentierten Bereich
`' $IDE DECLARE BEGIN` bis `' $IDE DECLARE END` unmittelbar vor den Prozeduren.
Die Prüfung nutzt den regulären Projektcompiler mit Includes und Forms. Passende
Handdeklarationen bleiben erhalten. Bei Konflikten oder unfertigem/fehlerhaftem
Projektstand wird die gesamte Pflege übersprungen, der Entwurf unverändert
gespeichert und der Grund mit Quellort ausgegeben. Auch FRM-Code benutzt diesen
Speicherhook. Wiederholtes Speichern erzeugt keine neuen Deklarationen oder Revisionen.

## Übersetzung und Revisionsbindung

`App::compile_current` lädt den aktuellen Projektstand und verwendet
`tb_vm::project::ProjectCompiler`. `CompileStats` zählt geparste, übersetzte und
wiederverwendete Module. Der Cache liegt nur im Speicher. Sein Verlust führt
zur vollständigen Neuübersetzung, ohne das Dateiformat zu ändern.

Die Schlüssel vergleichen Include-Inhalte und Herkunft, Modulidentität,
aufgelöste Importverträge und den Forms-Katalog. Private Rumpfänderungen lassen
andere Modulprodukte bestehen. Konstante Importwerte werden transitiv neu
aufgelöst; unbenutzte importierte Konstanten invalidieren keine unabhängigen
Module. Importierte TYPEs und Prozeduren gehören zu den unverketteten Tabellen
und damit zum Modulvertrag. Eigene Quellorte bleiben Bestandteil des Schlüssels;
verschobene fremde Prozedurzeilen sind keine Signaturänderung. Änderungen an
Quelltabellen oder Modulreihenfolge werden konservativ neu geparst. Der bestehende
Linker baut sämtliche globalen Tabellen aus unverknüpften Produkten neu auf und
prüft COMMON-Kompatibilität. Forms-Anfangswerte werden beim Link frisch eingesetzt.

Erfolge und Diagnosen gehören zu Projektrevision, expandierten Quellen und Forms.
`current_compilation` und `current_diagnostics` geben nur einen dazu passenden
Stand zurück; ein Fehler macht keinen früheren Erfolg aktuell. Geöffnete
Include-Puffer bleiben maßgeblich gegenüber externen Dateiänderungen. Noch nicht
geöffnete Includes werden erneut vom Loader gelesen und verglichen. Start und
Fortsetzen der VM verwenden diese Schnittstelle.

Release-Messungen und Aufruf stehen in [tbvm-design.md](tbvm-design.md).

Die Ausführungstests liegen in `crates/tb-ide/tests/execution.rs` und
`crates/tb-vm/tests/cooperative.rs`. Zusätzlich prüft
`cargo build -p tb-ide && python3 tests/support/ide-execution-pty.py` unter Unix
in einem unsichtbaren PTY die echten Shell-/Terminalübergaben und das Fortsetzen
nach STOP. Das Skript verwendet ausschließlich temporäre Projekte.


## Formulare gestalten

File → New Form öffnet ein neues FRM-Dokument mit 40×15 Zellen. Toolbox
links und Tools-Menü verwenden dieselben Klassenmetadaten: auch Datei-,
Verzeichnis- und Laufwerkslisten, Timer sowie VSpin/HSpin sind enthalten.
Doppelklick auf einen Toolboxeintrag platziert einen gültigen Standard im
gewählten Container (sonst auf der Form); mit Tastatur: Window → Toolbox,
Pfeile, Enter. Ein einfacher Klick oder Tools wählt das Werkzeug zum
Aufziehen auf der Designfläche. Esc beendet die Werkzeugwahl.

Die Vorschau verwendet FormsModel und TextScreen, führt aber keinen
Ereigniscode und keine Timer aus. Timer erscheinen als `[T]`-Marken.
Klicken wählt auch deaktivierte/unsichtbare Controls aus, Ctrl+Klick bildet
Mehrfachauswahlen. Tab/Shift+Tab folgt TabIndex. Drag verschiebt, die acht
Handles skalieren. Pfeile bewegen um eine, Ctrl+Pfeile um fünf Zellen;
Shift+Pfeile ändern die Größe (mit Ctrl ebenfalls fünf). View → Grid Lines
schaltet das Raster. Koordinaten sind relativ zum tatsächlichen Container.
Unzulässige Größen/Positionen werden vor der gesamten Änderung abgewiesen.

Oben wechseln F10 und F11 zwischen Properties Bar und Menü. Klicken auf
die Property-Auswahl öffnet die Klassenproperties; Bild auf/ab blättert
sie auf der Designfläche. F2 fokussiert Value, Ctrl+A ersetzt den Wert,
Enter übernimmt und Esc verwirft die Eingabe. Der rechte Bereich zeigt
Position und Größe auch bei langen Namen/Werten. Boolean-Werte sind
`true`/`false` beziehungsweise `-1`/`0`. Typen, Metadatenbereiche und
Laufzeitregeln werden geprüft; schreibgeschützte Properties bleiben erhalten.
Spin.Style wählt 0 (vertikal, 1×2) oder 1 (horizontal, 2×1); Width/Height
sind bei Spin schreibgeschützt. Explizites Index=0 erzeugt ein Control-Array.

Cut/Copy/Paste/Clear und Undo wirken im Designer auf Controls; die
Textzwischenablage des Editors bleibt getrennt. Container nehmen ihre
Kinder mit. Paste verlangt einen Container und vergibt freie Namen,
wobei die Arraygruppen und expliziten Indizes erhalten bleiben. Eine
Mehrfachaktion ist genau eine Undo-Einheit. Nach Clear/Cut weist ein Dialog
auf erhaltenen, nun ungebundenen Code hin. Code wird nicht gelöscht.

CtlName/FormName ändern auch gebundene Codeverweise und Ereignisnamen
in betroffenen Projektdateien und Includes. Kommentare, Strings und
unabhängige Variablen bleiben erhalten. Beide Projektstände werden
übersetzt und ihre Objektbindungen verglichen. Konflikte oder mehrdeutige
Include-Verweise verhindern die gesamte Änderung. Undo aus einer beteiligten
Datei nimmt sie überall zurück; spätere Änderungen in einer anderen
beteiligten Datei müssen zuerst rückgängig gemacht werden.

Window → Menu Design Window zeigt die Menühierarchie. `+`/Insert fügt unter
dem gewählten Menü (sonst unter der Form) ein, Del löscht, Enter/Edit öffnet
Caption, CtlName, Tag, Index, Flags und Shortcut. `&` markiert Access-Keys,
`-` einen Separator. Leerer Index bedeutet skalar; `0` ist ein Arrayindex.
Die Pfeilbuttons beziehungsweise Ctrl+Links/Rechts ändern die Ebene,
Ctrl+Auf/Ab die Reihenfolge. Änderungen des Dialogs sind gemeinsam rücknehmbar.
Angeboten werden F1–F10 mit unterstützten Modifikatoren sowie Ctrl+Buchstaben
außer Ctrl+C, das dem Programmabbruch vorbehalten bleibt. Unbekannte Importwerte
werden nicht als gültige Shortcuts angeboten; Menütitel und Separatoren tragen
keinen Shortcut.

Window → Color Palette bietet getrennte ForeColor-/BackColor-Zeilen. Eine
Farbfläche auf Form/Control ziehen trägt diese Farbe auf. Enter öffnet
zusätzlich den Dialog zum gemeinsamen Auftragen beider Farben auf die
Auswahl oder ausdrücklich die Form. Window bietet außerdem Toolbox, Help
und die Formliste; der Help-Inhalt folgt in Change 07.

F12/Edit → Event Procedures wählt Objekt und erlaubtes Ereignis. Eine
vorhandene gebundene Prozedur wird geöffnet; sonst entsteht ein New-Sub-Rumpf
mit den bestehenden Eventtypen, BYREF-Parametern und gegebenenfalls führendem
`Index AS INTEGER`. DEFtype aus Includes bleibt wirksam. Zweiter Aufruf
öffnet dieselbe Prozedur. Shift+F12/View → Form führt zum zugehörigen
Dokument und Control zurück; View → Code behält die Codeposition. Struktur
und Code bleiben dabei ungespeichert im gemeinsamen Dokument.

Save File/As/Project verwendet den vorhandenen FRM-Writer. Dieser lässt
überflüssige Defaultwerte aus, erhält aber explizites Index=0. Binärimporte
benötigen weiter ein separates Textziel. Die Designer-Tests prüfen alle
Klassen, Geometrie, Properties, Maus/Tastatur, Transaktionen, Ereignisse und
Speicher-Roundtrips. Der CLI-Integrationstest erzeugt eine FRM über dieselben
Designeraktionen und übersetzt sie mit dem echten `tbc build`-Prozess.
