Session D-WIZZ

Builders in
Visual FoxPro 3.0

Alf Borrmann
Wizards & Builders GmbH


ÜBERSICHT


Einführung

Mit Visual FoxPro 3.0 werden für alle Bereiche der Datenbankentwicklung und -bedienung Editoren mitgeliefert. Diese ermöglichen es, Formulare, Reports und komplette Datenbanken zu Erstellen bzw. zu bearbeiten. Die Editoren sind dafür vorgesehen, alle Eigenschaften des jeweils zu bearbeitenden Moduls einstellen zu können und sind demnach entsprechend umfangreich.

Zusätzlich zu den Editoren gibt es - wie in anderen Windows-Programmen auch - Hilfsprogramme, die die Routinearbeiten erledigen. Bei Microsoft heißen diese Hilfsprogramme eingedeutscht „Assistenten" (englischer Originalname ist „Wizards").

Ein neues Hilfsmittel für den Entwickler sind in Visual FoxPro die „Steuerelementasistenten" (engl. „Builders"). Diese Hilfsprogramme gibt es nur inVFP. Sie sind eine sehr anschauliche Verkörperung des VFP-Objektmodells und lassen sich leicht selbst programmieren.


Builders

Anders als die Wizards, die dazu vorgesehen sind, einen der üblichen Arbeitsgänge einmal komplett zu durchlaufen und damit ein fertiges Produkt zu erstellen, dienen die Builders dazu, bereits vorhandene Objekte zu bearbeiten. Die Builders lassen sich zu jedem Zeitpunkt des Designprozesses erneut aufrufen, um Manipulationen an den Objekten durchzuführen.

Die Builders sind in gewisser Weise die Fortführung von GenscrnX mit anderen Mitteln. Diese anderen Mittel bestehen hauptsächlich darin, daß die Builders eine eigene Oberfläche haben: sie lassen sich mit einer eigenen Eingabemaske versehen. Das ist möglich, weil in Visual FoxPro kein Programmcode mehr generiert wird und somit die Manipulation der .SCX-Datei nicht während des Generierungslaufs erfolgen muß.

Die Builders können zunächst dazu dienen, sich einen Überblick über die anfangs überbordende Anzahl von Properties zu verschaffen.

Die Steuerelementassistenten können auf folgende Arten aufgerufen werden:

über das Symbol für den Formular-Steuerelementassistent in der Formularwerkzeugleiste: hiermit wird der AutoFormat-Builder aufgerufen.Kontextmenü (rechte Maustaste)

Symbol Builder lock in der Symbolleiste Form Controls

 

Schaltfläche Builder im Eigenschaftsfenster

Symbol Form Builder in der Symbolleiste Formulardesigner

 

Die ersten drei Möglichkeiten sind für alle Objekte nutzbar, die letzte ist nur für Formulare vorgesehen.

Für folgende Basisklassen werden mit Visual FoxPro zur Zeit Builders mitgeliefert:
Standardbuilder in VFP
VFP-Standardklasse modifizierte Properties
OptionGroup (Optionsfeldgruppe) Anzahl der Optionen
Standard- oder graphisches Layout
horizontale oder vertikale Anordnung
Abstände
Stil des Rahmens
Datenquelle
ListBox (Listenfeld) Quelle für Listenelemente (Property RowSourceType)
3D-Effekt an/aus
Größe auf dem Bildschirm
inkrementelles Suchen an/aus
Layout der Spalten
Quelle für den Rückgabewert
Ort der Datenspeicherung
Grid (Datenblatt) Quelle der Grid-Elemente
Anzeigestil
Spaltenlayout
Spaltenkontrolle
Relation für Quelldaten
Form (Formular) Anzeigestil
horizontales oder vertikales Layout
Option für mehrere Spalten
Datenquelle
ComboBox (Kombinationsfeld) Quelle für Listenelemente (Property RowSourceType)
3D-Effekt an/aus
Combo- oder ListBox
inkrementelles Suchen an/aus
Layout der Spalten
Quelle für den Rückgabewert
Ort der Datenspeicherung
CommandGroup (Befehlsschaltfläche) Anzahl Buttons
Aufschriften
Graphiken für Buttons
horizontales oder vertikales Layout
Abstände
Stil der Umrahmung
AutoFormat (Formatierung des Formulars) Umrahmung
Farben
Zeichensätze
Layout
3D-Effekte an/aus

 

Es lassen sich zu jeder Klasse Builders hinzufügen, auch zu selbst definierten Klassen. Der Aufruf des zu einer Klasse zugehörigen Builders geschieht wie bei den Wizards mit Hilfe der Systemvariablen (_BUILDER). Sie enthält den Namen und den Pfad des Hauptprogramms für die Builder.

Die Standardapplikation ist BUILDER.APP im Verzeichnis VFP (_BUILDER = „C:\VFP\BUILDER.APP"). Bei Aufruf des Builders über die o.a. Wege wird dieses Programm gestartet. Es erledigt einige Statussicherungen und versucht dann, das zum aktuell gewählten Objekt passende Builderprogramm zu finden.

Die eigentlichen Builderprogramme zu den Objekten müssen in der Registrierungstabelle abgelegt sein. Dies ist standardmäßig BUILDER.DBF im Verzeichnis VFP\WIZARDS (der Zugriff auf diese Tabelle ist in BUILDER.APP fest codiert und kann nicht auf andere Tabellen umdirigiert werden). Diese Tabelle enthält die vorhandenen Steuerelementassistenten und ist die sogenannte Registriertabelle. Registriertabelle deshalb, weil hier auch zusätzliche Builders eingetragen (registriert) werden können. Will man dem System eigene Builders hinzufügen, müssen diese in der Tabelle registriert werden:

 
Aufbau von BUILDER.DBF
Feldname Typ Beschreibung
NAME (C(45)) Name des Builders, der in der Auswahlliste angezeigt wird.
DESCRIPT (M) Beschreibung des Builders
BITMAP (M) nicht benötigt für Builder
TYPE (C(20)) Typ des Assistenten
PROGRAM (M) Name des spezifischen Programms (.APP)
CLASSLIB (M) Klassenbibliothek, die den Builder enthält
CLASSNAME (M) Klassenname des Builders.
PARMS (M) Übergabeparameter an den Builder in Textform.

 

Wenn die Standard-BUILDER.APP, die mit Visual FoxPro ausgeliefert wird, aufgerufen wird, sieht das Programm zunächst nach, ob der Wert im Class-Property des aktuellen Objektes in BUILDER.TYPE vorkommt. Ist dies nicht der Fall, wird nach dem Wert im BaseClass-Property gesucht. Sind für eine Klasse mehrere Builder registriert, wird eine Auswahlliste mit den Texten, die in BUILDER.NAME angegeben sind, angeboten. In dieser Auswahlliste erscheint DESCRIPT eingegebene Text im Bemerkungsfeld unter der Liste.

 

Der Builder kann in zwei unterschiedlichen Formen vorliegen:

Das Standardprogramm BUILDER.APP akzeptiert neun Parameter.

Der erste an (_BUILDER) übergebene Parameter ist die Referenz auf das aktuell bearbeitete Objekt. Dieser Parameter kann kein Array sein, so daß es nicht möglich ist, mehrere Objekte zu wählen und diese dann alle zusammen bzw. nacheinander im Builder zu bearbeiten. Statt dessen wird eine Referenz auf das Objekt übergeben, von dem FoxPro annimmt, daß es das erste in der Gruppe ist.

Als zweiter Parameter wird ein String übergeben, der enthält, von wo aus der Aufruf des Builders erfolgte:

Dieser zweite Parameter erlaubt das Erstellen von kontextsensitiven Assistenten, die sich, je nachdem, ob ein Objekt neu erstellt wurde oder ein vorhandenes bearbeitet werden soll, unterschiedlich verhalten. Diese Parameter werden nicht an die Programme übergeben, die von BUILDER.APP aufgerufen werden!


Builder selbst entwickeln

Nachdem der das Assistentenprogramm von BUILDER.APP aufgerufen wurde, muß es zunächst einmal feststellen, welche Objekte aktuell gewählt wurden. Dazu gibt es die in Visual FoxPro neue Funktion ‘ASelObj( <Array>)’. Diese Funktion erzeugt das als Parameter übergebene Array und füllt es mit den Referenzen auf die momentan gewählten Objekte. Für jedes Objekt wird ein Arrayelement angelegt. Das Array enthält also so viele Elemente, wie Objekte des Formulars aktuell gewählt sind. Die Funktion ASelObj( ) akzeptiert einen zusätzlichen zweiten Parameter. Dieser kann die Werte 1 oder 2 (numerisch) haben. Bei Aufruf von ‘ASelObj( <Array>, 1)’ wird eine Referenz auf das Objekt zurückgegeben, auf dem sich das aktuell gewählte befindet. Hat der zweite Parameter den Wert 2, wird eine Referenz auf das DataEnvironment-Objekt des Formulars erzeugt.

Auf die Properties des gewählten Objektes läßt sich mit der Syntax ‘<Arrayname>[ <Element-nummer>].<Eigenschaftsname>‘ referenzieren.

Die mit Visual FoxPro ausgelieferte BUILDER.APP versteckt das Property-Fenster, um Platz auf dem Bildschirm zu sparen und weil die mitgelieferten Builders ohnehin MODAL sind. Trotzdem werden die Werte der Eigenschaften natürlich dauerhaft verändert. Dies wird nach verlassen des Builders sichtbar, wenn das Eigenschaftsfenster wieder erscheint.

Visual FoxPro erlaubt es, auf Wunsch jeglichen Code während der Arbeit mit dem Form- oder Klassendesigner ablaufen zu lassen. Daraus ergibt sich ein weiter Bereich von Wirkungen, die viele Möglichkeiten bieten, aber auch Probleme bereiten können.

Die Einstellungen an den zu manipulierenden Objekten, die der Builder verändert, sollten zwischengespeichert werden, um die Bearbeitung im interaktiven Modus jederzeit per Abbruchbutton beenden zu können.

In der Regel werden Builders beliebig oft für ein Objekt aufrufbar sein. Die Einstellungen der Eigenschaften können zwischen den Aufrufen jedoch innerhalb des Eigenschaftsfensters geändert worden sein. Diese Änderungen sollten per Code aufgefangen und auf der Oberfläche des Builders dargestellt werden.

Jedes Steuerelement (Control) hat die Möglichkeit, im Fehlerfall eine eigene Fehlerroutine aufzurufen. Der Builder und seine Steuerelemente sollte Prozeduren zur Behandlung von Fehlern, die bei der Bearbeitung von Objekten entstehen können, beinhalten.

Im Property Sheet können zu vielen Eigenschaften Einträge vorgenommen werden, die aus einem Ausdruck bestehen Das Property Sheet selbst bietet je nach angewählter Eigenschaft das Erstellen eines solchen Ausdrucks an. Will man die Eigenschaften von außerhalb verändern, ist eine spezielle Vorgehensweise nötig, um den Typ des Rückgabewertes des eingesetzten Ausdrucks sicherzustellen. Hierzu sind die neuen Funktionen ReadExpression( ) und WriteExpression( ) vorgesehen. Diese Funktionen sind nur in der Entwurfsphase verfügbar.

Für das Erstellen von Methoden für die Steuerelemente gibt es die unterstützenden Funktionen ReadMethod( ) und WriteMethod( ). Auch diese Funktionen können nicht zur Laufzeit eingesetzt werden.

Wenn beim Aufruf eines Builders mehrere Objekte gewählt sind, ist es ggf. gewünscht, einzelne Eigenschaften (z.B. die Farbe) für alle Elemente in der gleichen Weise zu verändern. Im Builder muß für diesen Fall eine Schleife vorhanden sein, die alle im mit ASelObj( ) erzeugten Array gespeicherten Objekte bearbeitet.

Mit den Buildern hat man eine Hilfe, die es ermöglicht, vor den Augen des Kunden einen Prototypen aus vorbereiteten Standardkomponenten zu entwickeln und anzupassen. Indem den Buildern für die selbst definierten Klassen einige automatisch ablaufende Einstellungsarbeiten übertragen werden können, kann für jedes einzufügende Control ein Dialog stattfinden, der die langwierigen Arbeiten im Eigenschaftsfenster umgeht.

Builders bieten eine hervorragende Möglichkeit, Daten aus dem Datenbankcontainer oder einem Case-Tool auszulesen.

Builders müssen nicht interaktiv sein. Sie lassen sich z.B. auch aufrufen, um die gewählten Objekte mit einem einheitlichen Stil zu versehen. Builder können auch benutzt werden, um die Methoden, die in den Objekten gespeichert sind zu formatieren und die Einhaltung von Namenskonventionen sicherzustellen. Auch firmenspezifische Standards können mit Buildern sichergestellt werden.

Builder können an verschiedene Benutzeranforderungen angepaßt werden, um spezielle Bedürfnisse oder Vorgehensweisen verschiedener an einem Projekt beteiligter Entwickler zu berücksichtigen.

Builders sind eine gute Möglichkeit für Drittanbieter, den Einsatz ihrer Produkte für den Entwickler (bzw. den Poweruser) möglichst einfach und effizient zu machen.