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
Aufgaben der 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.
Der Aufruf der Builders
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.
Registrierung der Builder
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 registrierten 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.
Verschiedene Formen von Buildern
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.
Punkte, die bei der Selbstprogrammierung beachtet werden müssen
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.
Erschwernisse:
Backup der vorherigen Werte
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.
Wiederaufrufbarkeit
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.
Fehlerbehandlung
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.
Designtime- Runtime
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.
Schreiben von Methoden
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.
Mehrere Controls bearbeiten
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.
RAD
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.
Auslesen von Metadaten
Builders bieten eine hervorragende Möglichkeit, Daten aus dem Datenbankcontainer oder einem Case-Tool auszulesen.
Umsetzen von Standards und Konventionen
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.
Unterstützung von mehreren Benutzern
Builder können an verschiedene Benutzeranforderungen angepaßt werden, um spezielle Bedürfnisse oder Vorgehensweisen verschiedener an einem Projekt beteiligter Entwickler zu berücksichtigen.
Einhakpunkt für Drittanbieter
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.