Bei genauerer Betrachtung der Ausdrücke, die an den Comboboxen eingetragen werden, fällt auf, dass diese
1) immer länger werden, je tiefer die Objektstruktur geschachtelt ist.
2) durch Spezialisierungen, so genannte Typecasts gekennzeichnet sind, die eine einheitliche Formulierung der Ausdrücke erschweren.
3) eine Maske für viele Produkte sehr unübersichtlich wäre
Daher unterstützt TCE das Konzept der eingebetteten Formulare, auch Subformulare genannt.
Die Hauptmaske wird dafür in mehrere Bereiche gegliedert:
1) Produktübergreifender Bereich (für Elemente außerhalb von Produkt)
2) Produktbereich (für Elemente des Objekts Produkt)
3) Produktbestandteil-Bereich (für Kindobjekte des Objekts Produkt)
In jedem Objekt muss daher eine Maske für die Benutzeroberfläche definiert werden:
Wir definieren in der Klasse Produkte zwei Formulare Produkteinstellungen und Produktformular und in der Klasse Bestandteile ein Formular mit dem Namen Produktformular.
Unter den Typbibliotheken der Wissensbasis schalten wir die Typbibliotheken TCE Panel Controls und TCE Register Controls ein.
Dann gliedern wir die Hauptmaske. Dabei werden nicht mehr benötigte Elemente entfernt.
Es gibt nun neben der Combobox Produkt (die nun eine Caption und CaptionWidth von 1600 twips besitzt), ein Subformular für die Produkteinstellungen und ein Subformular für das Produktformular des Produkt-Objektes.
Subformulare verfügen über zwei Steuereigenschaften, das Objekt (Value) und der Name des Formulars (Formular).
Das Subformular zeigt somit die Maske Produkteinstellungen des jeweils gewählten Produktobjektes an.
Analog wird das Subformular für die Produktdaten eingestellt.
Wie sehen nun die Formulare für Produkteinstellungen und Produktdaten aus?
Die Ländereinstellungen sind weiterhin für alle Produkte gültig. Also definiert man das Formular Produkteinstellungen in Produkte und es vererbt sich in alle Klassen, die darunter liegen.
Jedoch ändert sich der Ausdruck für die Steuereigenschaft Value. Da das Merkmal Länderausführung ja ebenfalls in Produkte definiert ist, kann direkt darauf Bezug genommen werden.
In dieser Realisierung haben wir uns für ein Register entschieden, um die vielen möglichen Objekte der Produkte skalierbar auf einem Formular anzuzeigen.
Daher wird in der Klasse Produkte der Registerrumpf festgelegt.
In der Klasse Sigma, in der die Definition der Objekte zum Sigma-Produkt vorgenommen wurde, kommen nun die Registerseiten im Register für diese Objekte hinzu.
Und die Inhalte der Register?
Die stammen aus dem Formular Produktformular in den Klassen Sigma Leuchtschirm, Sigma Aufhängung und Sigma Leuchtmittel.
Auch hier kann das Merkmal zur Anzeige der Farbe in der Combobox direkt aus der Klasse entnommen werden, in dem das Element der Maske definiert ist.
Das Ergebnis dieser Modifikation ist die Synchronisierung von Objektstruktur und Maskenstruktur.
Die gestartete Anwendung würde dann in etwa so aussehen: