Diese Session zeigt auf, wie mit der Entwicklungsumgebung Visual Extend der Firma Devigus Engineering AG auf rasche Weise Anwendungen unter Visual FoxPro 3.0b oder 5.0 erstellt werden können um dem Kunden möglichst rasch einen lauffähigen Prototypen seiner zukünftigen Anwendung vorstellen zu können. Die Session führt durch das Erstellen einer neuen Applikation, welche während der Session von Grund auf live entwickelt wird.
Die zu erstellende Applikation beinhaltet Standard Datenmanipulationsformulare, OneToMany Formulare sowie Child-Formulare, welche dynamisch mit Parent Formularen verbunden sind. Ebenfalls beschrieben wird die Erstellung von Foreign-Key-Validation und Auswahllisten, Abhandlung von Benutzer- und System-spezifischen Einstellungen, bis hin zur Auswahlliste im Child-Grid eines OneToMany Formulares. Dies alles sind Standardanforderungen einer anspruchsvollen Software, welche der Kunde beim Prototyping Verfahren bereits frühzeitig erkennen sollte!
Visual Extend stellt eine umfassende Entwicklungsumgebung für Softwareentwickler dar, die mit Microsoft Visual FoxPro 3.0b und 5.0(a) arbeiten. Visual Extend beinhaltet visuelle Assistenten, die den Softwareentwickler bei seiner täglichen Arbeit unterstützen und so die Entwicklerproduktivität drastisch steigern. Dies ohne jegliche Einbußen bezüglich Flexibilität oder Leistungsfähigkeit in Kauf nehmen zu müssen. Visual Extend macht aus Visual FoxPro ein echtes Rapid Application Development Tool, dies sowohl für Desktop- als auch für Client/Server-Datenbank-Anwendungsentwicklungen.
Visual FoxPro ist ein exzellentes Entwicklungswerkzeug. Insbesondere dank der Objektorientierung und der OLE-Technologie wird der Traum eines jeden Softwareentwicklers nach einfachster Wiederverwendung von eigenen oder fremden Softwaremodulen Wirklichkeit. Das Erstellen einer hochwertigen, massiv produktivitätssteigernden Entwicklungsumgebung stellt jedoch ein größeres Unterfangen dar, welches sich heutzutage immer weniger Softwareentwickler wirklich leisten können. Selbst wenn der Entwickler seine eigene Klassenbibliothek erstellt hat, fällt bei der täglichen Arbeit immer noch mehr als genug Arbeit an.
Visual Extend für Visual FoxPro füllt exakt diese Lücke und stellt eine hochproduktive Anwendungsentwicklungsumgebung für Visual FoxPro Softwareentwickler dar. Dank des durchdachten, modularen Gesamtdesigns kann der Softwareentwickler jederzeit selbst entscheiden, ob er die gesamte Entwicklungsphilosophie von Visual Extend verwenden will oder nur ausgewählte Teile daraus für die Erstellung seiner eigenen Anwendungen übernehmen will. Dank der Objektorientierung von Visual Extend kann der Entwickler Unterklassen aller Visual Extend Klassen erstellen, um so die Entwicklungsumgebung noch besser seinen spezifischen Bedürfnissen anzupassen.
Visual Extend ist weit mehr als nur eine Klassenbibliothek. Vielmehr beinhaltet Visual Extend neben einer modularen Klassenbibliothek auch eine Reihe von Assistenten, mit welchen der Softwareentwickler die Funktionalität, die in der Klassenbibliothek vorhanden ist, auf einfache, visuelle Weise in seine eigenen Anwendungen einfließen lassen kann. Visual Extend besteht aus den folgenden Hauptkomponenten:
Im Gegensatz zu anderen Entwicklungsumgebungen unterscheidet sich Visual Extend zum einen dadurch, dass keine Grundfunktionalitäten wie z.B. das Data Environment oder der Projektmanager von Visual FoxPro ersetzt werden. Visual Extend erweitert vielmehr die bestehenden Komponenten und somit die gesamte Entwicklungsumgebung. Die Folgen, wichtige Komponenten, wie z.B. das Data Environment oder den Projektmanager zu ersetzen wären schwerwiegend: Keine volle Drag and Drop Funktionalität sowie eingeschränkte Source Safe Integration wären die Folgen.
Ein anderes Unterscheidungsmerkmal sind die Visual Extend eigenen Wizards und Builder, welche die Entwicklerproduktivität nochmals massiv steigern. Erst mit Ihnen wird es möglich, wirklich rasch und kompetent Anwendungen zu erstellen für welche man manuell viel mehr Zeit benötigen würde.
Die Visual Extend Wizards und Builder erstellen ganz normale Visual FoxPro Komponenten, welche zwar auf der Visual Extend Klassenbibliothek oder den eigenen Subklassen des Entwicklers aufbauen abgesehen davon jedoch innerhalb Visual FoxPro ganz normal weiterverarbeitet werden können.
Anwendungen, die mit Visual FoxPro und der Software-Entwicklungsumgebung Visual Extend entwickelt wurden, haben die folgenden Eigenschaften:
Softwareentwickler werden die folgenden Visual Extend-Merkmale besonders zu schätzen wissen:
VFX hilft Ihnen, Ihre Visual FoxPro Anwendungen in einer höheren Qualität und wesentlich schneller als bisher zu entwickeln. Ihre Entwickler-Produktivität steigert sich dank des Einsatzes von Visual Extend dramatisch. Und das alles ohne irgendwelche Einbußen bezüglich der Flexibilität von Visual FoxPro in Kauf nehmen zu müssen. Let’s be more productive mit Visual Extend für Visual FoxPro!
Falls Sie eine neue Applikation erstellen wollen, könnten Sie alle benötigten Dateien wie z.B. die Klassenbibliothek, das Menu, die Include Dateien, die Bitmaps usw. von Hand in die entsprechenden Verzeichnisse resp. Unterverzeichnisse Ihrer neu zu erstellenden Applikation kopieren. Die Formulare, welche auf bestimmten Form Klassen basieren und in der neuen Applikation benötigt werden, könnten Sie entweder manuell aus einer Vorlage kopieren oder neu anlegen und anschliessend Ihr neues Projekt kompilieren. Der VFX Application Wizard erledigt all diese Arbeitsschritte vollautomatisch für Sie. Nach nur kurzer Zeit sind Sie im Besitze einer voll lauffähigen neuen Applikation in der Sprache Ihrer Wahl.
Wenn Sie ein neues Projekt beginnen, könnten Sie die ganze Ordnerstruktur von Hand erstellen, alle benötigten Dateien kopieren, wie etwa die Klassenbibliotheken, die Standardformulare, die Konfigurationsdateien, die Bilddateien usw. Hier greift der VFX Application Wizard ein: er erstellt das gesamte Projekt in der Sprache Ihrer Wahl. Er stellt außerdem die wichtigsten Einstellungen der Anwendungsklasse ein und erstellt Include-Dateien mit den wichtigsten Konstanten um die manuelle Arbeit so weit wie möglich zu reduzieren.
Schließen Sie alle Formulare und stellen Sie sicher, daß keine Klassenbibliotheken eines VFX-Projektes geöffnet sind. Am Besten beenden Sie Visual FoxPro und starten Sie erneut, bevor Sie den VFX Application Wizard benutzen.
Wählen Sie den Menüpunkt Application Wizard im VFX 5.0-Menü.
Der VFX Application Wizard-Dialog erscheint:
Geben Sie die folgenden Daten ein, bevor Sie eine neue Anwendung generieren lassen:
VFX Home Directory. Tragen Sie hier den VFX-Ordner ein, in dem sich alle VFX-Dateien befinden (normalerweise \VFX50). Sie brauchen diese Information nur einmalig einzugeben.
Name. Geben Sie hier den Namen für Ihre neue Projektdatei ein. Fügen Sie keinen Pfad und keine Namenserweiterung hinzu. Geben Sie nur den Namen des neuen Projektes ein.
Directory. Geben Sie den Ordner für Ihr neues Projekt ein. Wenn der Ordner noch nicht existiert, so wird er von dem VFX Application Wizard erstellt.
Auf der Seite mit dem Namen Layout machen Sie die folgenden Eingaben:
Application Title. Geben Sie die Überschrift für das Hauptfenster Ihrer Anwendung an. Diese Überschrift wird als Konstante MAINTITLE_LOC in der Include-Datei VFXTXT.H gespeichert.
Version. Geben Sie die Versionsnummer für den Infodialog Ihrer Anwendung ein. Die Nummer wird in der Konstante CAP_LBLVERSION in der Include-Datei VFXTXT.H gespeichert.
Copyright. Geben Sie Ihre Copyright-Information für den Infodialog Ihrer Anwendung ein. Diese Information wird in der Konstante CAP_LBLCOPYRIGHTINFORMATION in der Include-Datei VFXTXT.H gespeichert.
Database Name. Geben Sie den Namen Ihres Datenbank-Containers an (DBC). Geben Sie nur den Namen des Datenbank-Containers ohne Pfad und ohne Namenserweiterung ein.
Auf der Seite mit dem Namen Options können Sie folgenden Optionen einstellen:
Ask to Save When Close. Die Auswahl dieser Option setzt den Wert der Eigenschaft nAsktoSave des Anwendungsobjektes auf 1. Diese Eigenschaft bestimmt das Verhalten von VFX wenn der Benutzer ein Formular schließt oder den Datensatzzeiger bewegt, nachdem er Änderungen am aktuellen Datensatz gemacht hat.
Enable AutoEdit Mode. Die Auswahl dieser Option setzt den Wert der Eigenschaft nAutoEditmode des Anwendungsobjektes auf 1. Das bedeutet, daß der Benutzer jederzeit mit der Bearbeitung der Daten beginnen kann, ohne vorher in den Bearbeitungsmodus wechseln zu müssen.
Enter on the grid means Edit. Die Auswahl dieser Option setzt den Wert der Eigenschaft nEnterisEditinGrid des Anwendungsobjektes auf 1. Das bedeutet, daß durch Drücken der Enter-Taste auf dem Datenraster einer Suchseite in den Bearbeitungsmodus gewechselt wird.
Enable Hooks. Die Auswahl dieser Option setzt den Wert der Eigenschaft nEnableHook des Anwendungsobjektes auf 1. Das bedeutet, daß die Hooks aktiviert werden.
Use DBCX Compliant Products. Wählen Sie diese Option, wenn Sie andere DBCX-kompatible Produkte in Ihrer Anwendung einsetzen wollen, wie zum Beispiel den Stonefield Database Toolkit (SDT).
Toolbar Style. Wählen Sie hier die Symbolleistenklasse, die Sie verwenden wollen. CAppNavBar enthält Schaltflächen zur Bewegung des Datensatzzeigers und andere Schaltflächen zur Bearbeitung in der Standard-Symbolleiste. CAppToolbar enthält keine Schaltflächen zur Bewegung des Datensatzzeigers und zur Bearbeitung.
Language. Wählen Sie die gewünschte Sprache für Ihr neues Projekt. Zur Zeit können Sie aus folgenden Sprachen auswählen: englisch, französisch, deutsch, italienisch und spanisch.
Auf der Seite Author, können Sie Ihre persönlichen Daten eingeben um Ihr Projekt zu dokumentieren.
Diese Informationen werden in Ihrem neu generierten Projekt gespeichert.
Copy the VFX Library. Die Auswahl dieses Kontrollkästchens kopiert die VFX-Klassenbibliotheken in Ihr Projekt, wenn Sie dies wünschen. Das hat den Vorteil, daß Sie Ihr Projekt in jeden beliebigen Ordner verschieben können, ohne verlorene Referenzen wiederherstellen zu müssen.
Wenn Sie Generate auswählen, wird der VFX Application Wizard ein neues Projekt entsprechend den von Ihnen eingegebenen Parametern erstellen. Die Generierung dauert nur einige Sekunden. Eine abschließende Meldung zeigt an, daß Ihre neue Anwendung erfolgreich vorbereitet wurde.
ANMERKUNG: Da Sie sicher sofort mit der Arbeit an Ihrem neuen Projekt beginnen wollen, hat der VFX Application Wizard bereits automatisch den Standardordner auf den Startordner des neuen Projektes gesetzt. Um die Anwendung aus dem Projekt-Manager zu starten, wählen Sie das Hauptprogramm VFXMAIN.PRG und wählen Sie ausführen.
Nach einer erfolgreichen Anwendungsgenerierung mit dem VFX Application Wizard, haben Sie eine lauffähige Anwendung mit allem was eine neue Anwendung benötigt vom Menü, über die Standard-Symbolleiste, die Benutzerverwaltung, die Systemeinstellungen, Datenbankwartung, ein Laufzeitfehlerprotokoll, ein Protokoll der Systemsperren bis hin zum Infodialog.
VFX erstellt Anwendungen die nach dem Office-Compatible-Standard zertifiziert werden können.
Menü: Datei
Mit einem Standard-Datei/Öffnen-Dialog wird die Komplexität von Menüs wesentlich reduziert. Der Benutzer öffnet Formulare immer durch einen einheitlichen Öffnen-Dialog, für den VFX einen Gestaltungsvorschlag macht. Selbstverständlich können Sie diese Vorlage anpassen.
VFX-Anwendungen bieten, dem Office-Compatible-Standard folgend, im Menü Datei die vier zuletzt geöffneten Dateien an.
Auch die Datei/Beenden Option entspricht dem Office-Compatible-Standard.
Menü: Bearbeiten
Hier befinden sich alle Funktionen zur Datenbearbeitung, die sich auf den aktuellen Datensatz beziehen sowie die Möglichkeit, die Formulare für Suche und weitere Funktionen aufzurufen. Je nach Status des Formulars
sind die einen oder anderen Funktionen verfügbar oder nicht.
Um weitere Informationen zu erhalten, sehen Sie bitte im Kapitel Das VFX Datenbearbeitungsformular nach.
Menü: Ansicht
Hier können Sie den Symbolleisten-Dialog aufrufen, die Seite bei mehrseitigen Eingabemasken wechseln, sowie den Datensatzzeiger bewegen.
Um weitere Informationen zu erhalten, sehen Sie bitte im Kapitel Das VFX Datenbearbeitungsformular nach.
Menü: System
Um weitere Informationen zu den einzelnen Optionen zu erhalten, sehen Sie bitte in den entsprechenden Kapiteln dieses Benutzerhandbuches nach.
Menü: Fenster
Falls Sie mehrere Fenster geöffnet haben, können Sie diese im Menü Fenster auswählen.
VFX-Anwendungen haben eine Standard-Symbolleiste, die Sie einfach um Ihre anwendungsspezifischen Schaltflächen erweitern können. (Siehe Kapitel Anpassen der Standard-Symbolleiste weiter unten in diesem Handbuch.) Dadurch haben Benutzer einfachen Zugriff auf die Funktionen, die Ihre Anwendung bietet.
Neben dieser Standard-Symbolleiste bietet Ihnen VFX an, auf einfachste Art und Weise eine formularspezifische Symbolleiste zu definieren. Das Ein- und Ausblenden dieser Symbolleiste zur Laufzeit erledigt VFX für Sie völlig automatisch. Alles was Sie zu tun müssen, ist eine Symbolleisten-Klasse zu definieren und den Namen dieser Symbolleiste in der Formular-Eigenschaft CToolbarClass einzutragen. VFX erledigt alles weitere für Sie automatisch.
HINWEIS: Für eine ausführliche technische Beschreibung sehen Sie bitte in der als Online Hilfesystem vorliegenden VFX Technischen Referenz nach.
Je nach Art Ihrer Anwendung kann es erforderlich sein, vom Office-Compatible-Standard abzuweichen. Es liegt bei Ihnen als Entwickler, zu entscheiden, ob es sich lohnt beim Office-Compatible-Standard zu bleiben oder einen alternativen Aufbau zu verwenden. Das einfachste ist natürlich, beim Einsatz vom VFX beim vorgeschlagenen Office-Compatible-Standard zu bleiben. Es ist jedoch möglich, abweichende Konzepte zu implementieren. Hierfür sind gewisse Detailkenntnisse erforderlich und ggf. ist auch ein vollständig anderer Menüaufbau zu realisieren. VFX bietet z. B. Eigenschaften an, welche steuern, wo bestimmte Positionen im Menü beginnen: Sehen Sie unter der Anwendungsklasse CFoxApp in der VFX Technischen Referenz nach.
Durch Auswahl des Menüpunktes System/Datenbankwartung erscheint die folgende Dialogbox:
In dieser Dialogbox sehen Sie eine Liste mit allen in Ihrer Anwendung verfügbaren Tabellen. In einem einfach zu bedienenden VFX-Mover-Dialog können Sie die Tabellen auswählen, die Sie bearbeiten möchten.
Sie können die folgenden Optionen auswählen:
Drücken Sie nach der Auswahl auf OK um die gewünschte Datenbankwartung durchzuführen.
HINWEIS: Der hier verwendete Mover-Dialog ist ebenfalls eine VFX-Klasse und steht auch für Ihre eigenen Anwendungen zur Verfügung. Siehe auch Kapitel Verwendung des VFX Mover-Dialogs.
|
Hinweis für SDT-Benutzer: Wenn Sie die SDT-Unterstützung aktivieren, sehen Sie eine zusätzliche Option, bezeichnet mit „Repair“, welche sich auf die SDT-Repair-Funktion bezieht. Wenn SDT-Unterstützung verfügbar ist, wird diese auch für das Reindizieren verwendet. |
In jeder Mehrbenutzeranwendung sollte eine Benutzerverwaltung vorhanden sein. Als erstes muß festgelegt werden, wer zu Ihrer Anwendung Zugang hat. Dazu werden der Benutzername, das Kennwort und die Zugriffsrechte je Benutzer gespeichert. Eine weitere wichtige Funktion der Benutzerverwaltung ist die Speicherung der benutzerspezifischen Einstellungen.
Die Tabelle in der die benutzerspezifischen Daten gespeichert sind, ist die freie Tabelle VFXUSR.DBF/CDX. Wenn Sie den Vorteil der langen Feldnamen nutzen möchten, können Sie diese Tabelle in Ihren Datenbank-Container einfügen.
Das Bearbeitungsformular, basierend auf der Klasse CDataFormPage bzw. CDataFormPageBar, wird automatisch vom VFX Application Wizard vorbereitet.
Benutzer können ihre eigenen Daten in der VFX-Ressourcendatei löschen wenn sie mit neuen Einstellungen weitermachen wollen oder wenn sie von einer großen Bildschirmauflösung zu einer kleineren wechseln wollen oder wenn sie mit ihren bisherigen Einstellungen nicht mehr zufrieden sind. In der Ressourcendatei werden die Einstellungen für Formulargröße, Spaltenbreiten in Datenrastern und Sortierfolgen in Datenrastern und Auswahldatenrastern gespeichert. Um die Daten in der VFX-Ressourcendatei zu löschen drücken Sie auf die Schaltfläche Ressourcen löschen.
ANMERKUNG: Benutzer können nicht die Daten von anderen Benutzern ändern, wenn diese eine höhere Sicherheitsstufe haben. Sicherheitsstufen starten mit 1 (Administrator) und enden mit 99 (niedrigste Sicherheitsstufe). Zusätzlich können Sie eine Zugriffszeichenfolge für die weitere Anpassung an Ihre Bedürfnisse festlegen. Für weitere Sicherheitsaspekte, besonders für alle VFX Formular-Sicherheitseigenschaften, lesen Sie bitte in der VFX Technischen Referenz nach.
VFX protokolliert alle Laufzeitfehler automatisch. Die Tabelle mit den Fehlermeldungen ist die freie Tabelle VFXLOG.DBF/CDX.
Das Bearbeitungsformular, basierend auf der Klasse CDataFormPage, wird automatisch vom VFX Application Wizard vorbereitet.
Der Administrator kann das Fehlerprotokoll mit der Schaltfläche Alles löschen löschen.
ANMERKUNG: Für weitere Informationen lesen Sie bitte in der VFX Technischen Referenz nach.
In anspruchsvolleren Mehrbenutzerumgebungen kann eine Meldung wie „Datensatz durch anderen Benutzer gesperrt“ unter Umständen nicht ausreichen. Für solche Fälle stellt VFX eine System-sperrentabelle zur Verfügung. In dieser Tabelle können Sie speichern, welcher Benutzer gerade welchen oder welche Datensätze in Gebrauch hat. (Siehe die Funktionen XLock() sowie XUnlock() in der Technischen Referenz unter Funktionen).
Die Systemsperrentabelle hat den Namen VFXLOCK.DBF/CDX. und ist, wie die übrigen VFX Tabellen, eine freie Tabelle.
Das Bearbeitungsformular basiert auf der VFX-Klasse CDataFormPage und wird durch den VFX Application Wizard gebrauchsfertig zur Verfügung gestellt.
Der Administrator kann die Systemsperren mit der Schaltfläche Alles löschen löschen.
ANMERKUNG: Für weitere Informationen lesen Sie bitte in der VFX Technischen Referenz nach.
VFX-Anwendungen verwenden eine Ressourcentabelle, in der je Benutzer Informationen über alle Formulare, die der Benutzer bereits einmal verwendet hat, gespeichert sind. Hierbei werden nicht nur die Positionen der Formulare, sondern auch Layoutänderungen an Datenrastern inklusiv der Sortierfolgen gespeichert.
Hier die Einstellungen, die in der VFX-Ressourcentabelle je Benutzer gespeichert werden.
Einstellung |
Beschreibung |
Bemerkung |
---|---|---|
Position und Größe von Formularen |
Der Benutzer sieht die Formulare bei erneutem Öffnen genau so, wie er sie zuletzt verlassen hat. |
Individuelle Formulareinstellungen Hinweis: Bezieht sich auch auf Auswahllisten! |
Alle vorgenommenen Layoutänderungen an Datenrastern |
Der Benutzer sieht die Datenraster genau so wie er sie verlassen hat. Sowohl Spaltenbreiten als auch Anordnung (unabhängig ob es sich hierbei um berechnete Felder handelt oder nicht). |
Individuelle Datenrastereinstellungen Hinweis: Bezieht sich auch auf Auswahllisten sowie 1:n-Formulare! |
Aktuelle Sortierung der Datenbearbeitungsformulare sowie der Auswahllisten |
Die letzte Sortierfolge wird automatisch wiederhergestellt. Unabhängig davon, ob ein Indexschlüssel vorhanden ist oder nicht. VFX erstellt temporäre IDX-Dateien für nicht vorhandene Schlüssel. |
VFX erstellt automatisch benötigte IDX-Dateien im Ordner der Anwendung und löscht diese wieder beim Verlassen des Formulars. Hinweis: Bezieht sich auch auf Auswahllisten! |
Position und Status von Symbolleisten |
Falls Sie eine Symbolleiste an ein Formular anbinden (Formulareigenschaft CToolbarClass), so werden diese in dem selben Status präsentiert, wie sie beim letzten Arbeiten mit diesem Formular verlassen wurden. |
|
Unterdrückung von Symbolleisten |
Falls der Benutzer die formularspezifische Symbolleiste geschlossen hat, so wird diese bei erneutem Öffnen dieses Formulars nicht mehr geöffnet. Um die Symbolleiste erneut zu aktivieren, muß der Symbolleisten-Dialog aus dem Menü Ansicht geöffnet werden und die entsprechende Symbolleiste geöffnet werden. |
Sie können Ihre Ressourcendaten in der Benutzerverwaltung löschen.
VFX-Anwendungen verwenden nicht die Visual FoxPro Ressourcentabelle FOXUSER.DBF/CDX, statt dessen verwenden Sie ausschließlich die VFX-Ressourcentabelle VFXRES.DBF/CDX.
VFX erstellt für jedes Feld aus der Tabelle VFXUSER eine Public Variable mit dem Präfix gu_ und erledigt vollautomatisch das Speichern und Lesen dieser Werte.
Nehmen wir an, daß Sie ein Feld mit dem Namen TEST in der Tabelle VFXUSER haben. Nach der Benutzeranmeldung wird eine Public Variable gu_test den Wert aus dem Feld Test der VFXUSER-Tabelle beinhalten. Falls diese Variable verändert wird, wird beim Verlassen der Anwendung dieser Wert wieder zurück in das Feld Test der Tabelle VFXUSER geschrieben.
Auf diese Weise ist es sehr einfach, benutzerspezifische Einstellungen zu speichern. Es reicht aus, in der Tabelle VFXUSER ein entsprechendes Feld anzulegen.
Im Gegensatz zu den benutzerspezifischen Einstellungen, werden in der Tabelle VFXSYS die systemspezifischen Einstellungen gespeichert.
Das oben abgebildete Formular ist eine Vorlage, die für die eigenen Systemparameter verwendet werden kann.
Der VFX Application Wizard erstellt das Formular VFXSYS für Sie in einer gebrauchsfertigen Form. Dieses Formular basiert auf der Klasse CSystemDialog. Alles was Sie noch zu tun müssen, ist die gewünschten Felder in der VFXSYS Tabelle anzulegen und die entsprechenden Steuerelemente direkt mit der jeweiligen Public Variablen gs_ (siehe unten) als Datenquelle einzufügen.
Auch hier, wie bei den benutzerspezifischen Einstellungen, die weiter oben beschrieben sind, wird für jedes Feld aus der Tabelle VFXSYS eine Public Variable mit dem Präfix gs_ angelegt. VFX übernimmt auch hier vollautomatisch das Speichern und Wiederherstellen dieser Werte falls diese aus dem Systemparameterdialog heraus verändert werden.
Wenn Sie ein Feld mit dem Namen TEST in der Tabelle VFXSYS haben, wird eine Public Variable gs_test den Wert aus dem Feld TEST der VFXSYS-Tabelle beinhalten. Falls diese Variable verändert wird, wird beim Verlassen des Systemparameterdialogs dieser Wert wieder zurück in das Feld Test der Tabelle VFXSYS geschrieben.
Auf diese Weise ist es sehr einfach, systemspezifische Einstellungen zu speichern und wieder herzustellen. Es genügt hierzu in der Tabelle VFXSYS die entsprechenden Felder als Variable hinzuzufügen. Das ist sehr einfach. Probieren Sie es!
Der VFX Application Wizard erstellt eine Infodialogbox, die auf der Klasse CAboutDialog basiert.
Sie finden die Infodialogbox im Menü Hilfe.
Um diese Dialogbox Ihren Bedürfnissen anzupassen, steht Ihnen die Include-Datei Usertxt.h zur Verfügung:
…
#define MAINTITLE_LOC "ZH Test Today"
#define CAP_LBLYOURAPPLICATIONNAME "Visual Extend Library"
#define CAP_LBLVERSION "5.00.000"
#define CAP_LBLCOPYRIGHTINFORMATION "Copyright 1996-1997 Devigus Engineering"
#define CAP_LBLTRADEMARKINFORMATION "All rights reserved"
#define CAP_LBLTHISPRODUCTISLICENSEDTO "This product is licensed to:"
HINWEIS: Wenn Sie Änderungen in dieser Include-Datei machen müssen Sie das Formular vfxabout.scx vor dem Start Ihrer Anwendung öffnen und speichern. Sonst werden die Änderungen in der Include-Datei nicht übernommen.
Die Include-Dateien spielen bei VFX eine wichtige Rolle. Es lohnt sich deshalb, die vorhandenen Include-Dateien etwas näher anzusehen:
Include-Datei |
Verwendung |
Ordner |
Sprach-abhängig? |
Inhalt/Beschreibung |
---|---|---|---|---|
VFX.H |
VFXMAIN.PRG |
\VFX\INCLUDE\ |
Nein |
Definiert die _DEBUG_MODE-Konstante und andere Include-Dateien. |
FOXPRO.H |
VFX.H |
Visual FoxPro Ordner |
Nein |
Standard-FoxPro-Definitionen. |
VFXDEF.H |
VFX.H |
\VFX\INCLUDE\ |
Ja |
Definiert die ID_LANGUAGE-Konstante und andere Konstanten. |
VFXTXT.H |
VFX.H |
\VFX\INCLUDE\ |
Ja |
Sprachabhängige Texte und Tooltip-Texte, die in der VFX-Entwicklungsumgebung verwendet werden. |
VFXMSG.H |
VFX.H |
\VFX\INCLUDE\ |
Ja |
Sprachabhängige Meldungstexte, die in der VFX-Entwicklungsumgebung verwendet werden. |
USERTXT.H |
VFX.H |
\VFX\INCLUDE\ |
Ja |
Sprachabhängige Texte und Tooltip-Texte, die Sie in Ihrer eigenen Anwendung verwenden. Die Datei wird von dem VFX-Meldungstext-Editor erzeugt, wenn Sie die Option OTHER wählen. |
USERMSG.H |
VFX.H |
\VFX\INCLUDE\ |
Ja |
Sprachabhängige Meldungstexte, die Sie in Ihrer eigenen Anwendung verwenden. Die Datei wird von dem VFX-Meldungstext-Editor erzeugt, wenn Sie die Option OTHER nicht wählen. |
USERDEF.H |
VFX.H |
\VFX\INCLUDE\ |
Nein |
Sprachunabhängige Konstanten, die in Ihrer Anwendung verwendet werden. |
Wenn Sie den Debug-Modus oder die aktuelle Sprache wechseln wollen, müssen Sie Änderungen in einigen der Include-Dateien machen. Der VFX Application Wizard generiert die meisten Konstanten automatisch wenn Sie ein neues Projekt generieren.
VFX benutzt eine Konstante in der Include-Datei VFX.H die angibt ob die Anwendung im Debug-Modus ablaufen soll oder nicht. Standardmäßig sind die folgenden Codezeilen in der Datei VFXMAIN.PRG um den Debug-Modus in Abhängigkeit von der Konstanten _DEBUG_MODE einzustellen:
#ifdef _DEBUG_MODE
goProgram.DebugMode(.t.)
#endif
Wenn Sie nicht wollen, daß Ihre Anwendung im Debug-Modus ausgeführt wird, kommentieren Sie Zeile mit der _DEBUG_MODE-Konstanten aus. Die Konstante befindet sich in der Include-Datei VFX.H:
* #DEFINE _DEBUG_MODE .T.
Define ID_Language
In der Include-Datei VFXDEF.H ist die ID_Language-Konstante definiert, die die aktuelle Sprache Ihrer Anwendung angibt.
…#define ID_LANGUAGE "ENG"
…Wenn Sie Ihre Anwendung mit dem VFX Application Wizard anlegen, wird die Anwendung in der Sprache angelegt, die im VFX Application Wizard angegeben ist. Wenn Ihre Anwendung in eine andere Sprache übersetzt werden soll, ändern Sie Konstante ID_Language. Lesen Sie im Kapitel Mehrsprachige Anwendungen mit VFX nach, um nähere Informationen zu erhalten.
In der Include-Datei VFX.H gibt die Konstante _LANG_SETUP an, ob die LangSetup()-Methode ausgeführt wird, oder nicht. Innerhalb der LangSetup()-Methode wird überprüft ob die Konstante existiert. Nur wenn die Konstante existiert, wird der Code der LangSetup()-Methode ausgeführt. Dies dient der Geschwindigkeitsoptimierung in allen Formularen.
…
#DEFINE _LANG_SETUP .T.
…
Um Visual FoxPro zu einem Neukompilieren zu veranlassen, müssen Sie eine Änderung in der oder den Datei(en) vornehmen, die die Include-Dateien einschließen.
Der Befehl clear program im Befehlsfenster löscht alle kompilierten Programme im Hauptspeicher. Normalerweise sollten Sie die Datei VFX.H in Ihre Formulare einschließen, wenn Sie Konstanten in Ihren Formularen verwenden.
Formulare manuell zu erstellen kann schnell in Arbeit ausarten. Stellt man sich z. B. ein Formular mit 20 Feldern vor, so hat man bereits 40 Steuerelemente, allein für die Dateneingabefelder: 20 Textfelder und 20 Bezeichnungen. Für 20 Felder müssen Sie auch 20 Datenquellen definieren. Hinzu kommen noch 20 Spalten für ein Datenraster. Jede der Spalten wiederum mit einer Überschrift und Datenquelle… Hier muß Abhilfe geschaffen werden! Die Lösung bieten die Visual Extend-Assistenten an. Sie übernehmen all diese mühsame Arbeit vollautomatisch und in Windeseile. Sie werden sehen, mit der Visual Extend Version 5.0 ist es noch viel einfacher und ein Formularassistent ist stets eine großartige Hilfe.
Ein weiterer großer Vorteil des VFX Form Builders ist die Wiederverwendbarkeit. Das bedeutet, daß Sie Änderungen, die Sie in Ihrem Datenkatalog gemacht haben einfach in das bestehende Formular übernehmen können, indem Sie den VFX Form Builder aufrufen und das Kontrollkästchen Use DBC Definitions auswählen. Auch Seiten zu einem Seitenrahmen hinzuzufügen oder Änderungen an den Spalten eines Datenrasters sind sehr einfach dank der Wiederverwendbarkeit des VFX Form Builders.
Bitte lesen Sie im Abschnitt Diskussion des VFX Standard Datenbearbeitungsformulars später in diesem Kapitel um eine Vorstellung von der Bedienung eines von VFX erzeugten Standard-Bearbeitungsformulars zu bekommen.
Zuerst müssen Sie die Datenbank für Ihre Anwendung erstellen. Legen Sie Ihre Tabellen, Felder und Indexschlüssel an.
ANMERKUNG: Wenn Sie die Daten für Überschriften, Formate, Eingabemasken, Bibliothek für Anzeige im Datenbank-Container speichern, werde diese automatisch vom VFX Form Builder und vom VFX Grid Builder verwendet.
Wenn Sie ein neues Formular aus dem Projekt-Manager Ihres neuen Projektes erstellen, sehen Sie entweder ein leeres Formular Form1 oder, wenn Sie die Klassenvorlage für Formulare auf CDataFormPage oder CdataFormPageBar eingestellt haben, ein entsprechendes leeres Formular. Wenn Sie ein leeres Formular Form1 sehen, ziehen Sie per Drag & Drop die Klasse CDataFormPage oder CDataFormPageBar auf Ihr Formular aus der Klassenbibliothek VFXFORM.
WICHTIG: Denken Sie daran das leere Formular Form1 und das leere FormSet1 nach Ihrer Drag & Drop-Operation zu löschen! (Hinweis: Sie müssen das neu angelegte Formular verschieben um Form1 hinter dem VFX-Formular sehen zu können. Das FormSet1 ist unsichtbar und kann aus dem Menü gelöscht werden.)
Tip: Wenn Ihnen das alles zu viel Arbeit ist, benutzen Sie den VFX Form Wizard. Dieser Assistent erstellt ein neues Formular auf einer auszuwählenden VFX-Basisklasse und Ihr neues Formular ist sofort bereit!
Richten Sie die Datenumgebung für das zu erstellende Formular ein. Der VFX Form Builder holt sich automatisch die Informationen aus der Datenumgebung für den Erstellungsprozeß.
WICHTIG: Denken Sie daran den InitialSelectedAlias in der Datenumgebung anzugeben sowie die Order-Eigenschaft in den Tabellen Ihrer Datenumgebung.
Um den VFX Form Builder aufzurufen bewegen Sie die Maus auf den weißen Hintergrund des Formular-Designers, drücken Sie die rechte Maustaste und wählen Sie Steuerelement-Assistent. In VFP 3.0 können Sie auch die Schaltfläche Steuerelement-Assistent im Eigenschaftsfenster wählen, wenn das Formular das aktuelle Objekt ist.
ANMERKUNG: Wenn Sie eine Meldung erhalten, daß es keinen Steuerelement-Assistenten für das ausgewählte Objekt gibt oder wenn ein Standard-Visual FoxPro-Assistent erscheint, prüfen Sie ob Sie alle Installationshinweise in diesem Handbuch befolgt haben und das Sie das Formularobjekt ausgewählt haben. Ein verbreiteter Fehler ist, den Seitenrahmen anstelle des Formularobjektes auszuwählen. Prüfen Sie das angezeigte Objekt im Eigenschaftsfenster, wenn Sie nicht sicher sind, ob das Formularobjekt ausgewählt ist.
Der VFX Form Builder wird geladen und zeigt einen benutzerfreundlichen Dialog:
Die Bedienung des VFX Form Builder
Der VFX Form Builder hat eine intuitive Bedienung.
Form Name. Geben Sie den Namen des neuen Formulars ein. Der VFX Form Builder weist einen Standardnamen entsprechend der Namenskonventionen zu. Der Name beginnt mit frm. Selbstverständlich können Sie Ihrem Formular einen beliebigen Namen geben, aber wir empfehlen Ihnen sich an die Namenskonventionen zu halten.
Caption. Geben Sie die Überschrift für Ihr Formular ein. Während Sie die Überschrift eingeben, wird diese bereits in der Überschrift des Formularassistenten angezeigt. Wenn Ihr Formular veränderliche Überschriften in Abhängigkeit vom Aufruf des Formulars haben soll, brauchen Sie sich um diese Überschrift keine Gedanken zu machen. Geben Sie in diesem Fall einfach eine mehr oder weniger zutreffende Überschrift ein. Der Formularassistent hat einen Seitenrahmen mit drei Seiten mit den Namen Edit Pages, Grid Page und Form Options. Auf der Seite Edit Pages definieren Sie den Seitenrahmen den Sie zur Bearbeitung der ausgewählten Felder benutzen. Auf der Grid Page definieren Sie das Datenraster für die Suche und auf der Seite Form Options setzen Sie verschiedene Optionen für das Formular.
Die folgenden Optionen sind auf der Seite Edit Pages verfügbar:
Page Count. Geben Sie ein wieviel Bearbeitungsseiten Sie benötigen. Für einige Formulare wird eine Bearbeitungsseite genug sein. Wenn Sie mehr Felder haben, werden Sie diese auf mehrere Seiten verteilen wollen. In Abhängigkeit von der Anzahl der gewählten Seiten, sehen Sie im Seitenrahmen des Formularassistenten einen Seitenrahmen der diese Seiten anzeigt. Wenn Sie zwei Bearbeitungsseiten eingeben, sehen Sie zwei Seiten auf dem Seitenrahmen, wenn Sie drei Bearbeitungsseiten eingeben, sehen Sie drei Seiten auf dem Seitenrahmen usw.
Page Title. Geben Sie die Überschrift der aktuellen Bearbeitungsseite ein. Wenn Sie die Überschrift für die zweite Seite eingeben wollen, drücken Sie auf die zweite Seite und Sie können die Überschrift auch für diese Seite eingeben. Der VFX Form Builder zeigt während der Eingabe die sich ergebende Überschrift für die einzelnen Seiten an.
Justified Tab. Markieren Sie dieses Kontrollkästchen wenn die Seitenüberschriften justiert sein sollen. Ansonsten haben die Überschriften eine variable Länge und füllen nicht die Breite des Seitenrahmens.
Für jede Bearbeitungsseite stehen die folgenden Optionen zur Verfügung:
Fields Selected. Hier sehen Sie alle Felder, die Sie für die aktuelle Bearbeitungsseite ausgewählt haben. Um Felder hinzuzufügen benutzen Sie das Field Assistant-Fenster, das in einem eigenen Formular angezeigt wird und alle aus der Datenumgebung zur Verfügung stehenden Felder anzeigt.
Control Type. Geben Sie für alle ausgewählten Felder den zu benutzenden Steuerungstyp an. Die folgenden Klassen stehen hierfür zur Verfügung:
Control Type |
Beschreibung |
VFX Klassenbibliothek |
---|---|---|
CTextBox |
Normales Textfeld. |
VFXOBJ.VCX |
CKeyField |
Textfeld für das Bearbeiten von Identifikationsfeldern, die nach Anlegen des Datensatzes nicht mehr verändert werden dürfen. |
VFXDBOBJ.VCX |
CFixField |
Textfeld für das Bearbeiten von Feldern, die in einer Child-Tabelle mit einer Haupttabelle verbunden sind. Werden verwendet, wo ein Child-Formular von einem Parent-Formular aufgerufen wird und einen festen Wert aus dem Parent-Formular übergeben erhält, z. B. bei Aufträgen von einem Kunden. In diesem Fall würde das Kundenfeld im Formular Aufträge ein CFixField sein, denn im Falle des Aufrufes der Aufträge von einem Kunden muß das Kundenfeld vorbelegt werden und darf nicht änderbar sein. |
VFXDBOBJ.VCX |
CPickField |
Eingabefeld, bei dem die Eingabe mit Hilfe einer Tabelle oder Ansicht überprüft wird und auf Wunsch eine Auswahlliste zur Verfügung gestellt wird. Automatisches Datenlesen aus der Tabelle mit deren Hilfe überprüft wird. Es wird nicht nur die Eingabe überprüft, sondern zusätzlich ein beliebiger Ausdruck aus der Prüftabelle geholt. |
VFXDBOBJ.VCX |
CEditBox |
Bearbeitungsfeld für das Bearbeiten von Memofeldern und längeren Zeichenfeldern. |
VFXOBJ.VCX |
CComboBox |
Kombinationsfeld. |
VFXOBJ.VCX |
CListBox |
Listenfeld. |
VFXOBJ.VCX |
CCheckBox |
Kontrollkästchen für logische Felder. |
VFXOBJ.VCX |
COptionGroup |
Optionsgruppe. |
VFXOBJ.VCX |
CSpinner |
Drehfeld für numerische Felder. |
VFXOBJ.VCX |
<Custom> |
Die Klasse, die Sie als Klasse für die Anzeige im Datenbank-Container angegeben haben (Standardwert). |
Caption. Überschrift für das ausgewählte Feld. Der Standardwert wird aus dem Datenbank-Container übernommen.
Format. Format-Eigenschaft für das selektierte Feld. Der Standardwert wird aus dem Datenbank-Container übernommen.
Input Mask. Eingabemasken-Eigenschaft für das selektierte Feld. Der Standardwert wird aus dem Datenbank-Container übernommen.
Status Bar. Meldung für die Statuszeile für dieses Feld. Der Standardwert wird aus dem Datenbank-Container übernommen. (Eigenschaft Feldkommentar, wenn dieser Wert leer ist, wird die Feldüberschrift genommen.
Read only. Wenn ein Steuerelement nur zur Anzeige von Informationen verwendet wird, markieren Sie dieses Kontrollkästchen.
Die folgenden Optionen stehen auf der Seite Grid Page zur Verfügung:
Use Grid Page. Markieren Sie dieses Kontrollkästchen, wenn Sie eine Listenseite auf Ihrem Formular haben wollen.
Grid Page Title. Geben Sie die Überschrift für die letzte Seite Ihres Formulars ein, die normalerweise ein Datenraster mit allen Datensätzen Ihrer Tabelle oder Ansicht enthält. Wenn Sie keine Listenseite auf Ihrem Formular haben wollen, entmarkieren Sie das Kontrollkästchen.
Grid Class. Geben Sie die Klasse für das Datenraster ein oder benutzen Sie den Standardwert, die CGrid–Klasse.
Fields Selected. Hier sehen Sie alle für das Datenraster ausgewählten Felder. Um Felder auszuwählen benutzen Sie das Field Assistant-Fenster, in dem alle Felder aus der Datenumgebung zur Auswahl stehen.
Calculated Fields. Drücken
Sie auf diese Schaltfläche um ein beliebiges berechnetes Feld hinzuzufügen.
Control Type. Geben Sie für alle ausgewählten Felder den gewünschten Kontrolltyp an. Die folgenden Kontrolltypen sind verfügbar (aus Gründen der Geschwindigkeitsoptimierung bieten wir nur VFP-Basisklassen für das Datenraster an):
Kontrolltyp |
Beschreibung |
VFP-Basisklasse |
---|---|---|
Textbox |
Textfeld (Standard) |
TEXTBOX |
Editbox |
Bearbeitungsfeld |
EDITBOX |
Combobox |
Kombinationsfeld |
COMBOBOX |
Checkbox |
Kontrollkästchen |
CHECKBOX |
Header. Überschriften für die Spalten Ihres Datenrasters. Der VFX Form Builder fügt automatisch die Überschriften aus dem Datenbank-Container ein.
Output Mask. Der VFX Form Builder erstellt die Ausgabemaske anhand der Feldlänge. Sie können die Ausgabemaske ändern um sie an Ihre Bedürfnisse anzupassen.
Read only. Wenn ein Steuerelement nur zur Anzeige von Informationen verwendet wird, markieren Sie dieses Kontrollkästchen.
Incremental Search. Markieren Sie dieses Kontrollkästchen, wenn Sie die inkrementelle Suche für die ausgewählte Spalte aktivieren wollen. Beachten Sie, daß VFX eine temporäre Indexdatei erstellt, wenn kein Indexschlüssel für die Spalte vorhanden ist. (Mit der CGrid-Eigenschaft nMaxRec können Sie angeben ab welcher Anzahl Datensätze dem Benutzer eine Meldung angezeigt werden soll, bevor eine temporäre Indexdatei erstellt wird.)
Die folgenden Optionen sind auf der Seite Form Options verfügbar:
Report Name. Hier können Sie den Namen eines Berichtes eingeben. Wenn der Benutzer drucken oder Seitenansicht wählt, wird dieser Bericht gedruckt bzw. angezeigt. Sie brauchen für diese Funktionalität keinen Code in die Methode onPrint einzufügen.
Is Child Form. Wenn das Formular, daß Sie gerade erstellen, von einem anderen Formular aufgerufen wird, ist dieses Formular ein Child-Formular und Sie müssen dieses Kontrollkästchen markieren.
ANMERKUNG: Bitte verwechseln Sie dies nicht mit dem später beschriebenen 1:n-Formular, wo Sie die Haupttabelle und die Child-Tabelle auf dem gleichen Formular bearbeiten können. Hier sprechen wir über folgendes Verhalten: Formular 1 ruft Formular 2 auf, wobei Formular 1 das Hauptformular ist und Formular 2 das Child-Formular ist. Im Formular 2 sehen Sie nur die Datensätze, die ein bestimmtes Kriterium erfüllen, das die Verbindung zur Haupttabelle im Formular 1 herstellt.
Wenn Sie beispielsweise in einem Formular die Aufträge eines Kunden anzeigen wollen, markieren Sie dieses Kontrollkästchen und der VFX Form Builder wird das Formular automatisch als Child-Formular erstellen. Dabei werden automatisch die erforderlichen Codezeilen in die Init()-Methode des Formulars eingetragen. Sie müssen nur noch den Code der Init()-Methode prüfen und an Ihre Bedürfnisse anpassen.
Für weitere Details lesen Sie bitte im Abschnitt Erweiterte Formulareigenschaften mit dem VFX Form Builder weiter unten in diesem Handbuch nach.
ANMERKUNG: Wenn Sie ein Formular haben, das sowohl als Child-Formular als auch als normales Formular dienen soll, markieren Sie die Option Is Child Form. Sie brauchen hierfür nicht zwei Formulare zu erstellen. Ein Formular kann sowohl alle Aufträge darstellen als auch nur die Aufträge eines bestimmten Kunden.
Has More Functions. Wenn das Formular, das Sie gerade erstellen andere Formulare aufrufen oder Aktionen ausführen soll, müssen Sie dieses Kontrollkästchen markieren. Dadurch wird automatisch der erforderliche Code für die onMore()-Methode Ihres Formulars erstellt. Sie müssen nur noch den Code in der onMore()-Methode an Ihre Bedürfnisse anpassen. Normalerweise werden Sie eine Anzahl von Aktionen haben, die zur Auswahl in einem Formular angeboten werden. Der Benutzer kann dann die gewünschte Aktion auswählen.
Für weitere Details lesen Sie bitte im Abschnitt Erweiterte Formulareigenschaften mit dem VFX Form Builder weiter unten in diesem Handbuch nach.
Has Linked Child Form. Wenn das Formular, das Sie gerade erstellen, Child-Formulare aufrufen soll, die dynamisch mit diesem Hauptformular verbunden bleiben, markieren Sie dieses Kontrollkästchen. Dadurch wird automatisch der Code für die Formularmethode onSetChilddata erstellt. Diese Methode wird automatisch für jedes vorhandene Child-Formular aufgerufen.
Autosynch Child Form. Hiermit wird die Formulareigenschaft lAutosynchChildform festgelegt. Hiermit wird angegeben ob die Child-Formulare automatisch mit diesem Hauptformular synchronisiert werden, wenn Sie den Datensatzzeiger im Hauptformular bewegen. Wenn diese Option nicht markiert ist, wird das Child-Formular nur aktualisiert, wenn es vom Benutzer aktiviert wird.
Put in Last File Menu. Hiermit wird die Formulareigenschaft lPutinLastFile festgelegt. Sie gibt an ob die Formularüberschrift in die Liste der benutzen Dateien im Menü Datei eingetragen werden soll.
Put in Window Menu. Hiermit wird die Formulareigenschaft lPutinWindowmenu festgelegt. Sie gibt an ob das laufende Formular in das Menü Fenster eingetragen werden soll. Beachten Sie auch die Eigenschaft nWinMnuCount und die Methode RefreshWindowMenu() im Anwendungsobjekt.
Can Edit. Hiermit wird die Formulareigenschaft lCanEdit festgelegt. Sie gibt an ob der Benutzer die Datensätze im aktuellen Formular bearbeiten kann.
Can Insert. Hiermit wird die Formulareigenschaft lCanInsert festgelegt. Sie gibt an ob der Benutzer Datensätze im aktuellen Formular einfügen kann.
Can Delete. Hiermit wird die Formulareigenschaft lCanDelete festgelegt. Sie gibt an ob der Benutzer die Datensätze im aktuellen Formular löschen kann.
Multi Instance. Hiermit wird die Formulareigenschaft lMultiInstance eingestellt. Standardmäßig können alle Formulare, die Sie mit VFX erstellen mehrmals geöffnet werden (das nennt man multiinstanzfähig). Dies ist eine großartige Eigenschaft. Alles was Sie dabei beachten müssen ist, daß das Formular mit einer privaten Datensitzung arbeitet.
Trotzdem ist es manchmal günstig die Eigenschaft multiinstanzfähig ausschalten zu können. Daher haben wir die Eigenschaft lMultiInstance eingeführt. Setzen Sie diese Eigenschaft auf wahr und das Formular kann nur einmal geöffnet werden.
Close with ESC key. Hier wird die Formulareigenschaft lCloseonEsc eingestellt die angibt, ob der Benutzer ein Formular mit der Escape-Taste schließen kann.
Save/Restore positions. Hier wird die Formulareigenschaft lSavePosition eingestellt, die angibt, ob die Positionen und andere Formulareinstellungen in der VFX-Ressourcendatei gespeichert werden sollen.
Add Speedbar Control. Dieses Kontrollkästchen fügt eine Symbolleiste im Stil von Win95/NT4.0 dem Formular hinzu. Hier ein Beispiel:
Auto Size Textbox. Wenn Sie dieses Kontrollkästchen auswählen wird der VFX Form Builder automatisch die Größe der Textfeld-Steuerelemente an die Länge des Feldes anpassen, das in der Datenquelle angegeben ist. Dies spart Ihnen eine Menge Arbeit in der Gestaltungsphase des Formularerstellungsprozesses.
Button Bar. Wenn Sie dieses Kontrollkästchen deaktivieren, wird der VFX Form Builder automatisch die Formulareigenschaft lHidebuttonbar auf wahr setzen.
OK. Wählen Sie diese Schaltfläche um Ihr Formular generieren zu lassen. Dies dauert einige Sekunden und das Ergebnis ist ein Formular, auf dem Sie die gewünschte Anzahl von Bearbeitungsseiten mit den gewählten Feldern auf jeder Seite haben. Wenn Sie mehr Felder gewählt haben als untereinander auf eine Seite passen, werden zwei Spalten erzeugt.
Der Formularerstellungsprozeß kann mehrmals gestartet werden. Diese Eigenschaft nennt man wiederverwendbar. Anmerkung: Die Eigenschaft wiederverwendbar ist zu 100% nur für Formulare verfügbar, die mit dem VFX Form Builder erzeugt wurden. Wenn Sie den VFX 5.0 Form Builder erstmals auf Formularen anwenden, die Sie von VFX 3.5 portiert haben oder die Sie von Hand erstellt haben, wird VFX 5.0 nicht in der Lage sein alle Bezeichnungen korrekt wieder herzustellen. Das kommt daher, daß in VFX 5.0 die Bezeichnungen ihrem zugehörigen datengebundenen Steuerelement zugeordnet werden, indem die Datenquelle in der Tag-Eigenschaft gespeichert wird. Dies ist das Haupterfordernis für die Erstellung eines wiederverwendbaren Assistenten, weil die Bezeichnungen nach ihrer Erstellung unabhängig von den datengebundenen Steuerelementen existieren. Um das wiederverwendbare Verhalten des Assistenten sicherzustellen sollten Sie immer den VFX Form Builder verwenden, wenn Sie Ihrem Formular Felder hinzufügen wollen.
Ein weiterer großer Vorteil des wiederverwendbaren VFX Form Builders ist die Tatsache, daß Sie Änderungen, die Sie im Datenkatalog (z. B. Überschrift, Format oder Eingabemaske) durchgeführt haben, durch Aufrufen des VFX Form Builders und auswählen des Kontrollkästchens Use DBC Definitions in das Formular übernehmen können.
Apply. Hat die gleiche Funktion wie die Schaltfläche OK, schließt den VFX Form Builder jedoch nicht.
Cancel. Bricht die Ausführung des VFX Form Builders ab. Jede Auswahl und Eingabe geht dabei verloren.
Wenn Sie ein Auswahllisten-Steuerelement auf einem Formular einsetzen, sieht das etwa so aus:
Der Benutzer kann die Auswahlliste auf folgende Weise aufrufen:
Der Dialog der Auswahlliste hat folgende Eigenschaften (wie jedes VFX Power Grid):
Der Benutzer kann den gewünschten Datensatz auf folgende Weise auswählen:
Wenn der Benutzer die Tabelle bearbeiten möchte, die der Auswahlliste zugrunde liegt, kann er auf die Schaltfläche Bearbeitung drücken. Daraufhin erscheint das Bearbeitungsformular für diese Tabelle. Wenn der Benutzer neue Datensätze hinzufügen will, drückt er auf die Schaltfläche neu.
Ein Steuerelement, das Sie häufig benutzen werden, ist die Auswahlliste. Dieses Container-Steuerelement bietet Ihnen eine einfache Möglichkeit Textfelder hinzuzufügen, die die Benutzereingabe mit Werten aus einer Tabelle oder Ansicht überprüfen. Außerdem kann der Benutzer ein Auswahllisten-Formular öffnen um den gewünschten Datensatz auszuwählen. Da die Auswahllisten-Klasse einige Eigenschaften hat, die definiert werden müssen, hilft Ihnen der VFX Pickfield Builder bei der einfachen Erstellung der Auswahllisten-Steuerelemente. Und das ohne eine einzige Zeile Code oder Text im Eigenschaftsfenster des Auswahllisten-Containers manuell eintragen zu müssen!
Um den VFX Pickfield Builder aufzurufen, wählen Sie das Auswahllisten-Container-Steuerelement auf dem Formular, drücken die rechte Maustaste und wählen Steuerelement-Assistent.
ANMERKUNG: Um ein Steuerelement auszuwählen, das sich auf einer Seite in einem Seitenrahmen auf einem Formular befindet, müssen Sie den Visual FoxPro-Weg benutzen um Steuerelemente innerhalb der Containerhierarchie auszuwählen (Klick, Rechtsklick, bearbeiten). Eine gute Möglichkeit um festzustellen, ob Sie das richtige Steuerelement ausgewählt haben ist ein Blick in das Eigenschaftsfenster. Dort wird das aktuelle Objekt angezeigt.
Der VFX Picklfield Builder wird geladen und zeigt den folgenden Dialog:
Auch dieser Assistent ist voll wiederverwendbar. Das bedeutet, daß Sie diesen Assistenten während des Entwicklungsprozesses beliebig oft verwenden können ohne die Eigenschaften zu verlieren, die Sie bereits eingestellt haben.
Auf der Seite Pick Field stehen die folgenden Optionen zur Verfügung:
Pick Dialog Caption. Geben Sie die Überschrift für das Auswahllisten-Formular ein. In diesem Formular kann der Benutzer einen Wert auswählen. Wenn Sie ein Feld leer lassen, erscheint eine Standardmeldung wie: Bitte wählen Sie einen Wert...
Maintenance Form. Wenn der Benutzer den gewünschten Datensatz in dem Auswahllisten-Formular nicht findet, möchten Sie dem Benutzer vielleicht die Möglichkeit bieten das normale Bearbeitungsformular (im Ansichtsmodus oder gleich im Einfügemodus) aufzurufen. Geben Sie hier den Namen für das normale Bearbeitungsformular ein. Es wird aufgerufen, wenn der Benutzer auf die Schaltfläche Bearbeitung im Auswahllisten-Formular drückt.
Pick Table Name. Wählen Sie den Namen der Tabelle oder Ansicht aus der Sie den Wert auswählen oder überprüfen möchten. Hier können Sie zwischen allen Tabellen oder Ansichten aus der Datenumgebung wählen.
Pick Table Index Tag. Wählen Sie die Sortierfolge für die Auswahllisten-Tabelle.
CPickField::txtField.ControlSource. Dies ist die Datenquelle für das Auswahllistenfeld. Der VFX Picklist Builder stellt diesen Wert schon ein und Sie brauchen ihn normalerweise nicht zu ändern.
CPickField::txtDesc.ControlSource. Wählen Sie die Datenquelle für das Beschreibungsfeld des Auswahllisten-Steuerelementes. Stellen Sie sicher, daß Sie eine korrekte Beziehung zu der Tabelle herstellen aus der diese Datenquelle stammt. Andernfalls wird dieses Steuerelement nicht den gewünschten Wert anzeigen, wenn Sie den Datensatzzeiger in Ihrem Formular bewegen.
Return Field Name (Code). Geben Sie den Namen des Feldes (aus der Tabelle oder Ansicht der Auswahlliste) ein, das den ausgewählten Wert enthält. Geben Sie keinen Aliasnamen ein, weil Tabellen für Auswahllisten mit einem Zufallsnamen geöffnet werden.
Return Field Name (Description). Geben Sie den Namen des Feldes (aus der Tabelle oder Ansicht der Auswahlliste) ein, das den Wert mit der Beschreibung enthält. Geben Sie keinen Aliasnamen ein, weil Tabellen für Auswahllisten mit einem Zufallsnamen geöffnet werden.
Format. Der VFX Pickfield Builder übernimmt diese Eigenschaft aus dem Datenbank-Container.
Input Mask. Der VFX Pickfield Builder übernimmt diese Eigenschaft aus dem Datenbank-Container.
Status Bar Text. Der VFX Pickfield Builder übernimmt diese Eigenschaft aus dem Datenbank-Container.
Auf der Seite Options stehen die folgenden Optionen zur Verfügung:
User Refresh Code. Manchmal benötigen Sie speziellen Code in der Refresh()-Methode des Auswahllisten-Containers.
Work on View. Wenn die Daten aus denen Sie auswählen aus einer Ansicht stammen, markieren Sie dieses Kontrollkästchen. Wenn Sie dies tun, können Sie in der Eigenschaft cSQLValid eine Zeichenfolge etwa so wie die folgende eingeben: „select customer_id from lv_customer where customer_id = trim(this.txtField.Value)“
Auto Skip. Markieren Sie diese Option, wenn Sie automatisch zum nächsten Steuerelement springen wollen, nachdem Sie einen Wert aus der Auswahlliste ausgewählt haben. Dadurch wird die CPickField-Eigenschaft lUseTab auf wahr gesetzt.
Auto Pick. Markieren Sie diese Option, wenn Sie automatisch die Auswahlliste aufrufen wollen, wenn der Benutzer einen falschen Wert eingegeben hat. Dadurch wird die CPickField-Eigenschaft lAutoPick auf wahr gesetzt.
Hide Code. Markieren Sie diese Option, wenn Sie das Codefeld in der Auswahlliste verstecken wollen. Dadurch wird die CPickField-Eigenschaft lHideCode auf wahr gesetzt.
Is Key Field. Markieren Sie diese Option, wenn Sie dieses Auswahllistenfeld als Schlüsselfeld definieren wollen. Ein Schlüsselfeld ist nur zugänglich, während Sie einen neuen Datensatz anlegen (so wie die Textfeld-Klasse ckeyfield). Dadurch wird die CPickField-Eigenschaft lHideCode auf wahr gesetzt.
OK. Die eingestellten Optionen werden in das ausgewählte Auswahllisten-Objekt eingefügt.
Apply. Macht das gleiche wie OK, jedoch wird der VFX Pickfield Builder nicht beendet.
Cancel. Bricht die Arbeit mit dem VFX Pickfield Builder ab. Alle Eingaben werden verworfen.
Hinzufügen des Formulars in den Datei/ Öffnen Dialog
VFX bietet einen Vorschlag für einen Datei/Öffnen-Dialog an. Selbstverständlich können Sie diesen Dialog an Ihre Bedürfnisse anpassen oder einen eigenen Dialog erstellen.
Der Datei/Öffnen-Dialog benutzt die Tabelle VFXFOPEN.DBF. Der VFX Form Builder fügt automatisch für jedes Formular Datensätze zu der Tabelle VFXFOPEN.DBF hinzu. Hier ist die Struktur der Tabelle VFXFOPEN.DBF:
VFXFOpen-Feld |
Beschreibung |
Beispiel |
---|---|---|
ObjectID |
Der VFX-Datei/Öffnen-Dialog hat normalerweise zwei Seiten. (Tip: Sie können die Pagecount-Eigenschaft des Seitenrahmens im Formular vfxopen auf jeden beliebigen Wert setzen um die Anzahl der Seiten zu verändern.) Wenn Sie wollen, daß Ihr Formular auf Seite 1 des Seitenrahmens erscheint, geben Sie PAGE1 ein. Für die weiteren Seiten PAGE2, PAGE3, ... |
PAGE1 |
ObjectNo |
Geben eine Zahl für die Sortierfolge der Liste ein. 1 wird das erste Element, es folgt 2 usw. Die Sortierung wird auf jeder Seite benutzt. |
1 |
Title |
Geben Sie die Überschrift ein, die im Listenfenster im Datei/Öffnen-Dialog erscheint. |
Adressen |
Descr |
Geben Sie einen Beschreibungstext ein, der angezeigt wird, wenn der Benutzer diesen Eintrag ausgewählt hat. |
Liste aller Adressen |
Form |
Geben Sie den Namen des aufzurufenden Formulars ein. |
ADRE |
Parameter |
Wenn Sie an das Formular Parameter übergeben wollen, können Sie diese hier eingeben. |
Obwohl es einen speziellen VFX-Assistenten zur Erstellung von 1:n-Formularen gibt, ist es manchmal besser Child-Daten in einem eigenen Formular zu bearbeiten. Das ist insbesondere dann der Fall, wenn Sie das Child-Formular auch für die direkte Bearbeitung einsetzen wollen und nicht nur durch das Hauptformular einsetzen wollen. Wenn Sie außerdem viele Felder auf dem Child-Formular haben, kann es schwierig werden, diese in einem 1:n-Formular zu bearbeiten.
Im Abschnitt über den VFX Form Builder haben wir bereits das Kontrollkästchen mit dem Namen Has More Functions betrachtet. Wenn Sie dieses Kontrollkästchen markieren, generiert der VFX Form Builder den folgenden Code in der onMore()-Methode des Formulars:
lparameters tnPassThrough
local lcCalledBy, lcFixFieldValue, lcCaption,;
lcFixFieldName, lcFilterExpr
lcCalledBy = ""
lcFixFieldValue = ""
lcCaption = ""
lcFixFieldName = ""
lcFilterExpr = ""
local laFunct[1,5]
laFunct[1,1] = "<Function Title>"
laFunct[1,2] = "<Function Desctiption>"
laFunct[1,3] = "W" && W - Wait Window, F - Form to run
laFunct[1,4] = "<FormName>"
laFunct[1,5] = lcCalledBy + ";" +;
lcFixFieldValue + ";" +;
lcCaption + ";" +;
lcFixFieldName + ";" +;
lcFilterExpr
if alen(laFunct,1) = 1
tnPassThrough = 1
endif
if empty(tnPassThrough)
do form VFXMORE with laFunct, this
else
do form VFXMORE with laFunct, tnPassThrough,this
endif
goProgram.RefreshWindowMenu()
Dieser Vorlagencode kann so aussehen, wenn Sie ihn an Ihre Bedürfnisse angepaßt haben:
lparameters tnPassThrough
local lcCalledBy, lcFixFieldValue, lcCaption,;
lcFixFieldName, lcFilterExpr
lcCalledBy = "PARENT"
lcFixFieldValue = PARENTID
lcCaption = "Child records for " + trim(parent.descr)
lcFixFieldName = "PARENTID"
lcFilterExpr = "PARENTID='"+parentid+"'"
local laFunct[1,5]
laFunct[1,1] = "Child Records"
laFunct[1,2] = "Child Records for selected parent"
laFunct[1,3] = "F" && W - Wait Window, F - Form to run
laFunct[1,4] = "CHILD"
laFunct[1,5] = lcCalledBy + ";" +;
lcFixFieldValue + ";" +;
lcCaption + ";" +;
lcFixFieldName + ";" +;
lcFilterExpr
if alen(laFunct,1) = 1
tnPassThrough = 1
endif
if empty(tnPassThrough)
do form VFXMORE with laFunct, this
else
do form VFXMORE with laFunct, tnPassThrough,this
endif
goProgram.RefreshWindowMenu()
Wenn der Benutzer die verfügbaren Optionen zum aktuellen Datensatz sehen will, hat er verschiedene Möglichkeiten:
Abhängig von dem Code in der Methode onMore() wird der Benutzer einen Dialog sehen, der so ähnlich aussieht, wie der folgende:
Der Aufruf der onMore()-Methode mit dem Parameter tnPassThrough ist sehr nützlich, wenn Sie ein Formular direkt über die zugeordnete Zahl starten wollen. Sie können diese Technik benutzen um ein Formular aus der OnMore()-Methode über eine Schaltfläche aus einer Symbolleiste zu starten.
Wenn es nur eine Option in der OnMore()-Methode gibt, wird das zugeordnete Formular geöffnet, ohne daß dieser Dialog erscheint.
Das Gegenstück eines Formulars, das ein anderes Formular aufruft, ist das aufgerufene Formular. Wie in einem vorhergehenden Kapitel beschrieben, kann es verschiedene Gründe geben, aus denen ein Formular von einem anderen Formular aufgerufen wird.
Wenn Sie ein Formular aufrufen, übergeben Sie die benötigten Parameter an die Init()-Methode dieses Formulars. Da die übergebenen Parameter nicht automatisch für andere Methoden des gleichen Formulars sichtbar sind, speichern VFX-Formulare die benötigten Parameter in speziellen Eigenschaften.
Hier ist der Code der Init()-Methode, den der VFX Form Builder als Vorlage für Ihre Bedürfnisse erzeugt:
lparameters tcArg
local lInitOk
if !empty(tcArg)
if getArgCount(tcArg) <> 0
this.cCalledBy = upper( getArg(tcArg,1) )
this.cFixFieldValue = strtran(getArg(tcArg,2),"@",";")
this.Caption = getArg(tcArg,3)
this.cFixFieldName = strtran(getArg(tcArg,4),"@",";")
this.cFilterExpr = upper( getArg(tcArg,5) )
this.lPutInLastFile = .f.
*******************************************************************
** Set who has called you
if this.cCalledBy = "<CalledBy>"
*******************************************************************
** Disable CPickField that are Fix Fields for this form
*{PickFieldList}*
endif
endif
endif
this.SetQueryArg()
lInitOk =eval(this.class+"::init(tcArg)")
********************************************************
** Insert your extra initialization code here
return lInitOk
Der Vorlagencode kann so aussehen, wenn Sie ihn an Ihre Bedürfnisse angepaßt haben:
lparameters tcArg
local lInitOk
if !empty(tcArg)
if getArgCount(tcArg) <> 0
this.cCalledBy = upper( getArg(tcArg,1) )
this.cFixFieldValue = strtran(getArg(tcArg,2),"@",";")
this.Caption = getArg(tcArg,3)
this.cFixFieldName = strtran(getArg(tcArg,4),"@",";")
this.cFilterExpr = upper( getArg(tcArg,5) )
this.lPutInLastFile = .f.
**********************************************************
** Set who has called you
if this.cCalledBy = "PARENT"
*************************************************************
** Disable CPickField that are Fix Fields for this form
ThisForm.pgfPageFrame.Page1.cntParentid.lFixField = .t.
endif
endif
endif
this.SetQueryArg()
lInitOk =eval(this.class+"::init(tcArg)")
********************************************************
** Insert your extra initialization code here
return lInitOk
Die VFX-Funktion getArg() überprüft die Parameterzeichenkette und zerlegt sie in ihre Bestandteile. Die Bestandteile sind durch Semikolon getrennt. Wenn die cFixFieldValue-Eigenschaft benutzt wird, können Sie eine Zeichenkette haben, die @-Zeichen enthält. Diese Zeichen geben an, daß der Parameter aus mehreren teilen besteht. Das hört sich komplizierter an als es ist.
Sehen Sie sich das Beispiel an. Der übergebene Parameter kann die folgende Zusammensetzung haben, wenn wir das Kontakt-Formular zu einer bestimmten Firma aufrufen:
"COMP;1234567890;Kontakte zur Firma DEAG;CONT_COMP_ID;UPPER(CONT_COMP_ID)= '1234567890'"
Die individuellen Teile dieser Zeichenkette werden in den bereitgestellten Formulareigenschaften gespeichert, bevor sie innerhalb des ganzen Formulars benutzt werden können. Lassen Sie uns die Formulareigenschaften anschauen, die die Informationen aus der übergebenen Parameterzeichenkette tcArg speichern:
VFX-Formulareigenschaft |
Beschreibung |
Beispiel |
---|---|---|
cCalledBy |
Diese Zeichenkette gibt an wie das Formular aufgerufen wurde. |
COMP |
cFixFieldValue |
Der Wert des Feldes aus der Haupttabelle (Primärschlüssel in der Haupttabelle). |
1234567890 |
cFixFieldName |
Der Name des Feldes in der Child-Tabelle, der die 1:n-Beziehung definiert. Dieses Feld erhält den oben angegebenen Wert, wenn ein neuer Datensatz hinzugefügt wird (Fremdschlüssel in der Child-Tabelle). |
CONT_COMP_ID |
cFilterExpr |
Der (idealerweise) Rushmore-optimierte Filterausdruck um die Datensätze entsprechend dem Kriterium der Haupttabelle anzuzeigen. |
UPPER(CONT_COMP_ID)= '1234567890' |
ANMERKUNG: Beachten Sie einen ernsten Fehler in VFP Version 3.0 und 5.0. Die Rushmore-Optimierung mißlingt ab und zu, wenn Sie mit einem Rushmore-optimierbaren Filter und Datenrastern arbeiten. Aus diesem Grund bieten wir eine Alternativlösung, die im ersten Moment etwas komplizierter erscheint. Verwenden Sie den Befehl SET KEY TO anstelle von SET FILTER TO.
Bei sehr großen Datenmengen kann es besser sein mit Ansichten zu arbeiten. Die VFX-Mechanismen arbeiten grundsätzlich genauso. Wenn die Child-Daten aus einer Ansicht stammen, brauchen Sie den Filterausdruck nicht zu übergeben.
Es kann Tabellen geben, aus denen Sie den Primärschlüssel nicht den Benutzern zeigen wollen. Aber für ein korrektes Datenbankdesign wollen Sie einen Primärschlüssel verwenden. Für diese und ähnliche Situationen bietet VFX eine Funktion, die die Erstellung von Primärschlüsseln ermöglicht und in einer Mehrbenutzerumgebung genauso funktioniert, wie in einer Client/Server-Umgebung.
Durch das modulare Design der VFX-Klassenhierarchie, haben Sie die Möglichkeit nach dem Einfügen eines neuen Datensatzes einzugreifen. VFX bietet, neben vielen anderen Funktionen, eine Methode mit dem Namen onPostInsert() die in dem Moment ausgeführt wird, wenn ein neuer Datensatz gerade hinzugefügt wurde. Normalerweise bietet VFX für alle wichtigen Ereignisse Methoden, die automatisch vor, während und nach dem Ereignis ausgeführt werden. In diesem Fall, in dem ein neuer Datensatz hinzugefügt wird, gibt es die folgenden Methoden:
Außerdem gibt es eine Eigenschaft die angibt, ob der Benutzer einen neuen Datensatz aufnehmen kann. Diese Eigenschaft trägt den Namen lCanInsert.
ANMERKUNG: Für weitere Informationen lesen Sie bitte die VFX Technische Referenz.
Um einen Identifizierungsschlüssel zu erzeugen könnten Sie in die onPostInsert()-Methode Ihres Formulars etwa folgenden Code einfügen. Hierdurch wird die Funktion GetNewId() aufgerufen. Der Parameter zeigt der Funktion für welche Situation der generierte Schlüssel benötigt wird.
CDataFormPage::onPostInsert()
thisForm.pgfPageFrame.Page2.txtComp_ID.Value = GetNewId('COMP_ID')
IF !EMPTY(m.gs_CTRY_ID) AND EMPTY(COMP_CTRY_ID)
thisForm.pgfPageFrame.Page1.cntcomp_ctry_id.SetCodeValue( ;
m.gs_CTRY_ID, .T.)
ENDIF
Der Zähler für den generierten Schlüssel wird in der Tabelle VFXSYSID gespeichert.
ANMERKUNG: Beachten Sie den Geltungsbereich-Auflösungs-Operator ::, durch den die onPostInsert()-Methode der übergeordneten Klasse CDataFormPage aufgerufen wird. Wenn Sie diese Zeile nicht einfügen, verlieren Sie die Vererbung der übergeordneten Klasse für diese Methode. Normalerweise werden Sie den Code der übergeordneten Methode ausführen, bevor Sie Ihren eigenen Code ausführen. Je nach Situation werden Sie den Code der übergeordneten Methode evtl. nicht ausführen wollen.
Für eine vollständige Diskussion der Funktion GetNewId, lesen Sie bitte in der VFX Technischen Referenz nach.
Starten Sie Ihre Anwendung, wählen Sie im Menü Datei, Öffnen und wählen Sie Ihr neu erstelltes Formular aus dem Dialog. Testen Sie es und prüfen Sie, wo Ihr Formular erweitert werden muß.
Um mit dem VFX Form Builder besser vertraut zu werden, lohnt es sich einige Formulare zu generieren. Beginnend mit einfachen Formularen, später auch Formularen, die andere Formulare aufrufen. Starten Sie mit einfachen Beispielen und erhöhen Sie die Komplexität schrittweise.
Nachdem Sie mit dem Erstellen von Standard-VFX-Datenbearbeitungs-Formularen vertraut sind, können Sie sich an die nächste Herausforderung heranwagen: das 1:n-Datenbearbeitungs-Formular.
Das 1:n-Formular ist eine Weiterentwicklung des Standard-VFX-Datenbearbeitungs-Formulars. Das bedeutet, daß Sie auf einem einzigen Formular die normalen Datenbearbeitungsfunktionen haben können und ein Datenraster mit den Child-Datensätzen zu dem aktuell angezeigten Hauptdatensatz haben. VFX erlaubt es Ihnen auch mehrere Child-Tabellen zu einer Haupttabelle auf mehreren Seiten eines Seitenrahmens zu bearbeiten. Wenn Sie viele Eingabefelder in Ihrer Child-Tabelle haben, können Sie die Felder auf mehrere Seiten eines Seitenrahmens verteilen. Das erlaubt Ihnen eine große Anzahl verschiedenster Anwendungen abzudecken ohne wirklich programmieren zu müssen. Alles was Sie wissen müssen ist, wie man ein 1:n-Formular erstellt, die zugehörige Datenbank einrichtet und durch welche Felder die Haupttabelle und die Child-Tabelle miteinander verbunden sind. Lassen Sie uns ein einfaches Beispiel betrachten:
Bitte lesen Sie im Kapitel Diskussion des VFX-1:n-Datenbearbeitungs-Formulars weiter unten in diesem Handbuch nach, um eine Vorstellung über die Bedienung von 1:n-Formularen zu bekommen, die mit VFX erstellt wurden.
Wie schon weiter oben in diesem Handbuch beschrieben, müssen Sie die Datenbank Ihrer Anwendung einrichten. Definieren Sie Ihre Tabellen, Felder und Indexschlüssel und auch Feldüberschriften. Die VFX-Assistenten benutzen diese Informationen, so daß Sie die Überschriften nicht nochmals eingeben müssen.
Bevor Sie ein 1:n-Formular erstellen, sollten Sie die Grundlagen des Datenbank-Designs und insbesondere 1:n-Beziehungen beherrschen. In 1:n-Beziehungen stellen Sie die Verbindung von einem Hauptdatensatz zu den Child-Datensätzen her. Ein gutes Beispiel für eine 1:n-Beziehung ist die Verbindung zwischen Aufträgen (Haupttabelle) und Auftragspositionen (Child-Tabelle) in jedem Auftragsbearbeitungssystem.
ANMERKUNG: Wenn Sie die referentielle Integrität (RI) nicht manuell mit Hilfe der VFX-Methoden wie OnPostDelete() herstellen wollen, ist es sinnvoll den RI-Code im Datenbank-Designer anzulegen, bevor Sie mit der Erstellung von 1:n-Formularen beginnen. Wenn Sie diese Arbeit manuell erledigen wollen, müssen Sie den Code für das Löschen von Hauptdatensätzen und den zugehörigen Child-Datensätzen von Hand schreiben. Wenn Sie außerdem die Änderung des Schlüsselfeldes in der Haupttabelle erlauben, müssen Sie auch den Code schreiben um die Child-Datensätze zu aktualisieren.
Wenn Sie ein neues Formular aus dem Projekt-Manager Ihres neuen Projektes erstellen, sehen Sie entweder ein leeres Formular Form1 oder, wenn Sie die Klassenvorlage für Formulare auf COneToMany oder COneToManyBar eingestellt haben, ein entsprechendes leeres Formular. Wenn Sie ein leeres Formular Form1 sehen, ziehen Sie per Drag & Drop die Klasse COneToMany oder COneToManyBar auf Ihr Formular aus der Klassenbibliothek VFXFORM.
WICHTIG: Denken Sie daran das leere Formular Form1 und das leere FormSet1 nach Ihrer Drag & Drop-Operation zu löschen! (Hinweis: Sie müssen das neu angelegte Formular verschieben um Form1 hinter dem VFX-Formular sehen zu können. Das FormSet1 ist unsichtbar und kann aus dem Menü gelöscht werden.)
Tip: Wenn Ihnen das alles zu viel Arbeit ist, benutzen Sie den VFX Form Wizard. Dieser Assistent erstellt ein neues Formular auf einer auszuwählenden VFX-Basisklasse und Ihr neues Formular ist sofort bereit!
Der VFX OneToMany Form Builder hilft Ihnen bei der Erstellung von anspruchsvollen 1:n-Formularen, fast ohne zu programmieren. Wenn Sie die 1:n-Beziehung zwischen der Child-Tabelle und der Haupttabelle hergestellt haben, können Sie 1:n-Formulare genauso einfach erstellen, wie Standard-VFX-Datenbearbeitungsformulare. (Wenn Sie mehrere Child-Tabellen mit einer Haupttabelle verbinden wollen, müssen Sie von jeder Child-Tabelle eine Beziehung zu der Haupttabelle herstellen.
WICHTIG: Denken Sie daran den InitialSelectedAlias in der Datenumgebung anzugeben sowie die Order-Eigenschaft in den Tabellen Ihrer Datenumgebung. Außerdem müssen Sie die 1:n-Beziehung zwischen der Haupttabelle und der Child-Tabelle herstellen. Ansonsten wird Ihr Formular nicht so funktionieren, wie Sie es erwarten!
Um den VFX Form Builder aufzurufen bewegen Sie die Maus auf den weißen Hintergrund des Formular-Designers, drücken Sie die rechte Maustaste und wählen Sie Steuerelement-Assistent. In VFP 3.0 können Sie auch die Schaltfläche Steuerelement-Assistent im Eigenschaftsfenster wählen, wenn das Formular das aktuelle Objekt ist.
ANMERKUNG: Wenn Sie eine Meldung erhalten, daß es keinen Steuerelement-Assistenten für das ausgewählte Objekt gibt oder wenn ein Standard-Visual FoxPro-Assistent erscheint, prüfen Sie ob Sie alle Installationshinweise in diesem Handbuch befolgt haben und das Sie das Formularobjekt ausgewählt haben. Ein verbreiteter Fehler ist, den Seitenrahmen anstelle des Formularobjektes auszuwählen. Prüfen Sie das angezeigte Objekt im Eigenschaftsfenster, wenn Sie nicht sicher sind, ob das Formularobjekt ausgewählt ist.
Der VFX OneToMany Form Builder hat eine intuitive Bedienung. Bearbeiten Sie zunächst die folgenden Optionen:
Form Name. Siehe Beschreibung im Kapitel Der VFX Form Builder.
Caption. Siehe Beschreibung im Kapitel Der VFX Form Builder.
Master Table. Name der Haupttabelle oder Ansicht.
Als nächstes bearbeiten Sie den Seitenrahmen mit den Seiten Edit Pages, Parent Grid Page, Form Options und Child Grids, die hier erklärt sind:
Auf der Seite mit dem Namen Edit Pages sehen Sie die gleichen Bedienungselemente wie im VFX Form Builder, der weiter oben in diesem Handbuch beschrieben wurde. Hier legen Sie die Eigenschaften der Bearbeitungsseiten für die Haupttabelle fest:
Auf der Seite mit dem Namen Parent Grid Page sehen Sie die gleichen Bedienungselemente wie im VFX Form Builder, der weiter oben in diesem Handbuch beschrieben wurde. Hier beschreiben Sie die Eigenschaften des Datenrasters für die Haupttabelle:
Auf der Seite mit dem Namen Form Options sehen Sie die gleichen Bedienungselemente wie im VFX Form Builder, der weiter oben in diesem Handbuch beschrieben wurde. Hier wählen Sie die Optionen für das 1:n-Formular:
Auf der Seite mit dem Namen Child Grids geben Sie an wie das oder die Datenraster mit den Child-Daten aussehen sollen:
Page Count. Geben Sie ein wieviel Child-Datenraster Ihr Formular haben soll. Für die meisten 1:n-Formulare wird ein Datenraster ausreichen. Wenn Sie mehrere Child-Tabellen haben, werden Sie diese über mehrere Seiten verteilen wollen. Entsprechend der Anzahl der Seiten die Sie gewählt haben, erscheint der Seitenrahmen des Formular-Assistenten mit der gewählten Anzahl von Seiten. Wenn Sie zwei Seiten einstellen, hat der Seitenrahmen zwei Seiten, wenn Sie drei Seiten einstellen, hat der Seitenrahmen drei Seiten usw.
Page Title. Geben Sie die Überschrift für das aktuell gewählte Child-Datenraster an. Wenn Sie die Überschrift für die zweite Seite eingeben wollen, drücken Sie auf die zweite Seite. Der VFX OneToMany Form Builder zeigt sofort den eingegebenen Text als Überschrift der jeweiligen Seite an.
Child Table. Geben Sie die Datenquelle für Ihr Child-Datenraster an. Achtung: Es ist sehr wichtig diese Einstellung zu machen. Wenn Sie diese Eigenschaft nicht einstellen, wird Ihr Formular nicht richtig funktionieren.
Justified Tab. Markieren Sie dieses Kontrollkästchen wenn die Seitenüberschriften justiert sein sollen. Ansonsten haben die Überschriften eine variable Länge und füllen nicht die Breite des Seitenrahmens.
Inplace Editing. Markieren Sie diese Option, wenn Sie Daten in das Child-Datenraster eingeben wollen, was normalerweise der Fall ist.
^Ins+^Canc. Markieren Sie diese Option, wenn Sie die Möglichkeit haben wollen mit Strg+Einfg Datensätze einzufügen und mit Strg+Entf Datensätze im Child-Datenraster zu löschen.
Die anderen Optionen sind mit denen auf der Datenrasterseite des VFX Form Builder identisch.
Der VFX Child Grid Builder erlaubt Ihnen die Funktionalität der Child-Datenraster zu erweitern. Benutzen Sie diesen Assistenten um die Felder für das Datenraster zusammenzustellen oder um den Code der Methode OnPostInsert() zu bearbeiten. Diese Methode wird immer dann ausgeführt, wenn dem Child-Datenraster ein neuer Datensatz hinzugefügt wurde. Ähnlich wie im Standard-VFX-Datenbearbeitungsformular stehen Ihnen hier die folgenden Ereignisse zur Verfügung:
In der OnPostInsert()-Methode des Child-Datenrasters müssen Sie das Feld der Child-Tabelle ausfüllen, das die Verknüpfung zur Haupttabelle herstellt. Normalerweise benötigen Sie dafür folgenden Code:
REPLACE <ChildTable.ChildLinkField> WITH <Master.MasterField>
Der VFX Child Grid Builder ist wie folgt zu bedienen:
Auf der ersten Seite mit dem Namen Grid können Sie das Child-Datenraster, wie weiter oben in diesem Abschnitt beschrieben, anpassen:
Auf der zweiten Seite mit dem Namen Options können Sie den Code der OnPostInsert()-Methode bearbeiten um das Feld der Child-Tabelle mit dem Wert der Haupttabelle zu füllen.
ANMERKUNG: Der Grund, aus dem der VFX-Assistent den Code der OnPostInsert()-Methode nicht automatisch generieren kann, ist, daß Sie zusammengesetzte Schlüssel verwenden könnten oder mehreren Feldern in der Child-Tabelle Werte zuweisen möchten. Zur Zeit müssen Sie den Code dieser Methode manuell bearbeiten. In künftigen Versionen von VFX werden wir eine einfachere Handhabung vorsehen.
Visual Extend bietet einen Assistenten um leistungsfähige Auswahltextfelder zu erstellen. Die Auswahltextfelder können in Child-Datenrastern verwendet werden.
Um den VFX Pick TextBox Builder aufzurufen, wählen Sie die Spalte im Datenraster, die das Auswahltextfeld erhalten soll und wählen Sie den Menüpunkt VFX Power Builder aus dem VFX-Menü:
Der VFX Pick TextBox Builder ist in der Bedienung dem normalen VFX Pickfield Builder ähnlich und ist ebenfalls voll wiederverwendbar: