Session D-FOND
VFP 6 Foundation Classes in eigenen Anwendungen nutzen
Andreas Flohr
INDISOFT GmbH - Hannover
Einführung
Visual FoxPro 6.0 wird mit einer Sammlung von Klassenbibliotheken, die Foundation
Classes genannt werden, ausgeliefert. Dabei handelt es sich um einen Sammlung
von über 100 Klassen, die auf den VFP-Basisklassen aufsetzen. Alle diese
Klassen sind mit VFP-Code geschrieben und erweitern die Standardfunktionalität
der VFP-Basisklassen erheblich.
Die Visual FoxPro Foundation Classes ermöglichen dem Entwickler, seine
Anwendungen fast oder ganz ohne Programmierung mit zusätzlicher Funktionalität
zu versehen. Weiterhin enthalten die Foundation Classes generische Klassen,
welche immmer wiederkehrende Aufgaben übernehmen, so daß man nicht
bei jeder Anwendung das Rad wieder neu erfinden muß.
Die Foundation Classes bieten dem Entwickler z.B. Unterstützung in der
Anwendungsentwicklung in den Bereichen:
- Gebräuchliche Datenbankentwicklungstools und -strukturen
- Schnelle, erweiterbare generische Komponenten
- Komponenten zur Verbesserung und einfachen Entwicklung von Web-Seiten
- Nutzung von System-API-Funktionen
- Funktionen für ein professionelles Erscheinungsbild einer Anwendung
Die Foundation Classes befinden sich im Unterverzeichnis \Ffc. Sie können
frei mit den von Ihnen erstellten Anwendungen vertrieben werden.
Struktur der Foundation Classes
Sicherlich ist Ihnen bekannt, daß man bei der Entwicklung von Anwendungen
nicht direkt die Basisklassen von Visual FoxPro nutzen sollte. Dazu ist es erforderlich,
zuerst in einer eigenen Klassenbibliothek eine Ableitung aller Basisklassen
abzulegen.
Selbstverständlich ist dieses Konzept auch bei den Foundation Classes
angewandt worden. In der Klassenbibliothek _base.vcx befindet sich eine Ableitung
aller VFP-Basisklassen, und (fast) alle anderen Foundation Classes sind von
den Klassen der Klassenbibliothek _base.vcx abgeleietet.
Man kann sich die abgeleiteten Basisklassen in der Komponentengalerie ansehen.
Im Katalog "My Base Classes" werden alle Klassen der Klassenbibliothek
_base.vcx angezeigt. Durch einen Doppelklick auf eine der angezeigten Klassen
kann diese im Klassendesigner zur Änderung geöffnet werden.
Basierend auf diesen Klassen befinden sich im Katalog "Visual FoxPro Catalog"
und dort im Ordner Classes alle anderen Foundation Classes. Dies Klassen sind
in weiteren Unterordnern nach Funktionsgruppen sortiert, so daß Sie eine
Klasse, welche Sie für eine bestimmte Funktionalität benötigen,
sehr schnell finden können: In der Abbildung auf der nächsten Seite
sehen Sie z.B. den geöffneten Unterordner Dialogs, in dem sich die folgenden
generischen Formularklassen befinden:
- About Dialog Ein einfaches About-Formular für Ihre Anwendungen
- Password Dialog Ein einfaches Login-Formular für Ihre Anwendungen
- Splash Screen Ein einfacher Eröffnungsbildschirm für Ihre Anwendungen
- Thermometer Fortschrittsanzeige während der Ausführung einer Aktion
- Keywords Anzeige und Auswahl einer Liste von Schlüsselwörtern
- Item Locator Ein Formular zum Suchen und Auswählen von Dateien
Bevor Sie Ihrer Anwendung eine Foundation Class hinzufügen können,
müssen Sie die Basisklasse einer Foundation Class kennen. Bestimmte Foundation
Classes können nur als visuelle Objekte in Formularen verwendet werden,
wohingegen andere nicht-visuell sind und programmgesteuert aufgerufen werden
können, ohne zuvor in einem Formular plaziert werden zu müssen. Sie
können in der Komponentengalerie für jede Foundation Class ein Kontextmenü
mit der rechten Maustaste aufzurufen. Wählen Sie aus dem Kontextmenü
Eigenschaften, und klicken Sie dann auf die Registerkarte Klassen, um die Basisklasse
anzuzeigen.
Visuelle und Nicht-Visuelle Foundation Classes
Man unterscheidet bei den Foundation Classes grundsätzlich zwischen visuellen
und nicht-visuellen Klassen.
Die visuellen Foundation Classes können häufig ohne zusätzliche
Programmierung verwendet werden. Sie können diese Klassen entweder auf
ein Formular ziehen, oder direkt eine Form aus dieser Klasse erzeugen. Die Visuellen
Foundation Classes stellen z.B. Dialogfunktionalität für Ihre Formulare,
sowie um zusätzliche Funktionalität erweiterte Steuerelemente zur
Verfügung.
Die nicht visuellen Foundation Classes basieren oftmals auf der Klasse _custom.
Zum Einsatz dieser Klassen in Ihre Anwendung ist zusätzlicher Programmcode
erforderlich. Diese nicht-visuellen Foundation Classes führen häufig
allgemeine Aufgaben wie z.B. das Überprüfen von Informationen in der
Windows-Registrierung, die Behandlung von Umgebungseinstellungen oder die Handhabung
von Anwendungsfehlern aus.
Sie können diese nicht-visuellen Klassen in ein Formular ziehen, aber
damit diese in Ihrer Anwendung arbeiten, ist etwas zusätzliche Arbeit erforderlich.
Bei einigen Klassen wird ein Steuerelement-Assistent gestartet, wenn Sie eine
Foundation Class in ein Formular ziehen, in dem Sie zur Eingabe von Eigenschaften
und Methoden aufgefordert werden.
Verwenden der Foundation Classes in eigenen Anwendungen
Die nachfolgenden Beispiele zeigen auf, wie man die visuellen und nicht-visuellen
Foundation Classes in den eigenen Anwendungen verwenden kann.
Beispiel: Foundation Class _splash (_dialogs.vcx)
Die visuelle Foundation Class _splash kann in Ihrer Anwendung beim Anwendungsstart
einen Einführungsbildschirm ausgeben, der eine einstellbare Zeit angezeigt
und dann automatisch geschlossen wird. Die Einbindung in Ihre Anwendung wird
wie folgt vorgenommen:
- Ziehen Sie die Foundation Class "Splash Screen" aus der Komponentengalerie
(Ordner Classes\Dialogs) in Ihr Projektfenster. Sie haben jetzt folgende Möglichkeiten:
- Die Klasse dem Projekt hinzufügen
- Eine Ableitung der Klasse zu erstellen
- Ein Formular, basierend auf dieser Klasse zu erstellen
Erstellen Sie ein Formular mit dem Namen Mysplash.scx, welches auf dieser Klasse
basiert, damit Sie keine Anpassungen an der Klasse vornehmen müssen.
- Füllen Sie die Formulareigenschaft Picture mit einem für Ihre
Anwendung passenden Bitmap, um ein Bild auf dem Formular auszugeben. Ändern
Sie die Caption-Eigenschaft des im Formular befindlichen Labelobjektes auf
den Namen Ihrer Anwendung. Optional können Sie noch die Anzahl der Sekunden,
die dieses Formular angezeigt wird, in der Eigenschaft nDuration verändern.
Der Defaultwert ist 3 Sekunden. Starten Sie dann das Formular, um sich das
Ergebnis anzusehen:
- Jetzt müssen Sie nur noch dieses Formular innerhalb Ihrer Anwendung
aufrufen. Dieses Formular sollte im Startprogramm Ihrer Anwendung als erstes
Formular und noch vor dem READ EVENTS Befehl geschehen.
DO FORM MySplash

Beispiel: Foundation Class _aboutbox (_dialogs.vcx)
Die visuelle Foundation Class _aboutbox ist ein Info-Formular, basierend auf
der Klasse _form, welches bei den neutigen Anwendungen über den Menüpunkt
Hilfe/Info erreichbar sein sollte. Typischerweise werden in einem solchem Formular
Informationen, wie z.B. Versionsnummer, Copyright, Lizenzsierter User u.ä.
angezeigt. Zusätzlich ist ein Button für den Auruf des Programmes
msinfo.exe vorgesehen. Die Einbindung in Ihre Anwendung wird wie folgt vorgenommen:
- Ziehen Sie die Foundation Class "About Dialog" aus der Komponentengalerie
(Ordner Classes\Dialogs) in Ihr Projektfenster. Sie haben jetzt folgende Möglichkeiten:
- Die Klasse dem Projekt hinzufügen
- Eine Ableitung der Klasse zu erstellen
- Ein Formular, basierend auf dieser Klasse zu erstellen
Erstellen Sie ein Formular mit dem Namen Myinfo.scx, welches auf dieser Klasse
basiert, damit Sie keine Anpassungen an der Klasse vornehmen müssen.
- Füllen Sie die Picture-Eigenschaft des Imageobjektes mit einem für
Ihre Anwendung passenden Bitmap. Ändern Sie den Caption-Eigenschaft der
im Formular befindlichen Labelobjekte auf die passenden Werte für Ihre
Anwendung ab. Starten Sie dann das Formular, um sich das Ergebnis anzusehen:
- Jetzt müssen Sie nur noch dieses Formular innerhalb Ihrer Anwendung
aufrufen. Dazu fügen Sie mit dem Menüdesigner einen Menüpunkt
Info im Menü Hilfe ein. Als auszuführenden Befehl geben Sie ein:
DO FORM MyInfo
Beispiel: Foundation Class _resizable (_base.vcx)
Die nicht-visuelle Foundation Class _resizable ist ein Custom-Objekt, welches
beim Resize eines Formulars dafür sorgt, daß sich alle sichtbaren
im Formular befindlichen Objekte in der Größe und Position an das
Formular anpassen. Damit geben Sie dem Benutzer Ihrer Anwendung die Möglichkeit,
sich die Größe seiner Formulare individuell, auch im Bezug auf die
Bildschirmauflösung, einzustellen. Die Einbindung in Ihre Anwendung wird
wie folgt vorgenommen:
- Ziehen Sie die Foundation Class "Resize Object" aus der Komponentengalerie
(Ordner Classes\User Controls ) in Ihre Form. Damit wird ein Unterobjekt ihres
Formulars mit dem Namen _resizable1 erstellt.
- Jetzt müssen Sie Ihrem Formular programmatisch Code hinzufügen,
damit die Resize-Funktionalität auch ausgeführt werden kann. In
der Visual FoxPro Hilfe steht dazu folgender Satz:
"Wenn Sie die Klasse zu einem Formular hinzufügen, müssen Sie
die Methode AdjustControls des Resize-Ereignisses der Steuerelemente des Formulars
spezifizieren."
Was will uns der Autor dieses Satzes damit sagen ??
Das Resize-Ereignis eines Formulars tritt ein, wenn Sie am Rand des Formulars
anfassen und dann mit gedrückter Maustaste die Maus verschieben und die
Formulareigenschaft Borderstyle = 3 (Sizable) ist. Wenn wir jetzt Code in das
Resize-Event des Formulars einfügen, wird dieser beim Auftreten des Ereignisses
ausgeführt. Die Foundation Class _resizable besitzt eine Methode AdjustControls,
die für die Größenanpassung der Steuerelemente des Formulars
zuständig ist. Also rufen wir diese Methode im Resize-Event des Formulars
auf:
Thisform._resizable1.AdjustControls()
Das ist alles. Starten Sie ihr Formular und ändern Sie die Größe.
Alternative
Sie können eine nicht-visuelle Foundation Class in Ihrer Anwendung auch
verwenden, ohne diese in ein Formular zu ziehen. Dazu müssen Sie allerdings
die Klasse in das zur Erstellung Ihrer Anwendung verwendete Projekt einschließen.
Der folgende Code illustriert, wie Sie die Klasse _resizable benutzen können,
ohne daß sie in ein Formular gezogen wurde.
*-- Im Init()-Event der Form tragen Sie folgendes ein:
DODEFAULT() && Den Code der Parentklasse ausführen
thisform.AddObject("oResize","_resizable")
*-- Im Resize()-Event der Form tragen Sie folgendes ein:
Thisform.oResize.AdjustControls()
Anmerkung: Wenn Sie eine nicht-visuelle Foundation Class verwenden,
müssen sie wissen, wie und wo die Klasse in Ihrer Anwendung verwendet
wird, damit der Gültigkeitsbereich richtig gewählt wird. Verwendet
nur ein einziges Formular die Klasse, so können Sie diese einfach in
das Formular ziehen. Wird die Klasse jedoch von vielen Formularen oder gar
global in der Anwendung verwendet, so sollte die Foundation Class einen
globalen Gültigkeitsbereich in der Anwendung haben, so daß in
der ganzen Anwendung auf sie zugegriffen werden kann. Ein globaler Gültigkeitsbereich
könnte auch zur Erhöhung der Leistung beitragen. |
Änderungen/Erweiterungen der Foundation Classes
Sie können die Visual FoxPro Foundation Classes verändern oder erweitern,
damit diese den Bedürfnissen Ihrer Anwendungen gerecht werden. Führen
Sie dies Änderungen bzw. Erweiterungen jedoch NIEMALS in den Foundation
Classes selbst durch, da diese mit Sicherheit in zukünftigen Version aktualisiert
werden.
Szenario
Nehmen wir einmal an, Sie möchten alle Ihre Formulare mit der Foundation
Class _resizable versehen (siehe Beispiel) und Ihre Formulare wären alle
von der Foundation Class _form aus _base.vcx abgeleitet.
Jetzt könnten Sie in der Foundation Class _form den entsprechenden Code
einfügen und alle von dieser Klasse abgeleiteten Formulare hätten
die gewünschte Funktionalität. Wenn Sie jedoch dann die Visual FoxPro
Foundation Classes mit einer neuen Version aktualisieren, sind alle Ihre gemachten
Änderungen an diesen Klassen verloren !
Vorgehensweise
Wenn Sie mit der Entwicklung von Anwendungen beginnen, welche die Foundation
Classes nutzen, sollten Sie nachfolgende Vorgehensweise wählen:
- Erstellen Sie von allen Visual FoxPro Basisklassen Ableitungen in eine eigene
benutzerdefinierte Klassenbibliothek, z.B. mit dem Namen MyBase.vcx. (Sofern
Sie nicht bereits eine solche Klassenbibliothek besitzen.) In dieser Klassenbibliothek
können Sie dann die Klassen mit zusätzlicher Funktionalität
versehen, die für Ihre Anwendungen erforderlich sind.
- Definieren Sie die Foundation Classes in _base.vcx um, so daß diese
von Ihren eigenen Klassen aus der Klassenbibliothek MyBase.vcx abgeleitet
sind. Sie können dies im Klassenkatalog über den Button "Neu
definieren" durchführen. Dadurch erben auch alle Foundation Classes,
die sich nicht in der _base.vcx befinden automatisch von Ihren Basisklassen.
- Jetzt können Sie in Ihrer Anwendung die Visual FoxPro Foundation Classes
nutzen und haben zusätzlich alle Ihre Änderungen und Erweiterungen
im Zugriff. Bei einer neuen Version der Foundation Classes sind Ihre Änderungen
bzw. Erweiterungen nicht betroffen und können sofort weiter verwendet
werden.
Hinweis: In den Foundation Classes in der Klassenbibliothek _base.vcx
befindet sich für alle Klassen Programmcode in den Standardmethoden
Destroy(),Init(),Release() und Error(). Leider hat man dort den Aufruf von
DODEFAULT() vergessen, so daß ein eventueller zusätzlicher Code,
der sich in Ihren Basisklassen in den gleichen Methoden befindet, nicht
ausgeführt wird. |
Zusammenfassung
Die neuen Visual FoxPro Foundation Classes bieten eine Menge neuer Funktionalitäten
und können dem Entwickler bei der Anwendungserstellung einiges an Arbeit
abnehmen. Vor dem Einsatz einer Foundation Class ist allerdings immer ein Blick
in die Hilfe empfehlenswert, dort wird erklärt, welche Eigenschaften gefüllt
werden müssen, und welche Methoden evtl. auszuführen sind, um das
gewünschte Verhalten zu erreichen. Eine gute Hilfe ist auch die Beispielanwendung
Solutions.App, in der die weitergehenden Möglichkeiten einiger Foundation
Classes gezeigt und beschrieben werden.
Die Foundation Classes sind mit Sicherheit ein Schritt in die richtige Richtung,
trotzdem darf nicht vergessen werden, daß es sich bei den Foundation Classes
um eine Sammlung von Klassen handelt, die nicht mit einem kommerziellen Framework
verglichen werden kann (und auch nicht soll.)
Auf der CD-ROM zur Devcon finden Sie eine Beispielanwendung, welche die Nutzung
von weiteren Foundation Classes zeigt.
Für Fragen stehe ich Ihnen jederzeit unter
Flohr@indisoftware.de
zur Verfügung. Sie erreichen mich auch im dFPUG-Forum auf Compuserve unter
CIS 106205,3221 oder auf unserer Website
http://www.indisoftware.de.
|