VFX 10.0 - Workshop - dFPUG

Werbung
VFX 10.0 – Workshop
Juni 2008
©
Dipl.-Inform. Uwe Habermann
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Visual Extend 10.0
Seite 1
Einführung
In diesem Workshop werden wichtige neue Features von VFX 10.0 demonstriert und die Teilnehmer haben die
Möglichkeit die Anwendung dieser neuen Features unterstützt kennezulernen.
Um dem weniger geübten Teilnehmer den Einstieg zu erleichtern, wird in diesem Dokument ein Überblick über
die Leistungsfähigkeit des Frameworks Visual Extend gegeben.
In diesem Workshop erarbeiten wir uns die Möglichkeiten der neuen Version von Visual Extend zu verstehen
und in eigenen Anwendungen zu nutzen.
Zu den Themen gehören:
• Einsatz der angepassten DBI Sedna Controls unter VFX
• Datenbanksynchronisation mit VFX in der Praxis
• Produktaktivierung und Kunderverwaltung unter VFX
• Updates: Aktualisierung von Anwendungen über das Internet sowie Aktualisierung der Datenbankstruktur von
DBC und SQL Server Datenbanken
Visual Extend 10.0
Seite 2
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
VFX – Was ist das?
Visual Extend 10.0 ist ein Builder-unterstütztes Framework. Es besteht aus einer Musteranwendung und aus
reentranten Buildern. VFX ermöglicht es Anwendungen zu erstellen, die auf Tabellen als Datenquelle basieren
oder eine Remote-Datenquelle verwenden. Die mit VFX erstellten Anwendungen sind in ihrer Bedienung weitgehend kompatibel zu den bekannten Office-Anwendungen. Es können Anwendungen in den Sprachen Deutsch,
Englisch, Französisch, Italienisch und Spanisch erstellt werden.
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Visual Extend 10.0
Seite 3
Installation
Hardware- und Software-Anforderungen
Da es sich bei Visual Extend um eine Erweiterung zu Microsoft Visual FoxPro 9 handelt, benötigen Sie eine
Hard- und Softwareumgebung, auf der Visual FoxPro 9 eingesetzt werden kann. Lesen Sie bitte bei den
Systemanforderungen zu Microsoft Visual FoxPro nach.
Die Installation von VFX
Starten Sie das Installationsprogramm mit dem Namen VFX95Setup.exe und folgen Sie den Anweisungen auf
dem Bildschirm.
Installieren Sie VFX 10.0 in einen neuen Ordner. Installieren Sie VFX 10.0 nicht in den Ordner, in dem
sich eine frühere Version von VFX befindet!
Der VFX-Ordner dient als zentraler Speicherplatz aller VFX-Komponenten und ist die Basis aller Projekte, die
Sie mit dem VFX-Anwendungs-Assistenten erstellen, wie später in diesem Dokument beschrieben ist.
HINWEIS: Arbeiten Sie in diesem Projekt nicht direkt. Es ist NICHT für die direkte Bearbeitung gedacht.
Verwenden Sie den Anwendungs-Assistenten, um ein neues Projekt zu erstellen.
Registrierung und Aktivierung von VFX 10.0
Wie bisherige Versionen von VFX ist auch VFX 10.0 über eine Produktaktivierung geschützt. Die Aktivierung
von VFX 10.0 erfolgt mit einem Web Service. Der Vorteil ist, dass der Aktivierungsschlüssel unmittelbar an den
Entwickler-PC gesendet wird und manuelle Tätigkeiten bei zur Eingabe des Schlüssels entfallen.
VFX 10.0 hat einen Software-Kopierschutz. Nach der Installation, beim ersten Start eines VFX-Builders oder des
VFX-Menüs wird ein Registrierungsdialog angezeigt. Bitte füllen Sie alle erforderlichen Eingabefelder aus und
klicken Sie auf die Schaltfläche „Register Online“. Ihre persönlichen Daten werden über das Internet an einen
Web Service des VFX-Registrierungs-Internet-Servers übertragen. Als Antwort erhalten Sie von dem Web
Service einen Aktivierungsschlüssel, der auf der Festplatte Ihres Computers gespeichert wird. Der Aktivierungsschlüssel ist für 30 Tage gültig. In dieser Zeit können Sie den vollen Funktionsumfang von VFX testen.
Sollte Ihnen die Aktivierung über den Web Service nicht möglich sein, können Sie auf der Website
http://www.visualextend.de
einen Aktivierungsschlüssel bestellen. Sie bekommen den Aktivierungsschlüssel dann per E-Mail zugesendet.
Wenn VFX 10.0 mit einem 30-Tage-Testschlüssel betrieben wird, wird in einem Dialog die Restlaufzeit in Tagen
angezeigt. Über die Schaltfläche Buy VFX wird die Website von Visual Extend angezeigt und es kann online eine
Lizenz erworben werden. Nach Zahlungseingang erhalten Sie einen unbefristet gültigen Aktivierungsschlüssel
per E-Mail zugestellt.
Beachten Sie, dass Sie die Installation von VFX nicht von einem PC auf einen anderen PC kopieren können ohne
einen neuen Aktivierungsschlüssel anfordern zu müssen. Ihre Registrierungsnummer wird aus den Daten Ihres
PCs ermittelt und ist einmalig. Jeder VFX-Benutzer hat eine andere, einmalige Registrierungsnummer und muss
sich daher online registrieren, um den Aktivierungsschlüssel zu bekommen. Erst dann ist die Arbeit mit den
VFX-Buildern möglich.
Wir hoffen, dass Sie den Software-basierten Schutz begrüßen und heißen Sie willkommen zur nächsten Generation von VFX. Dem besten VFX, das es je gab!
Einstellen der Visual FoxPro Umgebung für VFX
Sie müssen Microsoft Visual FoxPro 9 funktionsfähig installiert haben, bevor Sie die Arbeit mit VFX 10.0
beginnen können.
Visual Extend 10.0
Seite 4
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Als nächstes sollten Sie sicherstellen, dass das VFX 10.0-Menü jedes Mal automatisch erscheint, wenn Sie Ihr
Visual FoxPro 9 starten. Starten Sie die Anwendung Vfxmnu.app direkt aus dem Windows-Explorer oder aus
dem VFP-Befehlsfenster. Die Anwendung Vfxmnu.app befindet sich im Ordner Builder Ihrer VFX-Installation.
Wir schlagen folgenden Weg vor:
Fügen Sie diese Zeile der Datei CONFIG.FPW in Ihrem VFP 9-Ordner hinzu:
ANMERKUNG: Wenn Sie keine Datei mit dem Namen CONFIG.FPW haben, können Sie diese Datei mit dem
Editor anlegen.
command = do (HOME() +"vfx.prg")
Diese Zeile teilt VFP mit, dass das Programm VFX.PRG ausgeführt werden soll, wenn VFP gestartet wird. In der
Datei VFX.PRG (erstellen Sie diese Datei ebenfalls mit dem Editor und speichern Sie diese auch im VFPOrdner) fügen Sie folgende Zeile hinzu:
do c:\programme\vfx95\builder\vfxmnu.app
Wir gehen hier davon aus, dass VFX im Ordner C:\Programme\VFX95 installiert ist. Passen Sie den Pfad ggf.
an.
Beim Start des VFX-Menüs werden automatisch die folgenden Einstellungen in VFP gemacht:
 Builder: zeigt Sie auf den VFX-Anwendungs-Assistenten mit dem Namen VFXBLDR.APP im Ordner
\VFX95\BUILDER.
 Suchpfad: \VFX95\BUILDER wird dem Suchpfad hinzugefügt.
Beim ersten Start von VFP nach der Installation von VFX 10.0 wird die VFX 10.0 Task Pane automatisch in die
VFP Task Pane integriert.
Wichtiger Hinweis: Stellen Sie sicher, dass Sie sich immer im Ordner Ihrer Anwendung befinden!
Benutzen Sie den Befehl cd ? im Befehlsfenster, um den aktuellen Pfad zu prüfen oder noch besser, verwenden
Sie die VFX Task Pane für ein einfaches Wechseln zwischen den verschiedenen Projekten, ohne dass Sie den
Ordner manuell ändern müssen. Wenn Sie sich in einem falschen Ordner befinden, wird Visual FoxPro unter
Umständen andere Include-Dateien oder Klassenbibliotheken verwenden als Sie erwarten.
Das beste Werkzeug um zwischen Projekten zu wechseln, ist die VFX 10.0 Task Pane. Sie können die Task
Pane über den VFP-Menüpunkt Extras, Task Pane öffnen. Wir empfehlen die VFP Task Pane beim Start von
VFP automatisch öffnen zu lassen. Wählen Sie hierzu im Task Pane Manager die Option „Open the Task Pane
Manager when Visual FoxPro starts“.
Erstellen einer VFX 10.0-Anwendung
Ein neues VFX-Projekt kann innerhalb einer Minute angelegt werden. Wenn die Datenbank bereits vorhanden
ist, können mithilfe der VFX-Formulargeneratoren in kurzer Zeit zahlreiche Standardbearbeitungsformulare
erstellt werden. Ein Prototyp einer Anwendung ist so, ohne Programmierung, sehr schnell erstellt.
Die VFX-Anwendung kann jederzeit mit normalen VFP-Mitteln weiterentwickelt werden.
VFX – Application Wizard
Mit dem VFX – Application Wizard wird ein neues VFX Projekt angelegt. In einigen Dialogschritten wird der
Entwickler aufgefordert die zum Erstellen des Projekts erforderlichen Angaben zu machen.
VFX bietet keine Werkzeuge zur Erstellung oder Bearbeitung der Datenbank. Der Entwickler kann also den VFP
Datenbank-Designer oder ein Produkt eines Drittanbieters verwenden. Wenn bereits eine Datenbank vorhanden
ist, sollte der Name dieser Datenbank im VFX – Application Wizard eingetragen werden.
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Visual Extend 10.0
Seite 5
Die auf der Seite About gemachten Angaben werden in der Include-Datei Usertxt.h gespeichert. Zur Laufzeit der
Anwendung werden die Daten im About-Dialog angezeigt. Der Titel der Anwendung wird außerdem in der
Caption der Anwendung angezeigt.
Im dritten Dialogschritt muss insbesondere die Sprache der zu erstellenden Anwendung angegeben werden. VFX
kann Anwendungen in Deutsch, Englisch, Französisch, Italienisch und Spanisch erstellen.
Visual Extend 10.0
Seite 6
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Die weiteren Optionen können bei Bedarf später in Vfxmain.prg geändert werden.
Auf der letzten Seite des Application Wizard werden schließlich Angaben gemacht, die in den Projektinformationen gespeichert werden.
Beim Erstellen des Projekts wird die VFX-Musterapplikation in den neuen Projektordner kopiert. Entsprechend
der gewählten Sprache werden Include-Dateien und Menüs hinzugefügt. Zum Schluss wird das neue Projekt vollständig neu kompiliert und kann dann sofort ausgeführt werden.
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Visual Extend 10.0
Seite 7
VFX – Application Builder
Dieser Dialog kann jederzeit über den Menüpunkt Project, Application Builder aufgerufen werden, um Einstellungen des Anwendungsobjekts zu ändern.
ANMERKUNG: Wenn im VFX – Application Builder das Kontrollkästchen „Save settings for future use“
markiert wird, werden die gemachten Einstellungen für das nächste neue Projekt übernommen.
Visual Extend 10.0
Seite 8
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
VFX 10.0 Task Pane
Der VFX – Application Manager ist in die VFP Task Pane integriert.
Über die Symbolleiste stehen folgende Funktionen zur Verfügung:
New Project
Startet den VFX – Application Wizard.
Open Project
Öffnet ein VFP-Projekt und stellt den aktuellen Pfad auf den Projektordner.
Modify Project
Öffnet das in der VFX 10.0 Task Pane selektierte Projekt und stellt den aktuellen Pfad auf den
Projektordner.
Add Project
Fügt ein vorhandenes VFP-Projekt der VFX 10.0 Task Pane hinzu.
Rebuild
Neu kompilieren aller Dateien des in der VFX 10.0 Task Pane selektierten Projekts. Das Projekt wird nach dem kompilieren zur Bearbeitung geöffnet.
Project Update Aktualisierung eines VFX-Projekts auf die aktuelle Version und den aktuellen Build von VFX.
Properties
Start der VFX – Project Properties zum in der VFX 10.0 Task Pane selektierten Projekt.
Project Backup Archivierung des aktuellen Projekts in einer Zip-Datei.
Delete
Entfernt das selektierte Projekt aus der VFX 10.0 Task Pane.
Der Vorteil des VFX – Application Manager ist, dass nicht nur das Projekt geöffnet wird, sondern dass auch das
aktuelle Verzeichnis auf das Projektverzeichnis gesetzt wird. Der VFX – Application Manager sollte daher unbedingt zum Öffnen von Projekten verwendet werden.
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Visual Extend 10.0
Seite 9
Diskussion der erstellten VFX-Anwendung
Nach einer erfolgreichen Anwendungsgenerierung mit dem VFX-Anwendungs-Assistenten, 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 bis hin zum
Infodialog.
Die Anwendung hat einen About-Dialog, der über den Menüpunkt Hilfe, Info erreicht werden kann.
Visual Extend 10.0
Seite 10
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Eine Verwaltung der Benutzerdaten und der Benutzerrechte sind fertig integriert.
Benutzer haben erweiterte Möglichkeiten ihre Umgebung anzupassen. Der Entwickler kann es Benutzern
erlauben ihre Umgebungseinstellungen zu ändern, indem die Eigenschaft lAllowUserCustomization des
Anwendungsobjekts auf .T. eingestellt wird.
goProgram.lAllowUserCustomization=.T.
Wenn diese Eigenschaft auf .T. eingestellt ist, kann der Administrator allen Benutzern erlauben die Umgebungseinstellungen zu ändern. Wenn diese Eigenschaft auf .F. eingestellt ist, ist das Kontrollkästchen Anpassungen je Benutzer ermöglichen für den Administrator nicht sichtbar und die Umgebungseinstellungen können in
der Anwendung grundsätzlich nicht eingestellt werden.
Wenn der Administrator anderen Benutzern nicht erlaubt Umgebungseinstellungen anzupassen, gelten die Einstellungen des Administrators für alle Benutzer der Anwendung.
Benutzergruppen
Zusätzlich zu den bisherigen Möglichkeiten zur Vergabe von Benutzerrechten, können jetzt Benutzergruppen
angelegt werden. Benutzer können Mitglied von einer oder mehreren Benutzergruppen sein. Benutzergruppen
können Rechte zugewiesen werden. Wenn ein Benutzer Mitglied von mehreren Benutzergruppen ist, erhält er die
Rechte von allen Benutzergruppen.
Benutzer mit Administratorrechten (Benutzerstufe 1) können Benutzergruppen anlegen und jeder Gruppe für
jedes Formular individuelle Rechte zuweisen. Benutzerrechte können für alle Formulare eingestellt werden, die
in der Tabelle Vfxfopen.dbf eingetragen sind.
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Visual Extend 10.0
Seite 11
Zur Laufzeit wird ein globales Objekt goUserRights instanziiert. Dieses Objekt enthält Child-Objekte für jedes
Formular der Anwendung. Die Namen dieser Objekte entsprechen den Namen der Formulare. Jedes dieser
Objekte besitzt die Eigenschaften deletepermit, editpermit, newpermit, printpermit und viewpermit.
Die Eigenschaften des Objekts goUserRights sehen zur Laufzeit so aus:
Wenn einem Benutzer keiner Benutzergruppe zugeordnet ist, gilt die Benutzerstufe wie in früheren VFX-Versionen.
Visual Extend 10.0
Seite 12
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Der Administrator hat die Benutzerstufe 1 und damit alle Rechte. Ein Benutzer, der die Benutzerstufe 99 hat, hat
die wenigsten Rechte. Im Formular Benutzerrechte kann für jedes Formular festgelegt werden, welche
Benutzerstufe erforderlich ist um das Formular anzeigen zu können, um neue Datensätze erfassen zu können, um
vorhandenen Datensätze bearbeiten zu können und um Datensätze löschen zu können.
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.
Wenn ein Benutzer nicht das Recht hat ein Formular anzuzeigen, wird das betreffende Formular nicht instanziiert. Solange im Dialog Benutzerrechte keine Benutzerstufen eingetragen sind, gelten die Einstellungen, die mit
dem VFX – Form Wizard in den Formular-Eigenschaften lcaninsert, lcancopy, lcanedit und lcandelete hinterlegt
sind.
Wenn ein Benutzer nicht das Recht hat ein Formular anzuzeigen, wird das betreffende Formular nicht instanziiert
und erscheint nicht im Öffnen-Dialog.
Solange im Dialog Benutzerrechte keine Benutzerstufen eingetragen sind, gelten die Einstellungen, die mit dem
VFX Form Wizard in den Formular-Eigenschaften lcaninsert, lcancopy, lcanedit und lcandelete hinterlegt sind.
Die Anwendung hat ein Menü und eine Symbolleiste, die an die bekannten Office-Anwendungen erinnern lassen.
Die VFX-Menüs enthalten Icons.
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Visual Extend 10.0
Seite 13
VFX-Anwendungen haben eine Standard-Symbolleiste, die Sie einfach um Ihre anwendungsspezifischen
Schaltflächen erweitern können. Dadurch haben Benutzer einfachen Zugriff auf die Funktionen, die Ihre
Anwendung bietet. Die VFX-Symbolleisten erscheinen im „Hot Tracking“ Layout.
Neu (Strg+N)
Anlegen eines neuen Datensatzes.
Kopiere Datensatz
Der angezeigte Datensatz wird in einen neuen Datensatz kopiert.
Öffnen (Strg+O)
Öffnet den Öffnen-Dialog am linken Bildschirmrand.
Speichern (Strg+S)
Speichern der Änderungen im aktiven Formular.
E-Mail
Versenden einer E-Mail aus der Berichtsausgabe aus dem aktiven
Formular.
Drucken (Strg+P)
Drucken eines Berichts oder einer Liste aus dem aktiven Formular.
Seitenansicht
Anzeige der Druckvorschau eines Berichts oder einer Liste aus dem
aktiven Formular.
Fax
Versenden eines Fax aus der Berichtsausgabe aus dem aktiven Formular.
Ausschneiden (Strg+X)
Entfernt die Markierung und überträgt sie in die Zwischenablage.
Kopieren (Strg+C)
Kopiert die Markierung in die Zwischenablage.
Einfügen (Strg+V)
Fügt den Inhalt der Zwischenablage ein.
Rückgängig (Strg+Z)
Macht die Änderungen in aktuellen Formular rückgängig.
Weitere Funktionen (F6)
Öffnet das Fenster mit weiteren Funktionen zum aktuellen Formular.
Bearbeitungsprotokoll
Öffnet das Formular mit dem Bearbeitungsprotokoll zum aktuellen
Datensatz im aktiven Formular.
Bildschirminhalt drucken
Die aktuelle Bildschirmansicht wird gedruckt.
Bearbeiten (Strg+E)
Schaltet das aktive Formular in den Bearbeitungsmodus.
Löschen (Strg+D)
Löscht den aktuellen Datensatz im aktiven Formular.
Filtern (Strg+F)
Filtern der Daten im aktiven Formular nach einzugebenden Kriterien.
Anfang (Strg+Pos1)
Bewegt den Datensatzzeiger auf den Anfang der Tabelle oder Ansicht.
Rückwärts blättern (Strg+Pfeil oben)
Bewegt den Datensatzzeiger auf den vorherigen Datensatz der Tabelle
oder Ansicht.
Vorwärts blättern (Strg+Pfeil unten)
Bewegt den Datensatzzeiger auf den nächsten Datensatz der Tabelle
oder Ansicht.
Ende (Strg+Ende)
Bewegt den Datensatzzeiger auf das Ende der Tabelle oder Ansicht.
User
Beispiel für eine individuell zu verwendende Schaltfläche.
Aktualisieren (F5)
Aktualisieren der Ansicht des aktiven Formulars nach der Eingabe von
Parametern zur Datenselektion.
Visual Extend 10.0
Seite 14
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Hilfe (F1)
Aufruf der kontextsensitiven Hilfe.
Benutzerwechsel
Ermöglicht die Anmeldung eines anderen Benutzers während das Programm läuft.
Schließen (ESC)
Das aktive Formular wird geschlossen.
Öffnen-Dialog
Formulare werden standardmäßig über den Öffnen-Dialog gestartet. Der Öffnen-Dialog erscheint im Windows
XP-Layout. Die Informationen der Formulare, die im Öffnen-Dialog angezeigt werden, stehen in der Tabelle
Vfxfopen.dbf.
Datenbankwartung
Über den Menüpunkt System – Datenbankwartung wird ein Formular mit einem Mover-Dialog angezeigt.
Hier können Tabellen gepackt oder indiziert werden.
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Visual Extend 10.0
Seite 15
Erstellen von Formularen
VFX – Form Wizard
Mit Hilfe des VFX – Form Wizard wird ein neues Formular auf der Basis einer VFX-Formularklasse angelegt
und in das Projekt eingetragen. Die am häufigsten verwendete Formularklasse ist die Klasse CDataFormPage.
VFX – Data Environment Builder
Im nächsten Schritt wird in jedem VFX Form Builder die Datenumgebung bearbeitet. Die von dem Formular zu
verwendenden Tabellen oder Ansichten sind in der Datenumgebung einzutragen.
Der Datenumgebung können Tabellen, Ansichten oder bestehende CursorAdapter-Klassen hinzugefügt werden
oder auch neue CursorAdapter-Klassen erstellt werden. Mit einem Klick auf die Schaltfläche Add können
bestehende Tabellen oder Ansichten der Datenumgebung hinzugefügt werden. Der VFP-Dialog zur Auswahl von
Tabellen und Ansichten wird geöffnet. Wenn ein Cursor in der Datenumgebung auf einer Tabelle basiert, kann in
der Spalte Order ein Index der Tabelle gewählt werden. Wenn ein Cursor in der Datenumgebung auf einer
CursorAdapter-Klasse basiert und für diesen CursorAdapter Indexschlüssel definiert wurden, kann aus diesen
Indexschlüsseln in der Spalte Order ebenfalls ausgewählt werden.
Für ein einfaches Formular zur Bearbeitung von Daten aus einer Tabelle ist es ausreichend diese Tabelle der
Datenumgebung hinzuzufügen. Anschließend können dem Formular mit dem VFX – Form Builder Steuerelemente hinzugefügt werden.
Der VFX – Form Builder liest die Datenumgebung aus und stellt die Felder der Tabellen zur Auswahl um Steuerelemente zu erstellen. Zur Laufzeit wird die Datenumgebung ebenfalls ausgelesen um die Tabellen zu ermitteln, für die ein Tableupdate bzw. Tablerevert durchgeführt werden muss.
Der VFX – Form Builder
Mit dem Form Builder werden die für das Formular benötigten Steuerelemente erstellt. Für jedes Steuerelement
können dabei die zugrunde liegende VFX-Klasse gewählt sowie viele Eigenschaften eingestellt werden.
Beim ersten Erstellen des Formulars wird automatisch ein Eintrag in der Tabelle Vfxfopen.dbf angelegt, sodass
das Formular über den Öffnen-Dialog gestartet werden kann.
Visual Extend 10.0
Seite 16
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Der VFX – Form Builder ist voll reentrant. Das heißt, man kann den Builder beliebig oft aufrufen um Einstellungen an einem Formular zu verändern. Es ist auch möglich das Formular von Hand mit VFP zu bearbeiten und
anschließend wieder mit dem Form Builder zu arbeiten, ohne dass Einstellungen verloren gehen oder überschrieben werden.
VFX - COneToMany Builder
Das 1:n-Formular ist eine Weiterentwicklung des Standard-VFX-Datenbearbeitungs-Formulars. Das bedeutet,
dass Sie auf einem einzigen Formular die normalen Datenbearbeitungsfunktionen haben können und ein Grid 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.
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Visual Extend 10.0
Seite 17
Bei OneToMany-Formularen ist zu beachten, dass zu jedem Child-Datensatz der Fremdschlüssel des ParentDatensatzes hinzugefügt werden muss. Dies geschieht in der Methode onpostinsert des Childgrid. Der
ConeToMany Builder erstellt bereits einen Vorschlag für den Code, der den Fremdschlüssel einträgt. Der Code
der Methode onpostinsert kann mit dem VFX - cChildGrid Builder bearbeitet werden.
Der von VFX generierte Code ist mit einem Kommentarzeichen versehen. Zusätzlich ist eine Wait Window-Zeile
enthalten, die den Entwickler darauf hinweist, dass der Code dieser Methode überprüft werden muss. Wenn der
Visual Extend 10.0
Seite 18
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Fremdschlüssel ein einfacher Schlüssel ist, kann das Kommentarzeichen bedenkenlos entfernt werden, wie es auf
dem Screenshot zu sehen ist. Wenn der Fremdschlüssel ein zusammengesetzter Schlüssel ist, muss der Code von
Hand angepasst werden.
VFX - Grid Builder
Die Funktionalität des VFX – Grid Builder ist im VFX – Form Builder enthalten. Damit jedoch nicht der VFX –
Form Builder gestartet werden muss, wenn nur Änderungen im Grid gemacht werden sollen, steht der VFX –
Grid Builder auch als eigenständige Anwendung zur Verfügung.
Auch der VFX – Grid Builder arbeitet reentrant, kann also mehrmals aufgerufen werden, ohne dass zuvor
gemachte Einstellungen verloren gehen.
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Visual Extend 10.0
Seite 19
VFX – CPickField Builder
Eine leistungsfähige Eigenschaft von VFX ist die Verwendung von Auswahllisten. Ein Auswahlfeld, basierend
auf der Klasse cPickField besteht aus einer Textbox, in die Werte eingegeben werden können, einer Schaltfläche
zum Aufruf der Auswahlliste und aus einer weiteren Textbox in der Werte aus der Auswahltabelle angezeigt
werden können. Alle für eine Auswahlliste benötigten Einstellungen können mit dem Builder gemacht werden.
Die „Pick Dialog Caption“ ist die Caption der Auswahlliste. Die „Maintenance Form“ ist der Name des Bearbeitungsformulars, in dem der Benutzer neue Daten der Auswahltabelle hinzufügen kann, wenn der gewünschte
Wert noch nicht vorhanden ist.
„Pick Table Name“ ist der Name der Tabelle oder Ansicht auf der die Auswahlliste basiert. „Pick Table Index
Tag“ ist der Indexschlüssel, der zur Validierung der Benutzereingabe verwendet wird.
In der nächsten Zeile des Builders werden die Controlsources der beiden im Auswahlfeld vorhandenen Textfelder
eingetragen. Das linke Feld, in dem der Benutzer einen Wert eintragen kann, hat eine Controlsource aus der
Bearbeitungstabelle des Formulars. Das rechte Feld hat eine Controlsource aus der Auswahltabelle und dient der
Anzeige von zusätzlichen Werten aus der Auswahltabelle. In der Datenumgebung des Formulars muss eine Relation von der Bearbeitungstabelle zur Auswahltabelle bestehen um die Werte in diesem Textfeld anzuzeigen.
Schließlich werden die Namen der Felder aus der Auswahltabelle benötigt, die nach der Auswahl im Auswahlfeld
angezeigt werden sollen. „Return Field Name (Code)“ enthält den Namen des Auswahlfeldes für das linke Textfeld. „Return Field Name (Description)“ enthält den Namen des Auswahlfeldes für das rechte Textfeld.
Zur Laufzeit stehen in der Auswahlliste alle von VFX Grids bekannten Eigenschaften, wie inkrementelle Suche,
zur Verfügung. Alle Einstellungen der Auswahlliste werden benutzerspezifisch gespeichert.
Visual Extend 10.0
Seite 20
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Formulare basierend auf cDataFormPage
Die mit den VFX – Form Buildern erstellten Formulare haben standardmäßig viele gute Eigenschaften. Die Position des Formulars auf dem Bildschirm, die Größe des Formulars (die Größe eines Formulars kann mithilfe eines
Resizers vom Benutzer zur Laufzeit eingestellt werden), die zuletzt aktive Seite des Seitenrahmens sowie die
Einstellungen des Grid, Sortierfolge, Spaltenbreiten, werden für jeden Benutzer individuell gespeichert. Schließt
ein Benutzer ein Formular und öffnet er es wieder, erscheint es genauso, wie er es verlassen hat.
In allen Spalten eines Grid ist standardmäßig eine inkrementelle Suche möglich. Durch einen Doppelklick auf
eine Überschrift in einem Grid kann die entsprechende Spalte sortiert werden. Wenn für die Spalte kein
geeigneter Index vorhanden ist, wird von VFX automatisch ein temporärer Index angelegt. Soll die Suche um
eine zusätzliche Spalte erweitert werden, drückt man die Taste „Strg“ und klickt gleichzeitig auf eine weitere
Überschrift. Die Rangfolge der Sortierung wird in den Überschriften durch Zahlen in Klammern dargestellt.
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Visual Extend 10.0
Seite 21
Formulare basierend auf der Klasse CTableForm
Bei Formularen basierend auf der Klasse CTableForm sind das Such-Grid und andere Steuerelemente nebeneinander oder untereinander auf einem Container angeordnet. Ein typisches CTableForm-Formular ist die
Verwaltung der Benutzerrechte.
Formulare basierend auf der Klasse COneToMany
Formulare basierend auf der Klasse COneToMany sehen im oberen Teil wie ein Formular basierend auf
CDataFormPage aus. Darunter befindet sich ein zusätzlicher Pageframe mit standardmäßig einer Seite, auf der
sich ein Grid zur Anzeige und Bearbeitung von Child-Daten befindet.
Im Gegensatz zu anderen VFX-Formularklassen ist es hier möglich Daten in einem Grid zu bearbeiten. Über die
Schaltflächen am unteren Formularrand kann der Benutzer neue Child-Datensätze anfügen oder vorhandene
Child-Datensätze löschen.
Visual Extend 10.0
Seite 22
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Formulare basierend auf der Klasse cTreeViewForm
Der Haupteinsatzzweck dieser Klasse ist die Darstellung von Daten aus einer Tabelle in einer Baumstruktur. Die
Baumstruktur gibt dem Endanwender einen kompletten Überblick über die hierarchischen Beziehungen in einer
Tabelle.
Diese Klasse basiert auf der Klasse cDataFormPage (Vfxform.vcx) und enthält ein Treeview-Steuerelement aus
der Klasse cTreeView (Vfxappl.vcx). Die Klasse kombiniert die Funktionalität von cDataFormpage mit den
Möglichkeiten der hierarchischen Datenpräsentation in einer Baumstruktur. Wenn ein Eintrag im TreeviewSteuerelement ausgewählt wird, wird der Datensatzzeiger in der zugrunde liegenden Tabelle mitgeführt und der
Anwender kann die Daten im rechten Teil des Formulars bearbeiten.
Mit dem VFX – CTreeViewForm Builder können sehr schnell Formulare basierend auf der Klasse
cTreeViewForm erstellt und alle benötigten Eigenschaften können eingestellt werden.
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Visual Extend 10.0
Seite 23
Der Builder arbeitet so ähnlich wie der VFX – CDataFormPage Builder. Die Einstellungen können auf den
Seiten Edit Pages und Form Options genauso gemacht werden, wie im VFX – CDataFormPage Builder.
Zusätzlich müssen die Einstellungen für das Treeview-Steuerelement auf der Seite TreeViewOptions gemacht
werden. Es müssen zwei Arten von Einstellungen für das Treeview-Steuerelement gemacht werden.
Die Klasse cTreeViewOneToMany
Der Haupteinsatzzweck dieser Klasse ist die Darstellung der Daten aus einer Tabelle in einer Baumstruktur
zusammen mit der leistungsfähigen Funktionalität, die die cOneToMany-Klasse dem Entwickler bietet. Die
Baumstruktur gibt dem Anwender den kompletten Überblick über die hierarchischen Datenbeziehungen.
Diese Klasse basiert auf der Klasse cOneToMany (Vfxform.vcx) und enthält ein Treeview-Steuerelement aus der
Klasse cTreeView (Vfxappl.vcx). Die Klasse kombiniert die Funktionalität von cOneToMany mit den
Möglichkeiten der hierarchischen Datenpräsentation in einer Baumstruktur. Wenn ein Eintrag im TreeviewSteuerelement ausgewählt wird, wird der Datensatzzeiger in der zugrunde liegenden Tabelle mitgeführt und der
Anwender kann die Daten im rechten Teil des Formulars bearbeiten. Zusätzlich können die Child-Daten im
unteren Teil des Formulars bearbeitet werden.
Mit dem VFX – CTreeViewOneToMany Builder können sehr schnell Formulare basierend auf der Klasse
cTreeViewOneToMany erstellt und alle benötigten Eigenschaften eingestellt werden.
Visual Extend 10.0
Seite 24
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Dieser Builder arbeitet so ähnlich wie der VFX – COneToMany Builder. Die Einstellungen auf den Seiten Edit
Pages, Form Options und Child Grid werden genauso gemacht, wie bei Formularen basierend auf der Klasse
cOneToMany. Zusätzlich müssen die Einstellungen für das Treeview-Steuerelement auf der Seite
TreeViewOptions gemacht werden.
Die Einstellungen erfolgen genauso wie beim VFX –CTreeViewForm Builder.
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Visual Extend 10.0
Seite 25
Linked Child-Formulare
In VFX 10.0 gibt es einen Builder zur Bearbeitung von Parent/Child-Beziehungen. Zur einfacheren Verwaltung
von Parent/Child-Beziehungen gibt es die neue Klasse CChildManager. Zur Verwendung des VFX –
Parent/Child Builder muss zunächst das Parent-Formular im VFP Formular-Designer geöffnet werden. Dann
kann der VFX – Parent/Child Builder aus dem VFX 10.0 Menü gestartet werden.
In der Spalte Child Form kann der Name eines Child-Formulars über die Öffnen-Schaltfläche ausgewählt werden. In der Spalte Parent field (Fix Field Value) wird der Name des ID-Feldes der Parent-Tabelle eingetragen.
Der Wert dieses Feldes wird an das Child-Formular beim Start und bei jeder Bewegung des Satzzeigers im
Parent-Formular übergeben.
In der Spalte Child field (Fix Field Name) wird der dazugehörige Fremdschlüssel aus der Child-Tabelle eingetragen.
Es ist möglich von einem Parent-Formular mehrere Linked Child-Formulare gleichzeitig zu steuern. Als Formulartyp kommen sowohl für das Parent-Formular als auch für das Child-Formular alle VFX-Formulartypen in
Frage. Es ist möglich eine 1:n:m-Beziehung zu realisieren, indem als Linked Child ein OneToMany-Formular
verwendet wird.
Symbolleisten zu Formularen
Es hat sich als sehr praktisch erwiesen Formularen eigene Symbolleisten zuordnen zu können. Die Symbolleisten
sollten auf der Klasse ctoolbar basieren und in der Klassenbibliothek Appl.vcx gespeichert werden. Der Name
der Symbolleiste wird dem Formular in der Eigenschaft ctoolbarclass bekannt gemacht.
VFX instanziiert die Symbolleiste zusammen mit dem Formular. Die Symbolleiste ist sichtbar, solange das Formular das aktive Formular ist.
Visual Extend 10.0
Seite 26
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Um zum Beispiel ein Child-Formular über eine Schaltfläche in einer Symbolleiste zu öffnen, fügen wir der Symbolleiste eine Schaltfläche basierend auf der Klasse ctoolbarclass hinzu. In das Click-Event der Schaltfläche
schreiben wir
_screen.activeform.onmore(1)
Das ist alles. Da VFX sicherstellt, dass die Symbolleiste nur dann sichtbar ist, wenn das dazugehörige Formular
aktiv ist, können wir sicher sein, dass _screen.activeform existiert. Von diesem Formular wird die onmore
Methode aufgerufen und bekommt als Parameter eine 1 übergeben. Damit wird das Formular aufgerufen, das im
ersten Array-Element der onmore Methode angegeben ist, ohne dass der OnMore-Dialog angezeigt wird.
VFX – CursorAdapter Wizard
Der VFX – CursorAdapter Wizard erstellt zu jeder Tabelle einer Datenbank eine CursorAdapter-Klasse. Mithilfe
der so generierten CursorAdapter kann zum Beispiel aus Formularen auf die Daten zugegriffen werden. Der
CursorAdapter Wizard kann eine beliebige von VFP unterstützte Datenquelle als Grundlage zur Generierung von
CursorAdaptern verwenden.
Die generierten CursorAdapter-Klassen können nach der Generierung durch den Wizard im VFP KlassenDesigner weiter bearbeitet werden. Es sollte insbesondere in Erwägung gezogen werden, welche Parameter für
die CursorAdapter sinnvoll eingesetzt werden können.
Standardmäßig basieren diese CursorAdapter-Klassen auf der Klasse CAppDataAccess und werden in der
Klassenbibliothek Appl.vcx gespeichert. Die Klassenbibliothek und die Basisklasse können bei Bedarf im Wizard
geändert werden.
Der Wizard führt den Entwickler durch drei Schritte.
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Visual Extend 10.0
Seite 27
Auswahl der Datenquelle
Diese Datenquelle wird die Datenquelle der Anwendung. Diese Datenquelle wird vom Wizard nur zur Erstellung
der CursorAdapter verwendet. Die zur Laufzeit verwendete Datenquelle wird aus der Datei Config.vfx gelesen.
Auf diesem Weg können für verschiedene Kunden unterschiedliche Datenquellen verwendet werden.
Visual Extend 10.0
Seite 28
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Auswahl der Klassen und Klassenbibliotheken
Wenn die Option Generate SQL Connection String gewählt wird, muss im zweiten Schritt zunächst eine
Datenbank vom gewählten SQL Server gewählt werden.
In diesem Schritt werden die verwendete CursorAdapter-Basisklasse und die Klassenbibliothek ausgewählt, in
der die CursorAdapter gespeichert werden sollen.
Die Standardwerte sind:
Class Library: Appl.vcx
Parent Class Name: CAppDataAccess
Destination Class Library: Appl.vcx
Wahlweise können existierende Klassen in der Zielklassenbibliothek überschrieben werden, wenn eine Markierung im Kontrollkästchen Replace existing classes gesetzt wird.
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Visual Extend 10.0
Seite 29
Auswahl der Tabellen
Der letzte Schritt zeigt Listen aller Tabellen und Felder für die CursorAdapter erstellt werden sollen. Beim
Bewegen des Satzzeigers in der Tabellenliste auf der linken Seite werden auf der rechten Seite die dazugehörigen
Felder angezeigt.
Schlüsselfelder aus den Tabellen sind standardmäßig automatisch als Schlüsselfelder für die zu erstellenden
CursorAdapter markiert. Alle anderen Felder sind standardmäßig als aktualisierbar markiert.
Als Ergebnis erstellt der VFX – CursorAdapter Wizard eine CursorAdapter-Klasse für jede Tabelle aus der ausgewählten Datenbank. Bei jedem CursorAdapter werden die Eigenschaften CursorSchema, Tables, SelectCmd,
KeyFieldList, UpdatableFieldList und UpdateNameList vom Wizard eingestellt.
Datenzugriff mit CursorAdapter
Die Builder von VFX 10.0 unterstützen jetzt die Verwendung von CursorAdaptern in der Datenumgebung.
CursorAdapter können in der Datenumgebung genauso wie lokale und remote Ansichten verwendet werden.
CursorAdapter können in allen VFX Buildern und Wizards als Datenquelle angegeben werden. CursorAdapter
werden auch als Datenquelle für Auswahllisten unterstützt.
VFX 10.0 enthält eine CursorAdapter-Klasse, die die Grundfunktionalität zum Zugriff auf die Anwendungsdaten
enthält. Dies ist die Klasse CBaseDataAccess in der Klassenbibliothek Vfxctrl.vcx und sollte als Basis für alle
CursorAdapter verwendet werden. Diese Klasse stellt sicher, dass die gesamte Anwendung eine gemeinsame
Verbindung verwendet und keine überflüssigen Verbindungen geöffnet werden.
Die Klasse CBaseDataAccess
Die neue Klasse CBaseDataAccess ermöglicht es basierend auf der VFP-Klasse Cursoradapter auf verschiedene
Datenquellen zuzugreifen. Wenn in einer Anwendung der Datenzugriff ausschließlich über die Klasse
CBaseDataAccess erfolgt ist es leicht die Anwendung später auf andere Datenquellen zu portieren. So ist es zum
Visual Extend 10.0
Seite 30
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Beispiel einfach möglich zwischen einer VFP-Datenbank und einer SQL Server-Datenbank zu wechseln. Die
Datenzugriffseinstellungen für die Klasse CBaseDataAccess sind in der Datei Config.vfx gespeichert.
Wenn ein Objekt der Klasse CBaseDataAccess instanziiert wird, wird aus der Eigenschaft
goProgram.cDataSourceType der zu verwendende Datenbanktyp gelesen. Wenn der Datenbanktyp NATIVE ist,
wird eine VFP-Datenbank verwendet. Aus den Eigenschaften goProgram.cDatadir und
goProgram.cMainDatabase werden der Pfad zur Datenbank und der Name der Datenbank gelesen. Bei anderen
Datenbanktypen werden die Verbindungsinformationen aus der Methode GetConnection des VerbindungsManagers bezogen.
In der Klassenbibliothek Appl.vcx befindet sich die Klasse CAppDataAccess, die eine 1:1-Ableitung der Klasse
CBaseDataAccess ist. Entwickler sollten eigene Erweiterungen oder Änderungen des Datenzugriffs in der Klasse
CAppDataAccess machen.
Eigenschaften
cConnMgrName – Name des Objekts, das den Namen des Verbindungs-Manager-Objekts enthält. Dieses
Verbindungs-Manager-Objekt verwaltet den Datenzugriff der Klasse CBaseDataAccess.
cExecuteAfterCursorFill – Der hier eingetragene Befehl wird nach Ausführung der Methode CursorFill des
CursorAdapters ausgeführt. Hier kann Code eingetragen werden, der die Daten des erstellten Cursors
verarbeitet. Mithilfe dieser Eigenschaft kann einem Cursoradapter zur Laufzeit Code hinzugefügt werden.
Filter – Ein logischer Ausdruck mit dem die Daten des erstellten Cursors gefiltert werden.
Order – Der hier angegebene Indexschlüssel wird zur Sortierung des erstellten Cursors verwendet. Indexschlüssel für Cursoradapter können im VFX – Data Environment Builder angelegt werden.
Methoden
CreateIndexes – Der Code dieser Methode wird vom VFX – Data Environment Builder erstellt. Hier werden
Befehle zur Erstellung von temporären Indexdateien für den Cursor eingetragen. Diese Methode wird
nach Ausführung der Methode CursorFill() aufgerufen.
Datenzugriff bearbeiten mit der Datei Config.vfx
Während der Entwicklung einer Anwendung wird für alle CursorAdapter eine Datenquelle verwendet, die auf
dem Entwicklungsrechner zur Verfügung steht. Die Datenquelle auf den Kundenrechnern muss nicht identisch
sein. Zum Beispiel kann auf dem Entwicklungsrechner eine SQL Server-Datenbank verwendet werden, während
bei den Kunden eine VFP-Datenbank zum Einsatz kommt.
Auch wenn auf dem Entwicklungsrechner und auf dem Kundenrechner eine SQL Server-Datenbank verwendet
werden soll, so wird der Name des SQL Servers auf beiden Rechnern unterschiedlich sein. Daher ist in der Regel
auf dem Entwicklungsrechner und dem Kundenrechner eine andere Verbindungszeichenfolge erforderlich.
VFX verwendet einen eigenen Verbindungs-Manager um eine Verbindung zur Datenquelle herzustellen. Dieser
Verbindungs-Manager wird als Child-Objekt des Anwendungsobjekts instanziiert und steht über die Referenz
goProgram.oConnMgr zur Laufzeit zur Verfügung.
CursorAdapter-Objekte basierend auf der Klasse CBaseDataAccess verwenden das Objekt
goProgram.oConnMgr, eine Instanz der Klasse CConnectionMgr, um eine Verbindung zur Datenquelle herzustellen. Die Einstellungen für das goProgram.oConnMgr Objekt werden aus der Datei Config.vfx gelesen. In
dieser Datei befinden sich die Informationen über die von der Anwendung verwendete Datenquelle.
Die Datei Config.vfx enthält aus Sicherheitsgründen verschlüsselte Daten, die zur Verbindung mit der Kundendatenbank verwendet werden, zum Beispiel Typ der Datenquelle, Verbindungszeichenfolge und andere. Das
Kennwort zur Verschlüsselung ist in der Eigenschaft goProgram.cConfigPassword gespeichert. VFX-Entwickler
sollten dieses Kennwort selbst zuweisen.
Die Datei Config.vfx kann vom Entwickler erstellt und zusammen mit der Anwendung ausgeliefert werden. Wenn
beim Start der Anwendung keine Datei Config.vfx gefunden wird, verwendet die VFX-Anwendung die DatenVFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Visual Extend 10.0
Seite 31
bank, die in der Eigenschaft goProgram.cDataDir hinterlegt ist. Wenn goProgram.cDataDir eine leere Zeichenkette zugewiesen ist, werden die Datenbankinformationen aus der Tabelle Vfxpath.dbf gelesen.
Benutzer mit Administratorrechten können die Datei Config.vfx später über den Menüpunkt Extras, Datenzugriff
bearbeiten bearbeiten.
Für jeden Kunden kann gewählt werden, ob mit einer VFP-Datenbank oder einer Remote-Datenbank gearbeitet
werden soll. Die Datei Config.vfx kann auch mehrere Datensätze enthalten. Wenn mehr als ein Datensatz vorhanden ist, erscheint beim Start der Anwendung ein Datenbankauswahldialog.
Es kann eine Verbindung aus einer VFP-Datenbank verwendet werden. Zur Laufzeit wird der Name der Verbindung in der Eigenschaft cDBCConn des Objekts goProgram gespeichert. In der Datei Config.vfx wird der Name
der zu verwendenden Datenbank gespeichert. Beim Start der Anwendung werden die Informationen zur Datenbank aus dieser Datei gelesen.
Um eine ODBC-Verbindung zu benutzen, kann eine Verbindungszeichenfolge oder eine existierende DSN verwendet werden. Wenn eine Verbindungszeichenfolge als Datenquelle gewählt wird, kann über die Schaltfläche
ein Dialog angezeigt werden, der hilft eine gültige Verbindungszeichenfolge zu erstellen.
Wenn eine DSN als Datenquelle gewählt wird, können ein Benutzername und ein Kennwort eingegeben werden,
die zur Anmeldung bei der Datenquelle zur Laufzeit verwendet werden. Wenn hier kein Benutzername und
Kennwort eingegeben werden und die Datenquelle eine Anmeldung erfordert, erscheint zur Laufzeit ein
Anmeldedialog, der den Anwender zur Eingabe von Benutzername und Kennwort auffordert.
Die Datei Config.vfx entspricht in etwa der Datei Vfxpath.dbf, die wir aus früheren VFX-Versionen kennen. Alle
in der Tabelle Vfxpath.dbf vorhandenen Felder sind auch in Config.vfx vorhanden.
Es können mehrere Zeilen vorhanden sein, die auf verschiedene Typen von Datenquellen zugreifen. So kann ein
Kunde mit einer Anwendung beim Programmstart entscheiden, ob er auf einer VFP-Datenbank oder auf verschiedenen Server-Datenbanken arbeiten will.
Durch die Verschlüsselung der Datei Config.vfx ist eine in VFP-Anwendungen bisher nicht erreichte Sicherheit
erreicht worden.
Wechsel zwischen DBC und SQL Server
Wenn eine VFX 10.0-Anwendung so konstruiert ist, dass der Datenzugriff ausschließlich über CursorAdapter
erfolgt, ist der Wechsel zwischen einem DBC und einer SQL Server-Datenbank nachträglich problemlos möglich.
Visual Extend 10.0
Seite 32
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Nehmen wir an, wir haben eine Anwendung mit einem DBC als Datenquelle entwickelt. Bei der Entwicklung
haben wir darauf geachtet, dass jeglicher Datenzugriff nur über CursorAdapter erfolgt. Jetzt möchte ein Kunde
diese Anwendung mit einer SQL Server-Datenbank laufen lassen.
Dafür muss die VFP-Datenbank zunächst auf SQL Server portiert werden. Das können wir mit dem UpsizingAssistenten aus VFP machen, aber auch andere Werkzeuge, wie zum Beispiel xCase sind für diese Aufgabe
geeignet.
Für den Zugriff auf die SQL Server-Datenbank kann eine DSN eingerichtet werden. Dies stellt aber auch wieder
ein Sicherheitsrisiko dar, weil eine DSN manipuliert werden kann. Sicherer ist es in der Datei Config.vfx eine
Verbindungszeichenfolge für den Datenzugriff zu wählen. Dadurch ist man unabhängig von weiteren Einstellungen auf Betriebssystemebene und hat alle Informationen über den Datenzugriff innerhalb der Anwendung
gespeichert.
Die SQL Server-Datenbank wird auf dem Server des Kunden installiert. Die fertige Anwendung wird mit einer
leeren Datei Config.vfx ausgeliefert. Dadurch erscheint beim Start der Anwendung beim Kunden automatisch der
Dialog zur Bearbeitung der Datenquellen. Die Verbindung zum beim Kunden installierten SQL Server kann mit
Benutzername und Kennwort eingegeben werden und es kann mit der Anwendung gearbeitet werden.
Anwendungsschutz durch Produktaktivierung
Das Ziel der Produktaktivierung ist die unerlaubte Verwendung der Anwendung auf nicht aktivierten Computern
zu verhindern.
Der Anwendungsschutz durch Produktaktivierung kann im VFX – Application Wizard auf der Seite 3. Options
durch aktivieren des Kontrollkästchens Enable product activation für ein neu zu erstellendes Projekt eingeschaltet werden.
Später kann diese Einstellung mithilfe des VFX – Application Builder geändert werden. Die Eigenschaft
goProgram.lUseActivation muss auf .T. gesetzt werden, um die Produktaktivierung einzuschalten. Wenn die
Eigenschaft goProgram.lUseActivation auf .F. gesetzt ist, ist die Anwendung nicht durch die Produktaktivierung
geschützt.
Zu jeder Anwendung können bis zu 32 Rechte vergeben werden. Jedes Recht kann unabhängig von den anderen
Rechten aktiviert werden.
Liste der verwendeten Begriffe
Systemspezifischer Wert – Ein systemspezifischer Wert, zum Beispiel die Seriennummer einer Hardware-Komponente oder das Erstellungsdatum einer bestimmten Datei oder ein Schlüssel aus der WindowsRegistrierungsdatenbank. Die zu verwendete Datei und der zu verwendende Schlüssel aus der
Windows-Registrierungsdatenbank können vom Entwickler festgelegt werden.
Aktivierungsregel – Für jede Anwendung kann eine eindeutige Aktivierungsregel angelegt werden. Diese Regel
setzt sich aus einer Reihe systemspezifischer Werte zusammen, die einen PC eindeutig identifizieren.
Bei der Erstellung der Aktivierungsregel können Textbearbeitungsfunktionen verwendet werden.
Installationsschlüssel – Dies ist eine Zeichenkette, die Informationen über die im PC des Anwenders eingesetzte
Hardware enthält. Der Installationsschlüssel wird vom Entwickler benötigt um einen Aktivierungsschlüssel erstellen zu können.
Aktivierungsschlüssel – Dies ist eine Zeichenkette, die die Berechtigungen für einen speziellen PC enthält. Der
Aktivierungsschlüssel wird vom Entwickler anhand des Installationsschlüssels erstellt. Der Aktivierungsschlüssel ist für andere PCs nutzlos.
Installationsdatum – An diesem Datum wurde eine Anwendung erstmalig auf einem PC gestartet.
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Visual Extend 10.0
Seite 33
Das Funktionsprinzip
Wenn der Anwendungsschutz durch Produktaktivierung aktiviert ist, wird beim Start der Anwendung das Objekt
goProgram.SecurityRights instanziiert. Dieses Objekt hat Eigenschaften mit den Namen der Benutzerrechte, die
der Entwickler definiert hat. Jede dieser Eigenschaften kann einen von drei Werten annehmen:
-1 – Die Anwendung ist nicht aktiviert. In diesem Fall kann der Entwickler entscheiden welche Aktion
ausgeführt werden soll. Der Anwender könnte zum Beispiel begrenzten Zugriff auf Funktionen haben,
solange die Anwendung nicht aktiviert ist.
0 – Die Anwendung ist aktiviert, aber der Anwender hat nicht das Recht diese Aktion auszuführen.
1 – Die Anwendung ist aktiviert und der Anwender hat das Recht die Aktion auszuführen.
Wenn der Anwendungsschutz durch Produktaktivierung aktiviert ist, werden der Aktivierungsschlüssel und das
Datum des ersten Starts der Anwendung in einer Ini-Datei gespeichert. Der Entwickler kann den Namen dieser
Ini-Datei selbst wählen, sodass jede Anwendung ihre eigene Ini-Datei verwendet. Der Standardname ist VFX.ini.
Die Ini-Datei wird im Windows-Ordner gespeichert.
Der Aktivierungsschlüssel wird durch die Aktivierungsregel verschlüsselt. Der Schutz kann durch Hinzufügen
von Zeichenkonstanten, Schlüsseln aus der Windows-Registrierungsdatenbank und durch das Erstellungsdatum
einer beliebigen Datei weiter verbessert werden. Diese Kombination kann für jede Anwendung getrennt festgelegt werden, sodass jede Anwendung ihre eigenen Aktivierungsregeln hat.
Zusätzlich zu diesen Einstellungen kann der Entwickler den Typ des Schutzes festlegen.
Der Standardschutz erstellt die Ini-Datei beim ersten Start der Anwendung. Das während des Erstellens der IniDatei aktuelle Systemdatum wird in der Datei gespeichert. Dieses Datum steht während der Ausführung der
Anwendung in der Eigenschaft goProgram.InstallationDate zur Verfügung und kann dazu verwendet werden die
Laufzeit der Anwendung zu beschränken. Der Nachteil dieses Schutzes ist, dass der Anwender die erstellte IniDatei löschen kann und die Ini-Datei beim nächsten Start der Anwendung mit einem neuen Datum erneut erstellt
wird.
Um eine solche Manipulation durch den Anwender auszuschließen, kann der Entwickler einen erweiterten Schutz
einstellen. Hierbei wird eine zusätzliche Datei verwendet, die mit der Anwendung vertrieben werden muss. Der
Standardname dieser Datei heißt FirstInstall.txt. Der Dateiname kann mit der Eigenschaft cFirstInstall aus der
Klasse CActivation (Appl.vcx) eingestellt werden. Die Datei FirstInstall.txt wird im Windows-Ordner abgelegt.
Wenn der Entwickler den Schutz mit der Datei FirstInstall.txt auswählt, wird sich die Anwendung folgendermaßen verhalten. Beim Start der Anwendung wird zunächst die Ini-Datei überprüft. Wenn diese Datei existiert,
wird das Datum des ersten Starts der Eigenschaft goProgram.InstallationDate zugewiesen und die Benutzerrechte
werden entsprechend dem Aktivierungsschlüssel eingestellt.
Wenn die Ini-Datei nicht existiert wird angenommen, dass dies der erste Start der Anwendung ist. Wenn dies der
Fall ist, wird zusätzlich überprüft, ob die Datei FirstInstall.txt existiert. Wenn diese Datei existiert ist
sichergestellt, dass die Anwendung wirklich zum ersten Mal gestartet wird. Das Systemdatum wird jetzt in der
Ini-Datei gespeichert und die Datei FirstInstall.txt wird gelöscht. Wenn ein Anwender nun versucht eine
Anwendung zu reaktivieren indem er die Ini-Datei löscht, wird die Ausführung der Anwendung beendet, weil die
Datei FirstInstall.txt nicht existiert. Dieser erweiterte Schutz der Anwendung bedeutet eine bessere Sicherheit.
Der Entwickler darf jedoch nicht vergessen die Datei FirstInstall.txt beim Vertrieb der Anwendung mit
auszuliefern.
Wenn der Anwender die installierte Anwendung aktivieren möchte, muss er seinen Installationsschlüssel an den
Entwickler senden. Der Installationsschlüssel kann auf drei verschiedene Arten an den Entwickler gesendet
werden. Die gewünschte Art kann in der Eigenschaft nRegWay eingestellt werden:
0 – Der Installationsschlüssel wird in einem Dialog angezeigt. Der Anwender kann den Schlüssel
kopieren und in einer anderen Anwendung (zum Beispiel in einer E-Mail) einfügen.
1 – Der Installationsschlüssel wird in einer Datei gespeichert. Diese Datei kann später an den Entwickler gesendet werden. Der Dateiname wird in der Eigenschaft cParamFile hinterlegt.
Visual Extend 10.0
Seite 34
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
2 – Der Installationsschlüssel wird in einer Datei gespeichert und sofort als E-Mail-Anhang an den
Entwickler geschickt. Der Dateiname muss in der Eigenschaft cParamFile hinterlegt werden. Die EMail-Adresse des Entwicklers muss in der Eigenschaft cRegEMail eingetragen werden.
10 – Nach Anzeige des Registrierungsdialogs werden die Registrierungsdaten an einen Web Service
übermittelt.
11 – Nach Anzeige des Registrierungsdialogs wird der Installationsschlüssel in einer Datei
gespeichert. Diese Datei kann später an den Entwickler gesendet werden. Der Dateiname wird in der
Eigenschaft cParamFile hinterlegt.
12 – Nach Anzeige des Registrierungsdialogs wird der Installationsschlüssel in einer Datei gespeichert
und sofort als E-Mail-Anhang an den Entwickler geschickt. Der Dateiname muss in der Eigenschaft
cParamFile hinterlegt werden. Die E-Mail-Adresse des Entwicklers muss in der Eigenschaft
cRegEMail eingetragen werden.
Der Installationsschlüssel hat einen numerischen Wert mit 10 Stellen Länge. Der Anwender könnte den
Installationsschlüssel per E-Mail an den Entwickler senden oder auf einer Registrierungs-Website eintragen.
Über den VFX-Menüpunkt Activation, Customer List wird die VFX-Kundenverwaltung geöffnet. Der Entwickler
trägt den Installationsschlüssel im „Create Activation Key“-Assistenten ein um einen Aktivierungsschlüssel für
den Anwender zu erstellen. Der generierte Aktivierungsschlüssel wird dann an den Anwender geschickt und vom
Anwender im Aktivierungsformular eingegeben um die Anwendung zu aktivieren. Wahlweise kann die Datei mit
dem Aktivierungsschlüssel auch einfach im Ordner der Exe-Datei gespeichert werden. Beim nächsten Start der
Anwendung wird der Aktivierungsschlüssel aus dieser Datei gelesen.
Die Aktivierungsinformationen werden auf dem PC des Kunden in einer Ini-Datei gespeichert. Der Name dieser
Ini-Datei wird in der Eigenschaft cINIFileName der Klasse CVFXAcvtivation (Appl.vcx) eingetragen. Der
Standardwert ist VFX.ini.
Der Entwickler kann wählen, ob die einfache Produktaktivierung verwendet werden soll oder ob zusätzlich die
Datei FirstInstall.txt benutzt werden soll, um den ersten Start der Anwendung zu protokollieren. Der Name dieser
Datei kann in der Eigenschaft cFirstInstall der Klasse CVFXAcvtivation (Appl.vcx) eingetragen werden. Der
Standardwert ist FirstInstall.ini.
Wenn die Datei FirstInstall.txt verwendet werden soll, muss diese Datei mit der Anwendung vertrieben werden.
Das Installationsprogramm muss diese Datei im Windows-Ordner speichern. Das Aktivierungsobjekt wird diese
Datei beim ersten Start der Anwendung löschen. In diesem Moment wird das Installationsdatum in der Ini-Datei
gespeichert. Später wird bei jedem Start der Anwendung in der Ini-Datei geprüft, ob das Installationsdatum
vorhanden ist. Wenn das Datum fehlt und wenn die Datei FirstInstall.txt nicht vorhanden ist, wird davon
ausgegangen, dass an der Installation manipuliert wurde und die Ausführung der Anwendung wird beendet.
Wenn die Datei FirstInstall.txt nicht verwendet wird, wird die Ini-Datei neu erstellt, falls sie nicht vorhanden ist.
Das Installationsdatum kann auf zwei Arten ermittelt werden. Entweder wird das Systemdatum verwendet oder es
wird das Erstellungsdatum einer bestimmten Datei verwendet. Wenn das Erstellungsdatum einer Datei verwendet
werden soll, muss der Name dieser Datei in der Eigenschaft cRegFileName der Klasse CVFXActivation
gespeichert werden.
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Visual Extend 10.0
Seite 35
Die Definition der Aktivierungsregeln
Starten Sie den Dialog VFX – Define Activation Rules über den VFX-Menüpunkt Activation, Define Activation
Rules.
Wenn der „Define Activation Rules“-Assistent das erste Mal für ein Projekt gestartet wird, muss eine neue Regel
für dieses Projekt angelegt werden.
Auf der Seite Security Key des Assistenten befindet sich eine Combobox aus der eine Regel für das aktuelle
Projekt ausgewählt werden kann. In dem darunter liegenden Grid können so viele Zeilen hinzugefügt werden, wie
benötigt werden. Aus allen Zeilen des Grids wird in ein Schlüssel generiert, der in der Eigenschaft cactpattern
der Klasse CVfxactivation gespeichert wird. Die Anwendung beim Kunden erkennt anhand dieses Schlüssels
welche systemspezifischen Werte des PCs zur Generierung des Installationsschlüssels verwendet werden müssen.
Der Installationsschlüssel stellt sicher, dass die Anwendung nur auf dem Computer ausgeführt wird, für den der
Aktivierungsschlüssel erstellt wurde.
In der ersten Spalte des Grid kann ein systemspezifischer Wert ausgewählt werden. In einer Combobox sind hier
alle möglichen Parameter aufgeführt, die zur Erstellung des Installationsschlüssels verwendet werden können.
Zusätzlich können Zeichenkettenfunktionen angewendet werden, um den Wert zu verändern.
Zum Beispiel sollen anstelle der vollständigen Seriennummer einer Festplatte nur die letzten vier Stellen zur
Erstellung des Installationsschlüssels verwendet werden. Aus der Combobox in der ersten Spalte wird „HDD
Factory Serial Number“ ausgewählt. Die VFX-Systemvariable, die diesem Parameter entspricht heißt
„HDDFactoryNumber“ und erscheint in der zweiten Spalte. Um nur die letzten vier Stellen zu verwenden, muss
der folgende Ausdruck in der zweiten Spalte eingetragen werden: RIGHT(ALLTRIM(HDDFactoryNumber),4).
Visual Extend 10.0
Seite 36
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Wenn einer der systemspezifischen Werte „File Creation Date“ oder „Registry Key Value“ verwendet werden
soll, müssen weitere Parameter angegeben werden. Wenn das Erstellungsdatum einer Datei verwendet werden
soll, muss der Name der Datei angegeben werden. Um einen Windows-Registrierungsschlüssel verwenden zu
können, muss die Bezeichnung des Schlüssels eingegeben werden. Dies geschieht in der Spalte „Additional
Data“.
Aus den Aktivierungsregeln wird auf dem PC des Anwenders ein Installationsschlüssel erstellt. Dabei werden
alle in den Aktivierungsregeln enthaltenen Parameter berücksichtigt. Wenn nur ein Parameter auf dem PC des
Anwenders verändert wird, wird die Installation ungültig und der Anwender muss einen neuen Aktivierungsschlüssel anfordern, entsprechend seiner geänderten Hardware.
Es können so viele Zeilen dem Grid hinzugefügt werden, wie benötigt werden. Die Zeilen im Grid können mit
den Pfeiltasten am rechten Rand des Assistenten in eine andere Reihenfolge gebracht werden. Durch verschieben
der Zeilen im Grid ändern sich die Aktivierungsregeln.
Nach der Definition der Aktivierungsregeln wird das Muster in der Eigenschaft cActPattern der Klasse
CVFXActivation (Appl.vcx) gespeichert.
ACHTUNG: Der Wert der Eigenschaft cActPattern darf niemals gelöscht werden! Ohne diesen Wert ist es nicht
möglich Aktivierungsschlüssel zu erstellen!
Auf der Seite Rights können bis zu 32 verschiedene Benutzerrechte angelegt werden. Damit kann der Zugriff auf
bis zu 32 Module einer Anwendung gesteuert werden. Beispielsweise können Rechte angelegt werden, die es
dem Anwender erlauben Formulare zu starten (RunDataForms), Berichte zu drucken (RunReports), Daten zu
bearbeiten (EditData), Daten anzusehen (ViewData) usw. Zur Laufzeit der Anwendung können die einzelnen
Berechtigungen überprüft werden und ggf. wird die entsprechende Aktion ausgeführt.
Alle Benutzerrechte stehen zur Laufzeit als Eigenschaften des global sichtbaren Objekts
goProgram.SecurityRights zur Verfügung, sodass an jeder Stelle der Anwendung darauf zugegriffen werden
kann.
Wenn die Anwendung nicht aktiviert ist, haben alle Benutzerrechte den Wert -1. Wenn die Anwendung aktiviert
ist, hat ein Benutzerrecht den Wert 1, wenn die Aktion erlaubt ist und 0, wenn die Aktion nicht erlaubt ist.
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Visual Extend 10.0
Seite 37
Um im Assistenten ein Recht einzutragen muss zuerst das Kontrollkästchen in der ersten Spalte markiert werden.
Dann wird ein Name für das Recht eingetragen. Zur Laufzeit der Anwendung wird eine Eigenschaft des
SecurityRights-Objekts mit diesem Namen angelegt. Daher müssen bei der Eingabe des Namens die Konventionen zur Namensgebung von VFP beachtet werden!
ANMERKUNG: Anwendungsrechte sind für jede Anwendung unterschiedlich. Die Rechte, die für eine andere
Anwendung erstellt wurden, können nicht verwendet werden. Auch wenn ähnliche Rechte benötigt werden,
müssen diese neu erstellt werden. Die Anwendungsrechte werden in der Tabelle Vfxapprights.dbf im Projektordner gespeichert.
Erstellen eines Aktivierungsschlüssels
VFX 10.0-Anwendungen können vor unbefugter Nutzung mit einem Aktivierungsschlüssel geschützt werden. Die
Daten der Kunden, die einen Aktivierungsschlüssel erhalten haben, können mit umfangreichen Benutzerdaten
und Benutzerrechten verwaltet werden.
Im Formular Registered Customers werden die Kundendaten verwaltet. Für jeden Kunden werden die
Registrierungsnummer, der Aktivierungsschlüssel und die gewährten Rechte gespeichert. So ist es erforderlichenfalls einfach möglich einen neuen Aktivierungsschlüssel zu erstellen und zu versenden.
Die Schaltfläche Create activation key öffnet den Dialog zur Generierung eines Aktivierungsschlüssels. Nach
Erstellen eines Aktivierungsschlüssels wir die Kundenliste automatisch aktualisiert.
Wenn der Anwender seinen Installationsschlüssel sendet, muss ein Aktivierungsschlüssel erstellt werden. Dieser
Aktivierungsschlüssel teilt der Anwendung mit, ob der Anwender eine bestimmte Aktion ausführen darf. Für jede
Aktion muss das entsprechende Recht ausgewählt werden.
Visual Extend 10.0
Seite 38
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Mit der Schaltfläche „Read Installation Key“ öffnet sich ein Dialog, in den der Installationsschlüssel des
Anwenders eingegeben wird. Der Installationsschlüssel kann über die Zwischenablage eingefügt werden oder aus
einer Datei gelesen werden.
Nachdem jedes für den Anwender erlaubte Recht markiert ist, wird mit einem Klick auf OK der Aktivierungsschlüssel generiert. Der erstellte Aktivierungsschlüssel wird in der Datei <Projektname>.xak im Projektordner
gespeichert. Der Aktivierungsschlüssel oder die Datei muss an den Anwender zur Aktivierung der Anwendung
gesendet werden.
Wenn dem Anwender entsprechend dem obigen Beispiel alle Rechte zur Datenbearbeitung gegeben wurden, er
aber nicht das Recht hat Berichte zu drucken, sehen die Eigenschaften zur Laufzeit so aus:
goProgram.SecurityRights.RunDataForms = 1
goProgram.SecurityRights.RunReports = 0
goProgram.SecurityRights.EditData = 1
goProgram.SecurityRights.ViewData = 1
Wenn der Anwender eine Anwendung startet, die eine Aktivierung erfordert (und wenn die Anwendung noch
nicht aktiviert wurde), wird automatisch der Installationsschlüssel erzeugt. Abhängig vom Wert der Eigenschaft
nRegWay wird der Installationsschlüssel entweder angezeigt oder in einer Datei gespeichert, die per E-Mail
versendet werden kann. Nachdem der Anwender den Aktivierungsschlüssel erhalten hat, kann er ihn im
Aktivierungsfenster eingeben oder die Datei mit dem Aktivierungsschlüssel im Projektordner speichern. Damit
ist die Anwendung auf diesem Computer aktiviert.
Wenn der Anwender später den Menüpunkt Hilfe, Produkt aktivieren auswählt, wird der Installationsschlüssel
angezeigt, unabhängig von der Einstellung der Eigenschaft nRegWay.
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Visual Extend 10.0
Seite 39
Öffnen-Dialog im Windows-XP-Stil
Zusätzlich zu dem in bisherigen VFX-Versionen vorhandenem Öffnen-Dialog (Vfxfopen.scx) steht in VFX 10.0
ein neuer Öffnen-Dialog im Windows-XP-Stil (Vfxxpopen.scx) zur Verfügung. Dieser neue Öffnen-Dialog ist
standardmäßig aktiviert. Mit der Eigenschaft goprogram.lxpopenstyle kann auf Wunsch auf den alten ÖffnenDialog umgeschaltet werden.
lxpopenstyle
.T. – der neue Öffnen-Dialog im Windows-XP-Stil wird verwendet.
.F. – der alte Öffnen-Dialog (Vfxfopen.scx) wird verwendet.
Die Gruppenüberschriften im neuen Öffnen-Dialog werden aus dem neuen Tabellenfeld Vfxopen.groupcap
gelesen. Der Zustand der einzelnen Gruppen (aufgeklappt oder zugeklappt) wird je Benutzer gespeichert.
Der Datei/Öffnen-Dialog benutzt die Tabelle VFXFOPEN.DBF. Die VFX-Formular-Builder fügen automatisch
für jedes Formular einen Datensatz zu der Tabelle VFXFOPEN.DBF hinzu. Hier ist die Struktur der Tabelle
VFXFOPEN.DBF:
VFXFOpen-Feld
ObjectID
ObjectNo
GroupCap
Title
Descr
Form
Parameter
Viewlevel
NewLevel
EditLevel
Eraselevel
Visual Extend 10.0
Seite 40
Beschreibung
Diese Feld wird verwendet, wenn der Öffnen-Dialog Vfxfopen.scx verwendet
wird. Hierzu muss die Eigenschaft goprogram.lxpopenstyle=.F. gesetzt sein.
Der VFX-Öffnen-Dialog hat normalerweise zwei Seiten. (Tip: Sie können
die Pagecount-Eigenschaft des Seitenrahmens im Formular Vfxopen.scx auf
jeden beliebigen Wert setzen, um die Anzahl der Seiten zu verändern.) Wenn
Sie wollen, dass Ihr Formular auf Seite 1 des Seitenrahmens erscheint, geben
Sie PAGE1 ein. Für die weiteren Seiten PAGE2, PAGE3 usw.
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.
Diese Feld wird verwendet, wenn der Öffnen-Dialog Vfxxpopen.scx
verwendet wird. Hierzu muss die Eigenschaft goprogram.lxpopenstyle=.T.
gesetzt sein. Dieses Feld enthält eine Gruppenüberschrift. Die Gruppierung
erfolgt entsprechend der Einträge im Feld ObjectID. Die GroupCap muss
nur für den ersten Eintrag einer Gruppe eingetragen werden.
Geben Sie die Überschrift ein, die im Listenfenster erscheint.
Geben Sie einen Beschreibungstext ein, der angezeigt wird, wenn der
Benutzer diesen Eintrag ausgewählt hat.
Geben Sie den Namen des aufzurufenden Formulars ein.
Wenn Sie an das Formular Parameter übergeben wollen, können Sie diese
hier eingeben.
Die Benutzerstufe, die erforderlich ist, um ein Formular anzusehen (Zum
Beispiel 1 = Admin, 2 = Hauptbenutzer, 3 = normaler Benutzer usw.)
Die Benutzerstufe, die erforderlich ist, um neue Datensätze dem Formular
hinzufügen zu können.
Die Benutzerstufe, die erforderlich ist, um Datensätze bearbeiten zu können.
Die Benutzerstufe, die erforderlich ist um auf diesem Formular Datensätze
löschen zu können.
Beispiel
PAGE1
1
Kontakte
Kunden
Liste aller Adressen
ADRE
1 (nur Administratoren können
dieses Formular ansehen)
1 (nur Administratoren können
neue Datensätze hinzufügen)
1 (nur Administratoren können
Datensätze bearbeiten)
1 (nur Administratoren können
Datensätze löschen)
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Erweiterte Druckoptionen
Aus allen Formularen kann standardmäßig eine Liste gedruckt werden, ohne dass dafür Berichte angelegt werden
müssen. VFX legt zur Laufzeit der Anwendung temporäre Berichtsdateien an, die auf der Ansicht der Suchseite
eines Formulars basieren.
Vor dem Druck bzw. der Seitenansicht kann der Benutzer nicht gewünschte Spalten aus der Liste entfernen. Die
Breite der Spalten entspricht ungefähr der Breite der Spalte im Grid.
VFX 10.0 unterstützt alle Möglichkeiten von VFP 9 um Berichtsausgaben in verschiedenen Dateiformaten speichern zu können. Die unterstützen Dateiformate sind PDF, HTML, XML, TIFF and BMP. Alle diese Dateiformate können auch als E-Mailanhang versendet werden.
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Visual Extend 10.0
Seite 41
Im Berichtsdialog kann das Dateiformat in einer Combobox ausgewählt werden, wenn eine der Optionen E-Mail
oder Speichern als gewählt wird.
Wenn als Dateiformat TIFF oder BMP gewählt wird, wird für jede Seite des Berichts eine eigene Datei angelegt.
Dem vom Anwender eingegebenen Dateinamen wird ein numerischer Wert mit der jeweiligen Seitennummer
angehängt.
Visual Extend 10.0
Seite 42
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
E-Mailversand
Alle Dateiformate, in denen Berichtsausgaben gespeichert werden können, können als E-Mailanhang versendet
werden.
Im Dialog Details zur E-Mail können ein oder mehrere E-Mailempfänger, CC-Empfänger, der Betreff und ein
Text eingegeben werden. Wenn der Wert der Eigenschaft goProgram.lUseBCCRecipients auf .T. eingestellt ist,
können auch BCC-Empfänger eingegeben werden.
Für jede Art von Empfängerliste kann über eine Schaltfläche eine Auswahlliste mit allen Adressen aus dem
Outlook-Adressbuch angezeigt werden.
Die ausgewählten E-Mailadressen werden durch einen Klick auf die Schaltfläche OK in das Feld mit der
Empfängerliste übernommen.
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Visual Extend 10.0
Seite 43
Faxversand
Eine weitere Möglichkeit Berichtsausgaben zu erzeugen ist der Versand als Fax. Wenn der Anwender die FaxOption wählt, muss die Faxnummer eingegeben werden.
VFX 10.0 unterstützt die Fax-Programme FRITZ!fax von AVM und Winfax von Symantec. VFX 10.0 erkennt
automatisch, ob eins dieser beiden Fax-Programme installiert ist. Wenn ein Fax-Programm erkannt wird, wird die
Berichtsausgabe an den entsprechenden Fax-Druckertreiber übergeben.
Die Faxnummer wird von der VFX-Anwendung direkt an das Fax-Programm übergeben. Der Endanwender wird
nicht mit Dialogen des Fax-Programms konfrontiert.
Wenn einem Formular eine individuelle Berichtsdatei zugeordnet ist, kann der Anwender die Faxnummer im
abgebildeten Dialog eingeben:
Visual Extend 10.0
Seite 44
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Suchdialog
Der sichtbare Datenbereich in einem Formular kann durch Setzen eines Filters eingeschränkt werden. VFX stellt
dafür einen fertigen Dialog zur Verfügung. Beliebig viele Felder können dabei mit „und“ oder „oder“ verknüpft
werden.
Es können beliebig viele Suchkriterien kombiniert werden. Die Suchkriterien werden je Benutzer und Formular
gespeichert und stehen auch nach einem Neustart des Programms wieder zur Verfügung.
Im Suchdialog können Anwender nur gültige Ausdrücke eingeben. Je nach gewähltem Datentyp stehen nur die
geeigneten Vergleichsoperatoren zur Verfügung. Es können nur Werte vom gleichen Datentyp eingegeben
werden.
In der Spalte Wert befinden sich mehrere Steuerelemente. Die Eigenschaft CurrentControl dieser Spalte wird
abhängig vom Datentyp des in der Spalte Feld gewählten Feldes umgeschaltet.
Wenn ein Feld vom Typ Zeichen gewählt wird, wird in der Spalte Wert eine Textbox angezeigt, in die beliebige
Werte eingegeben werden können. Es steht zusätzlich der Vergleichsoperator Enthält zur Verfügung. In diesem
Fall wird der Filterausdruck mit dem Operator $ aufgebaut. Zusätzlich kann in der rechten Spalte im Grid für
jede Zeile eingestellt werden, ob die Groß-/Kleinschreibung berücksichtigt werden soll.
Wenn ein numerisches Feld in der ersten Spalte gewählt wird, wird in der Spalte Wert eine Textbox angezeigt,
die es dem Benutzer erlaubt nur Zahlenwerte einzugeben.
Wenn ein Feld vom Typ Date oder Datetime gewählt wird, wird die Inputmask in der Spalte Wert entsprechend
eingestellt.
Wenn ein logisches Feld ausgewählt wird, kann in der Spalte Wert in einer Combobox Wahr oder Falsch ausgewählt werden. Die manuelle Eingabe eines Wertes durch den Anwender ist nicht erforderlich.
Auf diesem Weg ist es dem Benutzer nicht möglich unzulässige Werte in der Spalte Wert einzugeben.
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Visual Extend 10.0
Seite 45
Aktualisierung einer SQL Server Kundendatenbank
Der Metadata Wizard hilft Ihnen Metadaten aus Ihrer aktuell benutzten SQL Server-Datenbank zu erstellen. Die
Metadaten können zur Aktualisierung der Datenbank beim Kunden verwendet werden.
Wahlweise kann die Verbindung aus einer VFP-Datenbank ausgelesen werden um die Verbindung zu einem SQL
Server herzustellen oder der SQL Server kann manuell ausgewählt werden.
Der Metadata Wizard erstellt die Tabelle „Datadict.dbf“. Dies ist eine freie Tabelle, in der die Struktur der SQL
Server Datenbank inklusiv Constraints, benutzerdefinierten Datentypen, Regeln, Ansichten und gespeicherten
Prozeduren gespeichert wird. Der Metadata Wizard durchsucht das aktive Projekt nach Verbindungen und
analysiert die Struktur der Datenbank. Wenn die Tabelle „Datadict.dbf“ an die Kunden weitergegeben wird, wird
die Struktur der dortigen Datenbank aktualisiert. Dabei wird wieder die bestehende Verbindung zum Zugriff auf
die Datenbank verwendet.
Visual Extend 10.0
Seite 46
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Der VFX Menü-Designer
Der VFX Menü-Designer (VMD) ist ein Werkzeug zur schnellen Entwicklung von Menüs. Der VMD ist ein
visueller Designer, in dem das Menü schon während der Entwicklung so angezeigt wird, wie es zur Laufzeit
aussehen wird. Der VMD macht die Entwicklung einfacher und ermöglicht die schnelle Einstellung aller MenüEigenschaften im Gegensatz vom VFP Menü-Designer, der nicht alle Eigenschaften von Menüs unterstützt. Es
können mehrsprachige Menüs erstellt werden, indem auf die entsprechende Schaltfläche in der Symbolleiste
geklickt wird.
Ein in einem VFX-Projekt enthaltenes Menü kann direkt aus dem VFP-Projekt-Manager mit dem VMD geöffnet
werden. Wahlweise können Menüs auch aus dem VMD heraus über das Öffnen-Symbol in der Symbolleiste oder
über den entsprechenden Menüpunkt geöffnet werden. Im Öffnen-Dialog kann zwischen den Menütypen .mnx
und .vmx gewechselt werden. Wenn ein Menü geöffnet wird, das noch nie mit dem VMD bearbeitet wurde, wird
es automatisch in das .vmx-Format konvertiert.
Das geöffnete Menü kann visuell bearbeitet werden. Es können Einträge hinzugefügt und gelöscht werden und es
können die Eigenschaften der einzelnen Einträge bearbeitet werden.
Neue Menü-Pads können durch einen Klick auf den Rechtspfeil, der sich rechts neben jedem Menüeintrag
befindet, angelegt werden. Dadurch wird ein Untermenü angelegt. Einem Menü können neue Einträge hinzugefügt werden, indem auf den Pfeil nach unten unterhalb des Eintrags geklickt wird.
Ein Menüeintrag oder ein Menü-Pad können gelöscht werden, wenn sich der Fokus darauf befindet. Über den
Menüpunkt löschen oder mit der Tastenkombination Strg+Entf wird der markierte Eintrag gelöscht.
Einige der Eigenschaften eines Menüeintrags können visuell eingestellt werden:
- Prompt text
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Visual Extend 10.0
Seite 47
Der angezeigte Text kann direkt eingetragen werden, wenn sich der Fokus auf dem jeweiligen Eintrag befindet.
Die Textbox „Prompt text“ im unteren Teil des VMD dient nur zur Anzeige des aktiven Eintrags im visuellen
Teil des Designers.
- Key text
Die Bezeichnung des Tastenschlüssels zeigt dem Anwender die Zugriffstaste oder Tastenkombination an, mit der
der Eintrag ausgewählt werden kann. Die Bezeichnung sollte dem im unteren Teil des VMD gewählten
Tastenschlüssels entsprechen.
- Check mark
Damit sich ein Menüeintrag wie ein Kontrollkästchen verhält, muss bei „AutoMark“ eine Markierung gesetzt
werden. Wenn zusätzlich eine Markierung bei „Check mark“ gesetzt wird, ist der Menüeintrag bereits beim
Laden des Menüs markiert. Für Menüeinträge, die sich wie ein Kontrollkästchen verhalten, können zusätzliche
Code-Teile ausgeführt werden, wenn das entsprechende Kontrollkästchen markiert wird („ActionOnMark“) bzw.
wenn die Markierung aufgehoben wird („ActionOnUnmark“). Im Standard-VFP-Editorfenster kann der jeweilige
Code bearbeitet werden.
Der Code, der bei ActionOnMark oder ActionOnUnmark eingegeben wird, kann wahlweise vor oder nach der
ActionOnSelect ausgeführt werden. Um dieses Verhalten einzustellen, ist die entsprechende Option „Before
ActionOnSelect“ oder „After ActionOnSelect“ auszuwählen.
- Icon
Jedem Eintrag in einem Menü kann ein Symbol zugeordnet werden. Dieses Symbol kann aus den in VFP integrierten Systemressourcen ausgewählt werden oder es kann eine Datei verwendet werden. Durch einen Klick auf
das schwarzumrandete Kästchen kann ein Symbol mithilfe des „Get a picture from“-Dialogs ausgewählt werden.
In diesem Dialog kann zwischen einer Datei und einem Symbol aus den VFP Systemressourcen gewählt werden.
Wenn einem Menüeintrag ein Symbol zugeordnet ist und sich dieser Menüeintrag wie ein Kontrollkästchen
verhalten soll, dient das Symbol als Markierung. Wenn der Eintrag markiert wird, erscheint das Symbol eingedrückt. Wenn die Markierung aufgehoben wird, erscheint das Symbol normal.
Die Position der einzelnen Einträge innerhalb des Menüs kann per Drag & Drop verändert werden. Für diesen
Vorgang ist der Vierwegepfeil
, der sich links neben allen Einträgen befindet festzuhalten. In einigen Fällen
sind Verschiebeoperationen nicht möglich. Ein Menü-Pad kann nicht in einen Menüeintrag umgewandelt werden
und umgekehrt. Außerdem ist es nicht möglich einen Menüeintrag in ein Untermenü zu verschieben.
Weitere Eigenschaften der Menüeinträge können im unteren Teil des Menü-Designers eingestellt werden. Dazu
gehören der Zeichensatz, die Vordergrund- und Hintergrundfarbe, eine Meldung, die in der VFP-Statusbar
angezeigt wird sowie der Name einer Konstanten, die verwendet wird, wenn ein mehrsprachiges Menü erstellt
wird. Alle Änderungen werden unmittelbar im aktiven Element angezeigt.
Mit der Schaltfläche „ActionOnSelect“ kann in einem Editor-Fenster die auszuführende Aktion eingegeben
werden. Über die Schaltfläche „SkipFor“ kann eine Bedingung eingegeben werden. Wenn diese Bedingung .T.
liefert, kann der dazugehörige Menüeintrag nicht ausgewählt werden.
Die eingestellten Eigenschaften beziehen sich immer auf den aktiven Menüeintrag. Neue Menüeinträge erben die
Eigenschaften des zuvor ausgewählten Eintrags.
Visual Extend 10.0
Seite 48
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Der Zeichensatz kann über die Schaltfläche „Font“ ausgewählt werden. Der Standard-Windows-Dialog zur
Auswahl eines Zeichensatzes erscheint. In diesem Dialog können insbesondere die Schriftart und die Schriftgröße
sowie der Schriftschnitt ausgewählt werden.
Zu jeder Zeit kann eine Vorschau des Menüs angezeigt werden, indem in der Symbolleiste oder im VMD-Menü
„Preview“ gewählt wird.
Die Klasse cDownload
Diese Klasse ermöglicht das Herunterladen von Dateien aus dem Internet. Bei Bedarf können die heruntergeladenen Dateien ausgeführt werden und es können weitere Aktionen ausgeführt werden. Insbesondere ist
hierdurch die Installation von Programmen aus dem Internet möglich.
Durch die Verwendung von Makros und die Execmacro-Funktion von VFP kann diese Klasse sehr vielseitig
eingesetzt werden.
Makros sind Zeichenketten, die eine Folge von Befehlen aus der Makrosprache enthalten. Eigene Makros können
erstellt werden. Ein Beispiel ist in der Tabelle Vfxsys.dbf im Feld Install_GS zu finden. Mit diesem Makro wird
das Programm Ghostscript aus dem Internet heruntergeladen und installiert.
Diese Klasse verwendet die in der Eigenschaft goProgram.cConnectionCheckURL gespeicherte Internetseite um
zu überprüfen, ob eine Internetverbindung besteht. Bei Bedarf wird eine Verbindung automatisch hergestellt.
Wenn im DFÜ-Netzwerk keine Verbindung eingetragen ist, wird ein neuer Eintrag hinzugefügt. Die
Verbindungsinformationen kann der Entwickler in den Eigenschaften vorgeben. Der Anwender kann die
Telefonnummer, den Benutzernamen und das Kennwort für die neue Verbindung bei Bedarf in einem Dialog
ändern.
Eigenschaften
LastErrorNo – Diese Eigenschaft enthält die Nummer des letzten Fehlers (falls ein Fehler aufgetreten ist). Damit
kann die Ursache des letzten Fehlers ermittelt werden.
LastErrorTest – Wenn ein Fehler aufgetreten ist, ist in dieser Eigenschaft der Text der Fehlermeldung zu finden.
Methoden
ExecMacro (vcMacro, lnNoRun)
vcMacro – Skript der Makrosprache, das ausgeführt werden soll.
lnNoRun – Wenn diese Eigenschaft auf .T. gesetzt wird, wird die heruntergeladene Datei nicht ausgeführt.
Befehle der Makrosprache
„D:“ URL
Unter dieser Internetadresse ist die herunterzuladende Datei zu finden. Dieser Befehl führt die Datei
nach dem erfolgreichen Herunterladen aus, wenn die Eigenschaft lnNoRun auf .F. gesetzt ist.
„C:“ nTimeOut; lPartial; lTopLevelForm; lResultOnError; SearchedString
Wartet bis das Fenster mit dem Titel SearchedString erscheint.
nTimeOut – Timeout in Sekunden. Wenn das erwartete Formular nicht innerhalb dieser Zeitspanne
erscheint, wird ein Timeout-Fehler erzeugt.
lPartial – Wenn der Wert dieser Eigenschaft auf .T. gesetzt ist, reicht es, wenn der übergebene Titel
einem Teil des Fensternamens entspricht. Wenn diese Eigenschaft auf .F. gesetzt ist, muss der übergebene Titel exakt dem Namen des Fensters entsprechen.
lTopLevelForm – Wenn der Wert dieser Eigenschaft auf .T. gesetzt ist, wird der Fenstername nur in
Top-Level-Fenstern gesucht.
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Visual Extend 10.0
Seite 49
lResultOnError – Mit dieser Eigenschaft wird das Verhalten des Skripts gesteuert, falls das Fenster
nicht innerhalb der vorgegebenen Zeitspanne gefunden wurde. Wenn das Fenster für die weitere Ausführung des Skripts zwingend erforderlich ist, muss nach Ablauf der vorgegebenen Zeitspanne die
Ausführung des Skripts abgebrochen werden. In diesem Fall muss der Wert von lResultOnError auf
.F. gesetzt werden. Wenn die Ausführung des Skripts unabhängig vom Vorhandensein des Fensters
nach der vorgegebenen Zeitspanne fortgesetzt werden soll, muss lResultOnError auf .T. gesetzt werden.
SearchedString –Bezeichnung, die in einem Fensternamen gesucht wird.
„W:“ nTimeOut; lPartial; lTopLevelForm; lRezultByError; SearchedString
Es wird gewartet bis das Fenster, das die angegebene Zeichenkette im Titel enthält, geschlossen ist.
nTimeOut – Timeout in Sekunden. Wenn das erwartete Fenster innerhalb dieser Zeitspanne nicht
geschlossen ist, wird ein Timeout-Fehler ausgelöst.
lPartial – Wenn der Wert dieser Eigenschaft auf .T. gesetzt ist, reicht es, wenn der übergebene Titel
einem Teil des Fensternamens entspricht. Wenn diese Eigenschaft auf .F. gesetzt ist, muss der übergebene Titel exakt dem Namen des Fensters entsprechen.
lTopLevelForm – Wenn der Wert dieser Eigenschaft auf .T. gesetzt ist, wird der Fenstername nur in
Top-Level-Fenstern gesucht.
lResultOnError – Mit dieser Eigenschaft wird das Verhalten des Skripts gesteuert, falls das Fenster
nicht innerhalb der vorgegebenen Zeitspanne gefunden wurde. Wenn das Fenster für die weitere Ausführung des Skripts zwingend erforderlich ist, muss nach Ablauf der vorgegebenen Zeitspanne die
Ausführung des Skripts abgebrochen werden. In diesem Fall muss der Wert von lResultOnError auf
.F. gesetzt werden. Wenn die Ausführung des Skripts unabhängig vom Vorhandensein des Fensters
nach der vorgegebenen Zeitspanne fortgesetzt werden soll, muss lResultOnError auf .T. gesetzt werden.
SearchedString – Eine Zeichenkette nach der im Titel eines Fensters gesucht wird.
„X:“
Schließt das Top-Level-Fenster. Mit dem „C:“-Befehl muss zuvor sichergestellt werden, dass das
gewünschte Fenster sichtbar ist.
„K:“ nKeyCode1; nKeyCode2; …
Die aufgeführten Tastenschlüssel werden in den Windows-Tastaturpuffer übertragen.
„U:“ URL
Von dieser Internetadresse wird das Herunterladen ausgeführt. Die heruntergeladene Datei wird unabhängig vom Wert der Eigenschaft lnNoRun nicht ausgeführt.
Beispiel
Beschreibung der Installation von Ghostscript:
D: ftp://mirror.cs.wisc.edu/pub/mirrors/ghost/AFPL/gs811/gs811w32.exe
Lädt die Datei gs811w32.exe aus dem Internet herunter und führt sie anschließend aus.
C: 30; .F.; .F.; .F.; WinZip Self-Extractor - gs811w32.exe
Wartet bis das Fenster mit dem Titel „WinZip Self-Extractor - gs811w32.exe“ erscheint.
K: 43
Sendet den Tastenschlüssel „Eingabetaste“ an das aktive Fenster. Dadurch wird das Entpacken der
Dateien ausgelöst.
C: 60; .F.; .F.; .F.; AFPL Ghostscript Setup
Wartet bis das Fenster mit dem Titel „AFPL Ghostscript Setup“ erscheint.
K: 43
Sendet den Tastenschlüssel „Eingabetaste“ an das aktive Fenster. Dadurch wird die Installation von
Ghostscript gestartet.
Visual Extend 10.0
Seite 50
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
W: 240; .F.; .F.; .F.; AFPL Ghostscript Setup Log
Wartet solange das Fenster „AFPL Ghostscript Setup Log“ geöffnet ist. Dieses Fenster zeigt den Fortschritt der Installation an und die Skriptausführung muss warten, bis dieser Vorgang beendet ist.
C: 30; .T.; .T.; .T.; Ghostscript
Wartet bis das Fenster mit dem Titel „Ghostscript“ erscheint. Dieses Fenster zeigt die Nachricht an,
dass die Installation erfolgreich war.
X:
Schließt das letzte Fenster.
Hiermit ist die Installation von Ghostscript beendet.
Die Klasse cCreatePDF
Diese Klasse erstellt Berichtsausgaben im PDF-Format. Als Parameter werden der Aliasname des zu verwendenden Cursors, der Name der zu erstellenden PDF-Datei, der Name der Berichtsdatei sowie eine optionale ForKlausel übergeben.
Um eine PDF-Datei erstellen zu können, müssen Ghostscript und ein Postscript-Druckertreiber auf dem jeweiligen Computer installiert sein. Diese Klasse prüft, ob Ghostscript bereits installiert ist. Sollte dies nicht der Fall
sein, wird Ghostscript automatisch aus dem Internet heruntergeladen und installiert. Für das Herunterladen aus
dem Internet wird die Klasse cDownload verwendet. In dem Memofeld Install_gs aus der Tabelle Vfxsys.dbf
befindet sich das Skript, das zum Herunterladen und zur Installation von Ghostscript verwendet wird. In der
Beschreibung der Klasse cDownload befinden sich weitere Hinweise.
Wenn kein Postscript-Druckertreiber installiert ist, installiert diese Klasse automatisch den Druckertreiber,
dessen Name in der Eigenschaft goProgram.PSPrinterToInstall hinterlegt ist. In der Regel sind hierfür keine
Benutzereingaben erforderlich.
Der Bericht wird über den Postscript-Druckertreiber ausgegeben und in einer Datei gespeichert. Das Programm
Ghostscript wandelt diese Postscript-Datei in eine PDF-Datei um.
Eigenschaften
LastErrorNo – Diese Eigenschaft enthält die Nummer des letzten Fehlers (falls ein Fehler aufgetreten ist). Damit
kann die Ursache des letzten Fehlers ermittelt werden.
LastErrorTest – Wenn ein Fehler aufgetreten ist, ist in dieser Eigenschaft der Text der Fehlermeldung zu finden.
Methoden
AddAttachment (tsAlias, tcFileName, tcReport, tcFor)
Fügt dem CreatePDF-Objekt Informationen über eine Datei hinzu. Es wird automatisch eine PDFDatei zum dem als Parameter übergebenen Bericht erstellt. Ein weiterer Ausdruck kann als Parameter
angeben werden. Dieser Ausdruck dient dazu die Daten des Berichts zu filtern.
Create_PDF(tcAlias, tcRezFile, tcFRXName, tcFor)
tcAlias – Aliasname, der für die Berichtsausgabe verwendet wird.
tcRezFile – Vollständiger Pfadname der zu erstellenden PDF-Datei.
tcFRXName – Name der Berichtsdatei, die zur Erstellung der PDF-Datei verwendet wird.
tcFor – For-Klausel zur Filterung der zu exportierenden Daten.
Diese Methode gibt den Wert .T. zurück, wenn die PDF-Datei erfolgreich erstellt werden konnte. .F.
wird zurückgegeben, wenn die PDF-Datei nicht erstellt werden konnte. In diesem Fall sind die Nummer und die Beschreibung des aufgetretenen Fehlers in den Eigenschaften LastErrorNo und
LastErrorText gespeichert.
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Visual Extend 10.0
Seite 51
Die Klasse cEmail
Diese Klasse gibt dem Entwickler die Möglichkeit E-Mails zu versenden. Es müssen nur wenige Parameter der
Methode Send_Email_Report übergeben werden um eine Berichtsausgabe im PDF-Format als E-Mail-Anhang
versenden zu können.
Eigenschaften
LastErrorNo – Diese Eigenschaft enthält die Nummer des letzten Fehlers (falls ein Fehler aufgetreten ist). Damit
kann die Ursache des letzten Fehlers ermittelt werden.
LastErrorTest – Wenn ein Fehler aufgetreten ist, ist in dieser Eigenschaft der Text der Fehlermeldung zu finden.
oEmail_Attachment – Diese Eigenschaft wird nur intern verwendet. Sie enthält eine Collection der Anhänge.
Methoden
AddAttachment (tsAlias, tcFileName, tcReport, tcFor)
Fügt dem E-Mail-Objekt Informationen über einen E-Mail-Anhang hinzu, der mit der nächsten E-Mail
gesendet wird. Die Informationen über alle vorzubereitenden PDF-Anhänge werden in der Eigenschaft
oEmail_Attachment gespeichert. Wenn der Aliasname einer geöffneten Tabelle oder Ansicht
angegeben und der Name einer Berichtsdatei übergeben wird, wird diese Klasse automatisch eine
PDF-Datei zu dem Bericht erstellen. Es kann ein weiterer Ausdruck als Parameter angegeben werden,
der dazu verwendet wird die Daten des Berichts zu filtern. Wenn kein Aliasname angegeben wird und
keine Tabelle im aktuellen Arbeitsbereich geöffnet ist, nimmt die Klasse an, dass ein Dateianhang
vorbereitet wurde. In diesem Fall muss die Datei existieren, wenn die Methode Send_Email_Report
aufgerufen wird.
tcAlias – Aliasname, der für die Berichtsausgabe und für den PDF-Export verwendet wird.
tcRezFile – Name des Dateianhangs (wenn eine PDF-Datei erstellt wird, wird dies der Name der PDFDatei).
tcFRXName – Name der Berichtsdatei, aus der die PDF-Datei erstellt wird.
tcFor – For-Klausel mit der die Berichtsdaten für die PDF-Ausgabe gefiltert werden.
Send_Email_Report (tcEmail, tcSubject, tcText)
Sendet eine E-Mail. Wenn die E-Mail mit Anhängen versendet werden soll, müssen diese vorher mit
der Methode AddAttachment angefügt werden.
tcEmail – Adresse des E-Mail-Empfängers.
tcSubject – Betreff der E-Mail.
tcText – Text der E-Mail.
ClearAttachment
Löscht alle E-Mail-Anhänge.
Die Methode AddAttachment kann entsprechend der Anzahl der benötigten Anhänge beliebig oft aufgerufen
werden. Es werden die Aliasnamen der Tabellen oder Ansichten, die Namen der zu erstellenden Dateien, die
Namen der Berichtsdateien und eventuell zu verwendende For-Klauseln als Parameter übergeben. Dann wird die
Methode Send_Email_Reports aufgerufen. Alle PDF-Dateien werden erstellt und als E-Mail-Anhänge versendet.
Auch die Dateien, die zuvor vorbereitet wurden und als Anhang versendet werden sollen, werden an die E-Mail
angehängt.
Visual Extend 10.0
Seite 52
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Die Klasse cArchive
Diese Klasse dient der Datensicherung und Datenwiederherstellung. Die Daten werden in Zip-Archiven gesichert. Der Name des Archivs wird aus dem Namen des Datenordners und dem aktuellen Datum in ANSI-Form
zusammengesetzt. Wenn zum Beispiel der Datenordner „Data“ heißt und die Datensicherung am 4. November
2003 durchgeführt wird, heißt das Archiv Data20031104.zip.
Eigenschaften
OverrideFile – Mit dieser Eigenschaft wird festgelegt was passiert, wenn eine Datei mit dem gleichen Namen
schon vorhanden ist.
0 – Vorgang abbrechen, wenn bereits eine Datei mit dem gleichen Namen existiert.
1 – Wenn eine Datensicherung durchgeführt wird, werden neue Dateien dem Archiv hinzugefügt und
bestehende Dateien werden aktualisiert. Wenn eine Wiederherstellung durchgeführt wird, werden
existierende Dateien nicht überschrieben.
2 – Wenn eine Datensicherung durchgeführt wird, wird ein bestehendes Archiv überschrieben. Wenn
eine Wiederherstellung durchgeführt wird, werden existierende Dateien überschrieben.
OperationSuccessfully – Enthält das Ergebnis der letzten Aktion.
.T. – wenn die Aktion erfolgreich ausgeführt werden konnte.
.F. – wenn die Aktion nicht ausgeführt werden konnte.
Methoden
CreateArchive (lcFileLocation, lcMask, lcArchFilePathName)
lcFileLocation – Vollständiger Pfad zu dem Ordner, dessen Inhalt gesichert werden soll.
lcMask – Zu sichernde Dateien, Beispiel: „*.DBF;*.FPT;*.CDX“.
lcArchFilePathName – Vollständiger Pfadname der zu erstellenden Archivdatei.
Rückgabewert: .T. – wenn die Aktion erfolgreich ausgeführt werden konnte, .F. – wenn die Aktion
nicht ausgeführt werden konnte.
ZipProgress (tcCurrentOperatedFile, nState, nAllFilesSize, nZIPedFilesSize, nArchiveCurrentSize) CallbackFunktion der CreateZipArchive-Funktion (in VFX.fll).
tcCurrentOperatedFile – Der Name der Datei, die dem Archiv hinzugefügt wird.
nState – Aktuelle Aktion:
1 – Datei existiert
2 – Datei wird dem Archiv hinzugefügt
3 – Datei erfolgreich dem Archiv hinzugefügt
4 – Datei konnte dem Archiv nicht hinzugefügt werden
5 – Archivierungsvorgang erfolgreich beendet
6 – Archivierungsvorgang nicht erfolgreich beendet
7 – Keine Dateien zu archivieren
nAllFilesSize – Die Größe aller zu archivierenden Dateien.
nZIPedFilesSize – Die Größe der dem Archiv bereits hinzugefügten Dateien.
nArchiveCurrentSize – Die aktuelle Größe des Archivs.
Rückgabewert: 0 – Abbruch der Aktion. 1 – Fortsetzen Dateien dem Archiv hinzuzufügen und existierende Dateien zu überschreiben. 2 – Bestehende Archivdatei überschreiben
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Visual Extend 10.0
Seite 53
EextractFromArchive(lcArchFileForExtract, lcPathForExtract)
lcArchFileForExtract – Vollständiger Pfadname der zu entpackenden Zip-Datei.
lcPathForExtract – Zielordner, in den die Dateien entpackt werden sollen.
UnZipProgress (tcCurrentOperatedFile, nState, nArchiveFilesSize, nUnZIPedFilesSize)
Callback-Funktion der ExtractZipArchive-Funktion (in VFX.fll).
tcCurrentOperatedFile – Name der aktuell entpackten Datei aus dem Archiv.
nState – Aktuelle Aktion
1 – Datei existiert bereits
2 – Datei wird entpackt
3 – Datei entpacken beendet
4 – Datei konnte nicht entpackt werden
5 – Entpacken des Archiv erfolgreich abgeschlossen
6 – Entpacken des Archiv nicht erfolgreich abgeschlossen
nArchiveFilesSize – Größe des Archivs
nUnZIPedFilesSize – Größe des Teils des Archivs, das bereits entpackt wurde.
Rückgabewert: 0 – Abbruch der Aktion. 1 – Aktuelle Datei nicht entpacken.2 – Vorhandene Datei
überschreiben.
Hooks
VFX bietet bei allen wichtigen Methoden Eingriffsmöglichkeiten über Hooks. Als Beispiel schauen wir die
OnInsert()-Methode eines Formulars an. Die OnInsert()-Methode wird aufgerufen, wenn ein neuer Datensatz
angefügt werden soll. Dabei wird zunächst die Methode OnPreInsert() aufgerufen. Nur wenn diese Methode .T.
als Rückgabewert liefert, wird ein Datensatz angefügt. Nach dem Anfügen des Datensatzes wird die
OnPostInsert()-Methode aufgerufen. Hier können z. B. mit dem Replace-Befehl Daten in den neuen Datensatz
eingetragen werden. Wenn die OnPostInsert()-Methode .F. zurückliefert, wird ein Tablerevert() durchgeführt und
der neue Datensatz damit sofort wieder gelöscht.
Eine elegante Möglichkeit in den Funktionsablauf von VFX-Methoden einzugreifen, ohne die Klassen verändern
zu müssen, ist der Einsatz von Hooks.
In den meisten VFX-Methoden ist ein Eventhook eingebaut. Wenn die Eventhooks aktiviert sind, wird in jedem
Eventhook die Funktion Eventhook-Handler aufgerufen. Als Parameter werden dieser Funktion der Name der
aufrufenden Methode, eine Referenz auf das aktuelle Objekt und eine Referenz auf das aktuelle Formular
übergeben. Über eine Case-Konstruktion kann dann individueller Code ausgeführt werden. Hierdurch kann an
praktisch jeder Stelle in den Funktionsablauf von VFX eingegriffen werden.
Das Konzept der Hooks wurde in VFX 10.0 erweitert. Bisher war es möglich durch einen Hook innerhalb einer
VFX-Methode einen eigenen Codeblock auszuführen. Über den Rückgabewert des Hooks konnte man steuern,
ob der noch folgende VFX-Code in der Methode weiter ausgeführt werden sollte oder nicht. Der Rückgabewert,
den die VFX-Methode dabei lieferte, konnte nicht beeinflusst werden und war in VFX fest vorgegeben.
Mit den erweiterten Hooks in VFX 10.0 kann nun zusätzlich der Rückgabewert der Methode vom Hook gesteuert
werden.
Hooks sind in der Datei Vfxhook.prg gespeichert. Die Verwendung von Hooks kann im VFX – Application
Builder mit der Eigenschaft nenablehook = 1 eingeschaltet werden. Nenablehook ist eine Eigenschaft des
Anwendungsobjekts.
Im folgenden Beispiel wird bei allen Steuerelementen, die disabled sind, die Schriftfarbe schwarz eingestellt.
function EventHookHandler(tcEvent, toObject, toForm)
local lContinue
lContinue = .T.
DO CASE
Visual Extend 10.0
Seite 54
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
CASE UPPER(tcEvent)=="INIT"
IF PEMSTATUS(toObject,"disabledforecolor",5)
toObject.disabledforecolor=;
eval(left(rgbscheme(1,2),at(",",rgbscheme(1,2),3)-1)+")")
IF PEMSTATUS(toObject,"disabledbackcolor",5)
toObject.disabledbackcolor=;
eval("rgb("+substr(rgbscheme(1,2),;
at(",",rgbscheme(1,2),3)+1))
ENDIF
ENDIF
ENDCASE
return lContinue
endfunc
VFX – Project Update Wizard
Projekte, die mit älteren Versionen von VFX oder mit älteren Builds von VFX 10.0 erstellt wurden, können jetzt
automatisch auf die neueste Version aktualisiert werden.
Der VFX – Project Update Wizard kann direkt aus dem VFX 10.0-Menü über den Menüpunkt Project, Update
Project gestartet werden. Der VFX – Project Update Wizard vergleicht die Version des geöffneten Projekts mit
der installierten VFX 10.0-Version. Wenn das Projekt mit einer älteren VFX-Version erstellt wurde, wird der
Entwickler gefragt, ob das Projekt aktualisiert werden soll.
Nach einem Klick auf Ja beginnt der Wizard mit der Arbeit. Zunächst wird zur Sicherheit eine Sicherungskopie
des Projekts in einer Zip-Datei angelegt. Die Zip-Datei wird im Projektordner angelegt und erhält den Namen der
Projektdatei. Wenn das Archiv bereits existiert oder nicht angelegt werden kann, beendet der Wizard seine Arbeit
sofort.
Der VFX – Project Update Wizard aktualisiert die VFX-Klassenbibliotheken, VFX-Berichtsvorlagen und die
Datei Vfxfunc.prg. Der Tabelle Vfxmsg.dbf werden gegebenenfalls neu hinzugekommene Datensätze hinzugefügt.
Alle Include-Dateien werden neu erstellt.
Die Struktur der freien VFX-Tabellen wird aktualisiert. Fehlende Felder oder Indexschlüssel werden automatisch
ergänzt.
Fehlende Dateien werden dem Projekt automatisch hinzugefügt, wie zum Beispiel neue Bitmap-Dateien oder
freie Tabellen.
Damit hat der VFX Update Project Wizard seine Aufgabe getan und hat uns damit viel Arbeit abgenommen. In
der Regel werden die so aktualisierten Projekte sofort mit der neuen VFX 10.0-Version lauffähig sein. Trotzdem
sollte der Entwickler das Projekt sorgfältig prüfen und bei Bedarf manuelle Ergänzungen machen.
Die meisten Anwendungen werden zum Beispiel ein speziell angepasstes Menü Vfxmenu haben. Der Update
Projekt Wizard kann nicht wissen, welche Menüeinträge der Entwickler vielleicht absichtlich entfernt hat. Der
Wizard kann daher keine neuen Menüeinträge hinzufügen. Durch einen Vergleich mit dem Menü aus der
VFX 10.0-Installation können Menüeinträge für neue Funktionen aber schnell ergänzt werden.
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Visual Extend 10.0
Seite 55
Prüfen Sie das neue Vfxmain.prg und machen Sie von Hand die für Ihr Projekt erforderlichen Änderungen.
In bisherigen Versionen von VFX wurden public Variablen für die Felder aus den Datensätzen der Tabellen
Vfxsys.dbf und Vfxuser.dbf angelegt. In VFX 10.0 werden stattdessen Eigenschaften von Objekten verwendet.
Beispiel:
Alt: gu_meinFeld
Alt: gs_meinFeld
Neu: goUser.meinFeld
Neu: goSystem.meinFeld
Sie können alle Verweise auf gu_ bzw. gs_ in Ihren Projekten mit dem Code Reference Tool aus VFP 9 finden
und so alle betreffenden Code-Stellen einfach und schnell ändern.
Fehlerprotokoll
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 Anwendungs-Assistenten 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.
Fehlerbehandlung
In VFX 10.0 ist eine erweiterte Behandlung von Laufzeitfehlern implementiert. Das Laufzeitfehlerprotokoll kann
vom Kunden jetzt per E-Mail an den Entwickler gesendet werden. Der Kunde wird über den Inhalt des
Fehlerberichts informiert. Der Versand des Fehlerberichts als E-Mail an den Entwickler ist der schnellste Weg
Probleme in einer Anwendung zu lokalisieren und zu beseitigen. Die E-Mailadresse des Entwicklers wird der
Eigenschaft goProgram.csupportemail zugewiesen. Der Wert dieser Eigenschaft kann mit dem VFX –
Application Builder bearbeitet werden.
nAppOnErrorBehavior – Diese Eigenschaft steuert das Verhalten der Anwendung im Fehlerfall.
0 – Laufzeitfehler werden ignoriert.
1 – Es wird eine Fehlermeldung angezeigt (Standardwert).
Visual Extend 10.0
Seite 56
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
2 – Die Ausführung der Anwendung wird nach Anzeige eines Hinweises beendet.
ErrorDetailLevel – Diese Eigenschaft steuert welche Informationen im Fehlerfall in der Tabelle Vfxlog.dbf
protokolliert werden.
0 – Nur die Fehlermeldung aber keine Information über den Aufrufstapel.
1 – Die Fehlermeldung und Informationen über den Aufrufstapel (Standardwert).
2 – Vollständige, detaillierte Fehlerinformationen.
DBI Controls aus Sedna
Mit Sedna werden acht ActiveX Steuerelemente von DBI geliefert. Hiermit lassen sich gut aussehende und
leistungsfähige Elemente der Benutzeroberfläche aufbauen. Microsoft Outlook empfinden viele Benutzer als
angenehm zu bedienen. Wie schön wäre es, eine „Office Bar“ in eigene Anwendungen integrieren zu können?
Dazu ein Menü und eine Symbolleiste wie in Office 2003 und perfekte Eingabe von Datums- und Zeitwerten. So
bekommt jede VFX Anwendung ein neues und modernes Look & Feel.
Schon seit einiger Zeit sind von DBI Technologies die „Studio Controls R3“ erhältlich. Bei den Studio Controls
handelt es sich um ein umfangreiches Paket von ActiveX Steuerelementen, die in Projekte verschiedener
Programmiersprachen eingebunden werden können.
Für Sedna stehen acht der ActiveX Steuerelemente aus den Studio Controls kostenlos zur Verfügung. Diese
ActiveX Steuerelemente mit dem Namen „DBI Sedna Components“ heruntergeladen werden und dürfen mit VFP
9 SP 2 Anwendungen an Endkunden weitergegeben werden. Hier der Download-Link:
http://www.dbi-tech.com/Special_Offers_SednaComponents.asp
Nach der Installation müssen die DBI Sedna Components mit dem DBI License Manager lizensiert werden. Zur
Lizensierung muss eine E-Mailadresse angegeben werden. Der Aktivierungsschlüssel wird sofort per E-Mail
zugestellt.
Ohne Aktivierung ist eine Verwendung der DBI Sedna Components in der Entwicklungsumgebung von VFP
nicht möglich.
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Visual Extend 10.0
Seite 57
Mit diesen acht ActiveX Steuerelementen werden die Wünsche der VFP Programmierer wahr. Endlich können
VFP Anwendungen mit einer modernen Benutzeroberfläche versehen werden.
ctContact
Mit diesem ActiveX Steuerelement wird eine Art mehrspaltiges Grid mit einer dynamischen Zeilenhöhe
bereitgestellt. Es besteht die Möglichkeit die Einträge zu bearbeiten. Eine Kontaktliste im Stil von Microsoft
Outlook ist eine Anwendungsmöglichkeit.
ctDays
Mit diesem ActiveX Steuerelement steht uns ein leistungsfähiger Kalender in einer Tagesansicht und vielen
Darstellungsmöglichkeiten zur Verfügung.
ctDEdit
Dieses ActiveX Steuerelement ermöglicht die Eingabe von Datums- und Zeitwerten.
ctDropMenu
Ein kontextsensitives Menü mit dem Aussehen von Microsoft Office 2003 Anwendungen wird durch dieses
ActiveX Steuerelement bereitgestellt. Jedem Menüeintrag kann ein Icon zugeordnet werden.
ctFrame
Dieses ActiveX Steuerelement ist ein Container Steuerelement. Mit ctFrame können sehr schöne Hintergründe
gestaltet werden.
Visual Extend 10.0
Seite 58
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
ctListBar
Dieses ActiveX Steuerelement erinnert an Microsoft Outlook oder an die aus VFP bekannte Toolbox. In einem
Container können Gruppen geöffnet und geschlossen werden. Jede Gruppe kann Einträge enthalten. Beim Klick
auf einen Eintrag wird eine Aktion ausgelöst. Dieses Steuerelement bietet sich zum Öffnen von Formularen an.
Es besteht die Möglichkeit mit mehreren Spalten zu arbeiten.
ctToolBar
Dieses ActiveX Steuerelement ist universell für die Anzeige von Menüs und Symbolleisten einsetzbar. Das
Aussehen kann auf einfache Weise so eingestellt werden, dass Menü und Symbolleiste den Anwendungen aus
Microsoft Office 2003 ähneln.
ctTray
Dieses ActiveX Steuerelement bietet dem Entwickler die Möglichkeit eine Anwendung mit einem Icon im
Windows System Tray zu verstecken.
Die ActiveX Steuerelemente im Einzelnen
ctContact – Kontaktverwaltung
Das Steuerelement ctContact wurde speziell für die Verwaltung von Kontaktdaten entwickelt. In diesem
Steuerelement kann eine Liste von Datensätzen in einem Kartenformat angezeigt werden. Jede Karte hat dabei
eine variable Größe. Der Anwender kann die Daten in diesem Steuerelement bearbeiten.
Es kann eingestellt werden, dass nur Felder mit Inhalt auf einer Karte angezeigt werden. Dadurch erhalten die
Karten eine dynamische Länge.
Mit einer Suchmethode kann ein Datensatz gefunden werden, der einen bestimmten Text enthält. Die Methode
positioniert die Ansicht so, dass der gefundene Datensatz in den sichtbaren Bereich kommt.
Mit einem Mausklick auf einen Eintrag kann der Anwender mit der Bearbeitung beginnen. Bei der Bearbeitung
wird ein Ereignis ausgelöst.
Für die Darstellung der Kontaktansicht gibt es vielfältige Einstellmöglichkeiten. Es können verschiedene Farben
und Füllstile gewählt werden. Diese Einstellungen können für Überschriften und den Kartenbereich unabhängig
voneinander gemacht werden. Als Füllstil sind auch Farbverläufe in allen Richtungen möglich.
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Visual Extend 10.0
Seite 59
Um das Steuerelement programmatisch mit Daten zu füllen, müssen einige Schritte durchgeführt werden.
Zunächst müssen mit der Methode AddTitle die anzuzeigenden Felder definiert werden. Diese Methode bekommt
als Parameter die anzuzeigende Bezeichnung für das Feld. Die folgenden Code Zeilen entsprechen den
Einstellungen für den Screesnhot von oben.
ctContact1.AddTitle
ctContact1.AddTitle
ctContact1.AddTitle
ctContact1.AddTitle
"Business :"
"Home :"
"Mobile :"
"E-Mail :"
Mit der Methode AddHeader wird ein neuer Datensatz hinzugefügt und für diesen Datensatz wird die Überschrift
eingetragen. Rückgabewert ist die ID für diesen neuen Datensatz
nIndex = ctContact1.AddHeader("Gluck, Craig")
Mit der Methode ItemText werden die Daten für einen Datensatz hinzugefügt. Als Parameter muss der Index für
den Datensatz sowie die Nummer des Feldes übergeben werden.
ctContact1.ItemText(nIndex, 1) = "736-1174"
ctContact1.ItemText(nIndex, 2) = "553-2217"
ctContact1.ItemText(nIndex, 3) = "465-4756"
Genauso werden Daten für weitere Datensätze hinzugefügt. Es muss nicht jedes Feld mit Daten gefüllt werden.
Dadurch wird eine dynamische Zellhöhe erreicht.
nIndex = ctContact1.AddHeader("Shead, Alan")
ctContact1.ItemText(nIndex, 2) = "365-1174"
Visual Extend 10.0
Seite 60
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
ctDays – Kalender Tagesansicht
Das ActiveX Steuerelement ctDays stellt einen grafischen Kalender dar. Die Anzeige ist ähnlich zur Anzeige in
Microsoft Outlook. Es ist die Anzeige von Termin für einen Tag möglich. Dies entspricht der Tagesansicht von
Outlook. Eine Wochen- oder Monatsansicht ist mit anderen ActiveX Steuerelementen von DBI möglich, die
jedoch nicht mit Sedna geliefert werden. Es kann eine Zeitachse angezeigt werden, die grafisch die Termine eines
Tages symbolisiert.
Neue Termine können durch einen Mausklick auf die gewünschte Zeit angelegt werden. Zu jedem Termin kann
ein Beschreibungstext eingegeben werden.
Bei einem Mausklick auf einen Termineintrag, kann dieser direkt im ActiveX Steuerelement bearbeitet werden.
Termine können auch programmatisch angelegt, geändert oder gelöscht werden.
Standardmäßig wird dieses Steuerelement im Windows XP Stil angezeigt.
Die Zeiteinteilung kann in Schritten zu 5, 10, 15, 30 oder 60 Minuten erfolgen. Unabhängig von der Anzeige
können Termine minutengenau erfasst werden. Die Start- und Endzeit in der Tagesansicht können frei gewählt
werden.
Es gibt Methoden und Eigenschaften die es ermöglichen sich überschneidende Termine zu erkennen.
Überschneidungen können im Kalender auch angezeigt werden.
Diese Abbildung zeigt einen privaten Termin mit einer Erinnerung und einem Bild sowie einer Ortsangabe und
einem Beschreibungstext.
Jedem Termin können bis zu vier Bilder zugeordnet werden, die in dem Steuerelement enthalten sind. Dies sind
die Bilder Erinnerung, vorläufig, privat und Ortsangabe. Zusätzlich können bis zu drei weitere eigene Bilder
hinzugefügt werden. Dem Steuerelement können insgesamt bis zu 100 Bilder hinzugefügt werden, von denen in
einem Termin drei individuelle Bilder angezeigt werden können.
Mit einer einzigen Code Zeile kann die Ansicht des Steuerelements gedruckt werden. Mit der Methode
PrintInWindow kann die Ansicht des Steuerelements in einem anzugebenden Seitenbereich gedruckt werden.
Die Start- und Endzeit eines Termins können durch Ziehen mit der Maus in der Tagesansicht verschoben werden.
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Visual Extend 10.0
Seite 61
Zu jedem Termin kann automatisch eine ID generiert werden. Dadurch können die Termine einfach in einer
Tabelle gespeichert werden.
Es können mehrere Zeiten für verschiedene Zeitzonen angezeigt werden.
In dieser Abbildung werden zwei Zeitzonen angezeigt.
Hier Beispiele für weitere mögliche Ansichten des Kalenders:
Visual Extend 10.0
Seite 62
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
ctDEdit – Datum- und Zeitbearbeitung
Dieses Steuerelement ermöglicht die Eingabe und Anzeige von Datum- und Zeitwerten. Mit einer Eigenschaft
kann eingestellt werden, ob Datum- oder Zeitwerte eingegeben werden sollen. Viele weitere Eigenschaften
ermöglichen die Steuerung einer formatierten Eingabe.
Bei der Verwendung für die Zeiteingabe kann zwischen 12 Stunden und 24 Stunden Format gewählt werden. Die
Datumeingabe wird in vielen internationalen Formaten unterstützt. Es werden alle Formate unterstützt, die auch
in VFP unterstützt werden.
Die Anzeige ist in verschiedenen Präsentationsstilen möglich. Mit einfachen Einstellungen, kann ein typischer
Windows XP Stil eingestellt werden. Es kann auch eine Darstellung gewählt werden, bei der das Steuerelement
flach erscheint und sein Aussehen wechselt, wenn es den Fokus erhält.
Am rechten Rand des Steuerelements kann ein Pfeil nach unten oder ein Spinner angezeigt werden. Beim Klick
auf diese Elemente wird ein Ereignis ausgelöst, aber es wird standardmäßig keine Aktion ausgeführt. Es ist
jedoch einfach in diese Ereignisse Code unterzubringen, der einen Kalender startet oder das Datum tageweise
vor- oder zurückzählt. Die Farbe und das Aussehen der Schaltflächen kann eingestellt werden.
Das Steuerelement kann so eingestellt werden, dass beim anhaltenden Klick auf eine der Schaltflächen das
entsprechende Ereignis in einem einstellbaren Intervall wiederholt gefeuert wird. Damit ist zum Beispiel ein
fortlaufendes hochzählen des Datums bei gedrückter Maustaste möglich.
Alle Einstellungen am ctDEdit Steuerelement können in einer XML Datei gespeichert werden. Genauso können
auch alle Einstellungen aus einer XML Datei gelesen werden. Dies ist eine Alternative zur programmatischen
Einstellung aller Eigenschaften.
Das Steuerelement ctDEdit unterstützt eine intelligente Datumeingabe. Unvollständige Datumeingaben werden
beim Verlassen des Steuerelements vervollständigt.
Bei der Verwendung für die Zeiteingabe kann ein gültiger Zeitraum vorgegeben werden.
Ähnlich wie in VFP wird ein Century Rollover unterstützt.
Wesentlich besser als in VFP, ist die Fehlerbehandlung gelöst. Wenn in VFP eine Textbox eine Controlsource
vom Typ Datum hat und der Anwender ein ungültiges Datum eingibt, kann er die Textbox nicht verlassen, bis er
seine Eingabe korrigiert und ein gültiges Datum eingegeben hat. In ctDEdit wird ein Ereignis gefeuert, wenn der
Anwender versucht das Steuerelement mit einer ungültigen Eingabe zu verlassen. Standardmäßig wird eine
ungültige Eingabe beim Verlassen des Steuerelements gelöscht.
ctDropMenu – Rechtsklickmenü
Dieses ActiveX Steuerelement erstellt Rechtsklickmenüs. Es sind viele Darstellungsmöglichkeiten einstellbar.
Neben der Darstellung im Windows XP Stil können insbesondere Bilder, Texte, Hintergrund und Farben
eingestellt werden.
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Visual Extend 10.0
Seite 63
Jedem Menüeintrag kann ein individuelles Bild zugeordnet werden. Jedem Menüeintrag kann ein zusätzlicher
Hinweistext zugeordnet werden.
Dem Menü können Farben für alle Menüeinträge, für den ausgewählten Menüeintrag und für den linken
Randbereich zugeordnet werden. Es können auch Füllmuster verwendet werden.
Rechtklickmenüs können kaskadierend in bis zu vier Ebenen erstellt werden.
Integration in VFX
In der Klassenbibliothek Vfxformbase.vcx befindet sich die Formularklasse cDBIDropMenuVfxBase. Auf dieser
Formularklasse befindet sich das ActiveX Steuerelement ctDropMenu. In der Klassenbibliothek Vfxform.vcx
befindet sich die Ableitung cDBIDropMenu.
Wenn die Eigenschaft goProgram.nMenuandToolbarStyle den Wert 1 hat, wird automatisch das ctDropMenu
verwendet.
ctFrame
Das ActiveX Steuerelement ctFrame verhält sich in VFP wie eine Container Klasse. Innerhalb des
Steuerelements können VFP Steuerelemente platziert werden.
Der ctFrame Container hat einen einstellbaren Hintergrund mit unterschiedlichen Farbverläufen. Bei einem
Resize des Formulars, wird der Farbverlauf für die neue Größe des Formulars neu berechnet. Der Hintergrund
sieht also auch während oder nach einer Änderung der Größe gut aus.
Neben der Darstellung eines Hintergrunds ist die Einstellung von verschiedenen Rändern, wahlweise an allen
Seiten des Steuerelements möglich. Diese Möglichkeit stellt für VFP Entwickler aber nichts besonders dar.
Visual Extend 10.0
Seite 64
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
ctListBar – Öffnen-Dialog
In einem ctListBar Steuerelement werden mehrspaltige Listen angezeigt, in denen der Anwender durch auf- und
zuklappen von Gruppen navigieren kann. Jede Gruppe kann individuell andersartige Einträge enthalten.
Ein Listeneintrag innerhalb einer Gruppe kann ein Text oder ein Bild oder eine Kombination aus beidem sein.
Wenn auf eine Gruppenüberschrift geklickt wird, wird die dazugehörige Gruppe geöffnet. Das Steuerelement
führt dabei eine kleine Animation (smooth scrolling) aus, die dem Anwender den Vorgang verdeutlicht. Wenn
mehr Gruppen vorhanden sind, als im anzeigbaren Bereich dargestellt werden können, werden automatisch Pfeile
angezeigt, die ein Scrollen innerhalb der Gruppen ermöglichen.
Alle Einstellungen in einem ctToolbar Steuerelement können in einer XML Datei gespeichert werden. Alle
Einstellungen können auch wieder aus einer XML Datei gelesen werden.
Die Elemente innerhalb einer ctToolbar können horizontal, vertikal oder mehrspaltig angezeigt werden. Es ist
möglich mehrspaltige Listen aufzubauen.
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Visual Extend 10.0
Seite 65
Außer der Darstellung im Windows XP Stil ist es möglich den Hintergrund der Listen, der Gruppenüberschriften
und der Navigationsschaltflächen mit verschiedenen Mustern oder Farbverläufen zu füllen. Als Hintergrund für
die Liste kann auch ein Bild verwendet werden.
Das Element, über dem sich gerade die Maus befindet, kann durch eine andere Hintergrundfarbe, einen anderen
Zeichensatz oder Schriftstil oder auch durch eine andere Schriftfarbe deutlich gemacht werden.
Ähnlich wie in der Toolbox von VFP wird auch in ctToolbar Drag & Drop unterstützt. Über Eigenschaften kann
eingestellt werden, ob eine geschlossen Gruppe automatisch geöffnet werden soll, wenn mit der Maus ein Objekt
über die Gruppe bewegt wird.
Listeneinträgen können Tooltips zugewiesen werden. Die Bezeichnung eines Listeneintrags kann umgebrochen
werden. Es können bis zu 100 Bilder verwaltet werden.
Wenn die Maus über ein Element bewegt wird, können die Zeichensatzeinstellungen geändert werden und es
kann auch ein anderes Bild angezeigt werden.
Die Schaltflächen zur Navigation können innerhalb der Liste an einer Seite oder an einer Seite einer
Gruppenüberschrift platziert werden.
Visual Extend 10.0
Seite 66
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Integration des Öffnen-Dialogs in VFX
Die Klasse für den Öffnen-Dialog basierend auf der Klasse ctListBar heißt cdbiopenformvfxbase. Von allen
Öffnen-Dialogen gemeinsam verwendeter Code befindet such in der Klasse copenformvfxbase.
Die Klasse cdbiopenformvfxbase ist eine Formularklasse, auf der das ActiveX Steuerelement ctListBar platziert
ist.
Methoden
Makegroup() – Mit dieser Methode wird eine neue Gruppe angelegt. Dafür wird die Methode addList des
ctListBar Objekts aufgerufen. Rückgabewert ist der Index des eingefügten Elements.
Makeitem() – Mit dieser Methode wird ein neuer Eintrag einer Gruppe hinzugefügt. Hierfür wird die Methode
addItem des ctListBar Objekts aufgerufen. Rückgabewert ist der Index des eingefügten Elements.
Eigenschaften
ControlStyle – Diese Eigenschaft steuert das Aussehen des Steuerelements. Mögliche Werte sind:
0 – Standardwert.
1 – Listenansicht wie in Outlook 97.
2 – Symbolleiste wie in Visual Studio.
3 – Listenansicht wie in Outlook XP mit blauem Farbverlauf.
4 - Listenansicht wie in Outlook XP mit olivfarbenem Farbverlauf.
TipsDisplay – Mit dieser Eigenschaft können Tooltips eingeschaltet werden.
ctToolBar – Menüs und Symbolleisten
ctToolBar ist eine Komponente zur horizontalen Darstellung von Menüs und Symbolleisten. Diese Beschreibung
lässt schon eine Einschränkung erkennen. Im Gegensatz zu Symbolleisten, die mit VFP erstellt werden, kann eine
ctToolbar nicht an der rechten oder linken Seite des Bildschirms gedockt werden.
Symbolleiste und Menü werden in diesem Steuerelement gleich behandelt. In beiden Fällen sind Schaltflächen
vorhanden, die auf einen Mausklick reagieren. Beim Menü enthalten diese Schaltflächen einen Text als
Beschriftung. In der Symbolleiste werden üblicherweise Symbole statt einer Beschriftung verwendet.
Die Schaltflächen einer Symbolleiste reagieren in der Regel direkt auf einen Mausklick und führen eine Aktion
aus.
Beim Klick auf eine Schaltfläche in einem Menü wird in der Regel ein Menü-Pad geöffnet. Der Klick auf einen
Eintrag in diesem Menü-Pad führt dann eine Aktion aus oder öffnet sogar ein weiteres Menü-Pad.
In Menü-Pads können verschiedene Elemente dargestellt werden, zum Beispiel markierbare Einträge oder
Separatoren. In Menüeinträgen kann neben Text ein Bild angezeigt werden,
Alle Einstellungen einer Symbolleiste oder eines Menüs können in eine XML Datei exportiert werden. Alle
Einstellungen können auch aus einer XML Datei eingelesen werden. So ist es einfach ein ganzes Menü oder eine
Symbolleiste durch das Lesen einer Datei zu konfigurieren.
Durch einfache Einstellung von Eigenschaften kann das Aussehen so eingestellt werden, wie es typisch für
Windows XP Anwendungen ist.
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Visual Extend 10.0
Seite 67
Es sind Ereignisse vorhanden, die ausgelöst werden, wenn der Anwender die Maus über ein Element bewegt oder
den Status eines Elements ändert. Dadurch können dynamische Anzeigeeffekte erreicht werden. Zum Beispiel
kann ein Menüeintrag, der während er von der Maus überfahren wird, mit fetter Schrift dargestellt werden.
Alle Elemente im ctToolbar Steuerelement sind in Collections beschrieben. Auf einzelne Elemente kann nur über
einen Index referenziert werden. Der Index für ein Element wird beim Hinzufügen des Elements von der
Methode Additem zurückgegeben. Dieser Index muss verwendet werden, um die Prozedur zu finden, die beim
Klick auf einen Eintrag ausgeführt werden soll.
Zu beachten ist, dass wenn ein Element mit der Methode RemoveItem entfernt wird, alle Elemente der ctToolbar
neu indiziert werden. Bei Entfernung eines Elements muss die selbst geführte Liste mit Indexen also auch selbst
aktualisiert werden. Eine Alternative ist, nicht benutzte Elemente als unsichtbar einzustellen.
Ähnlich verhält es sich, wenn in ein bestehendes Menü neue Einträge eingefügt werden. Die ctToolbar
aktualisiert alle Indexe und wir müssen die von uns geführte Liste mit Indexen ebenfalls aktualisieren, damit zu
den Menüeinträgen die richtigen Aktionen ausgeführt werden. Die Indexe der ctToolbar können also nicht als
konstante Werte verwendet werden.
Schaltflächen in Symbolleisten können eine Bezeichnung oder ein Bild oder beides haben. Eine gesunkene
Darstellung ist möglich. Separatoren können verwendet werden.
Die Abbildung zeigt einige der Darstellungsmöglichkeiten in einer Symbolleiste.
Symbolleisten und Menüs können mit Farbverläufen angezeigt werden. Auch einzelne Einträge können mit einem
Farbverlauf angezeigt werden. Farbverläufe können einzelnen Elementen in Menüs oder Symbolleisten oder auch
zu einer ganzen Symbolleiste oder einem ganzen Menü zugewiesen werden.
Ein Menü kann bis zu vier Ebenen von Menüeinträgen enthalten.
In einem Menü oder einer Symbolleiste können bis zu 100 Bilder verwaltet werden. Zu jedem Bild kann eine
Maskendatei verwendet werden, die Teile des Bildes transparent erscheinen lässt.
Das Steuerelement selbst enthält Bilder für häufig verwendete Anwendungszwecke, wie zum Beispiel für die
Funktionen der Zwischenablage kopieren, ausschneiden und einfügen.
Es werden Bilder mit einer Größe von 16 x 16 Pixel angezeigt, wenn der Wert der Eigenschaft SmallIcons auf .T.
eingestellt ist. Wenn der Wert dieser Eigenschaft .F. ist, werden Bilder in der Größe 32 x 32 Pixel angezeigt.
Eine Symbolleiste kann auf einem individuellen Hintergrundbild angezeigt werden.
Zu jedem Element in einer Symbolleiste kann ein Tooltip angezeigt werden. Am linken Rand einer Symbolleiste
kann zusätzlich ein Bild angezeigt werden.
Ähnlich wie in Symbolleisten und Menüs von Office 2003Anwendungen, kann ein kleiner Pfeil am rechten Rand
der Symbolleiste oder des Menüs anzeigen, dass nicht genug Platz zur Anzeige aller Elemente vorhanden ist.
Wenn der Anwender auf diesen Pfeil klickt, werden die nicht dargestellten Elemente in einem Popup angezeigt.
Menüeinträge, können auch so eingestellt werden, dass sie ausschließlich über dieses Popup erreicht werden und
nie im normalen Menü angezeigt werden.
Visual Extend 10.0
Seite 68
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Diese Abbildung zeigt eine ctToolBar mit einem Bild am linken Rand und einem Pfeil zur Anzeige weiterer
Elemente.
Beispiele für die Darstellungsmöglichkeiten von Menüs mit unterschiedlichem Hintergrund und Icons.
Zum Steuerelement ctToolbar gibt es einen Builder, der es ermöglicht viele Gestaltungseinstellungen zu machen.
Integration von Menü und Symbolleiste in VFX
In der Klassenbibliothek
cDBiAppNavigatorBar.
Vfxappl.vcx
befinden
sich
die
neuen
Klassen
cDBiAppMenuBar
und
Symbolleiste
Den Schaltflächen in einer Symbolleiste können keine Namen zugeordnet werden. Es wird daher ein Array
angelegt, in dem zu jeder Schaltfläche in der Symbolleiste neben dem Namen die Indexnummer gespeichert wird.
Dieses Array wird vom Manager für Symbolleisten verwendet. Der Manager für Symbolleisten kapselt den Code,
der gemeinsam in allen Symbolleisten verwendet wird, zum Beispiel für die Ereignisse Click und Refresh. Der
Manager für Symbolleisten wird von den Symbolleisten cOfficeBar, cNavigatorBar, cDBiAppMenuBar und
cDBiAppNavigatorBar verwendet.
Klasse cToolbarManager in vfxAppl.vcx
Diese Klasse wird von den bisherigen Symbolleistenklassen cOfficeBar und cAppNavBar sowie von der neuen
Symbolleiste basierend auf ctToolbar verwendet.
Methoden
onRefresh(toItemsEnabled) – Hier ist der für alle Symbolleisten gemeinsame Refresh Code untergebracht. In
dieser Methode wird zu allen Elementen der Symbolleiste der Status enabled bzw. disabled geschaltet.
onItemClick(tcItemName) – Hier ist der für alle Symbolleisten gemeinsame Click Code untergebracht. In einer
Case Konstruktion, wird abhängig vom Wert des übergebenen Parameters der Code für die gewünschte
Schaltfläche ausgeführt.
DO CASE
CASE tcItemName = “CMDNEW”
* Code für das Click Ereignis der Schaltfläche “neu”
CASE tcItemName = “CMDSAVE”
* ….
ENDCASE
Die leere Ableitung cAppToolbarManager von dieser Klasse befindet sich in der Klassenbibliothek Appl.vcx.
Hier kann der Entwickler individuelle Anpassungen vornehmen, ohne den Code von VFX zu verändern.
Zur Laufzeit wird eine Referenz auf ein Objekt dieser Klasse in der Eigenschaft oToolbarManager des
Anwendungsobjekts gespeichert. Bei der Initialisierung des Anwendungsobjekts wird dieses Objekt instanziiert.
Die Klassen cOfficeBar, cNavigatorBar und cDbiNavigatorBar verwenden die Klasse cToolbarManager.
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Visual Extend 10.0
Seite 69
Menü
Ein VFP Menü wird mit dem Menü-Designer erstellt. Das Design wird in einer Tabelle mit der
Namenserweiterung mnx gespeichert. Der VFP Menü-Designer kann daraus eine Programmdatei mit der
Namenserweiterung mpr erstellen. Das Kompilat dieser Datei hat die Namenserweiterung mpx und wird
schließlich in Exe Dateien eingebunden und zur Laufzeit der Anwendung ausgeführt. Das ist der bekannte Weg,
mit dem ein VFP Menü angezeigt wird und funktioniert.
VFX hat einen eigenen Menü-Designer mit erweiterten Möglichkeiten. Die Struktur der Menütabelle wurde
erweitert um alle diese Möglichkeiten speichern zu können. Die Tabelle hat die Namenserweiterung vmx. Auch
der VFX Menü-Designer generiert aus der Tabelle eine Programmdatei mit der Namenserweiterung vmr. Das
Kompilat mit der normalen Namenserweiterung fxp wird in Exe Dateien eingebunden. Dieser Weg unterscheidet
sich nicht wesentlich von dem von VFP verwendeten Verfahren.
Um eine ctToolbar als Menü aufzubauen ist die Tabelle mit den Menüinformationen in das Projekt
eingeschlossen und wird zur Laufzeit ausgelesen um das ctToolbar Steuerelement mit Informationen zu füllen.
Dieser Weg ist voll generisch implementiert.
Nun gibt es in einem Menü aber einige Code Teile, die ausgeführt werden, wenn der Benutzer einen Menüeintrag
auswählt. Weiterer Code wird benötigt um Einträge zu enablen oder diablen. Dieser Code befindet sich in der
Tabelle mit der Menübeschreibung. Es können aber auch Code Teile verwendet werden, die sich an anderer
Stelle im Projekt befinden. Dieser Code lässt sich zur Laufzeit nicht ohne weiteres aus der Tabelle ausführen.
Beim Erstellen einer Exe Datei wird daher im Project Hook eine Programmdatei mit allen erforderlichen Code
Teilen erstellt und automatisch in das Projekt eingebunden.
In ctToolbar gibt es für Menüeinträge keine Skip For Klausel. Menüeinträge können nur über die Eigenschaft
ItemEnabled aktiviert oder deaktiviert werden. Der Wert dieser Eigenschaft wird im Refresh Ereignis ausgeführt.
Das Refresh wird im Gotfocus Ereignis ausgeführt.
Wenn ein Menüeintrag disabled erscheint, wird das Bild angezeigt, das in der Eigenschaft ItemPicDisabled
eingetragen ist. Wenn dieser Eigenschaft kein Wert zugewiesen ist, wird das gleich Bild angezeigt, das auch im
enabled Status verwendet wird.
Entsprechend der Darstellung in Office 2003 Anwendungen hat das Menü einen Farbverlauf im Hintergrund.
Bilder sehen darauf nur dann gut aus, wenn sie einen transparenten Hintergrund haben. Leider ist der einzige
Dateityp, der von ctToolbar mit transparentem Hintergrund unterstützt wird, der Typ ico.
Eine Alternative besteht darin, für Bilder anderer Dateitypen eine Farbe zu bestimmen, die transparent erscheinen
soll. In der Regel wird dies die Farbe weiß sein. Dafür muss der Wert der Eigenschaft MaskBitmap mit .T.
eingestellt werden und in der Eigenschaft MaskColor wird der Farbwert der transparent zu erscheinenden Farbe
abgelegt. Diese Art der Darstellung funktioniert mit allen Bilddateiformaten.
Zwischenablage
Die ctToolbar enthält Standardelemente, die grundsätzlich auch in VFP Anwendungen funktionieren. Wie wir
wissen, haben viele ActiveX Steuerelemente in VFP ein etwas ungewöhnliches Verhalten. Dies ist bei den
Funktionen der Zwischenablage der Fall. Während eine Funktion für die Zwischenablage ausgewählt wird, hat
das ActiveX Steuerelement den Fokus, aber nicht unsere darunter liegende VFP Anwendung. Ein Workaround
ist, programmatisch mit der Maus auf das aktive Formular zu klicken und anschließend mit dem Keyboard Befehl
die Funktion der Zwischenablage auszulösen. Hier der Code für „ausschneiden“.
lnLeft = _SCREEN.left + _SCREEN.ACTIVEFORM.Left
lnTop = _SCREEN.top + _SCREEN.ACTIVEFORM.Top
MOUSE CLICK AT lnTop, lnLeft PIXELS
KEYBOARD "{CTRL+X}" CLEAR
Integration in eigene Projekte
Eigene VFX Projekte können mit wenigen Einstellungen so konfiguriert werden, dass das ActiveX Steuerelement
ctToolbar zur Anzeige von Menü und Symbolleiste verwendet wird.
Das Projekt muss auf den aktuellen Build von VFX 10.0 aktualisiert werden. Dann sind die folgenden
Eigenschaften einzustellen:
cFoxAppl.nMenuAndToolbarBehavour = 1
cFoxAppl.cMainMenu = “cDBiAppMenuBar”
cFoxAppl.cMainToolbar = “cDBiAppNavigatorBar”
Visual Extend 10.0
Seite 70
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Anschließend muss eine Exe Datei aus dem Projekt generiert werden, weil der Project Hook Code generiert, der
auch für Tests in der Entwicklungsumgebung benötigt wird.
ctTray – VFP Anwendung im Windows System Tray
Mit dem ActiveX Steuerelement ctTray ist es möglich eine VFP Anwendung im Windows System Tray zu
verstecken Dieses Verhalten ist insbesondere bei Anwendungen nützlich, die ständig laufen sollen oder müssen,
bei denen aber nur selten oder gar nicht die Bedienung über die Benutzeroberfläche benötigt wird.
Während sich eine Anwendung im Windows System Tray befindet, ist diese Anwendung nicht in der Windows
Startzeile und auch nicht im Task Manager auf der Seite Anwendungen sichtbar.
Das Steuerelement selbst ist nicht sichtbar. Es platziert zur Laufzeit ein Icon im Windows System Tray. Wenn
der Anwender zur Laufzeit auf dieses Icon klickt, werden verschiedene Ereignisse ausgelöst.
Das Steuerelement ctTray erfordert nur wenig Programmieraufwand um eine Anwendung im Windows System
Tray mit einem Icon zu platzieren und auf Ereignisse zu reagieren.
Das Steuerelement kann bis zu vier Icons verwalten. Zur Laufzeit kann der Entwickler eins dieser Icons zur
Anzeige im System Tray auswählen. Icons können während der Entwicklungszeit oder zur Laufzeit geladen
werden.
Der Entwickler kann auf die Ereignisse Klick und Doppelklick mit der Ausführung beliebigen Codes reagieren.
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Visual Extend 10.0
Seite 71
Datenbanksynchronisation mit VFX in der Praxis
Mit VFX Anwendungen kann eine Datenbanksynchronisation durchgeführt werden. Synchronisiert wird über das
FTP Protokoll mit einem Internet Server.
Ablauf
1. Kunde
Die Synchronisierung wird auf der Kundenseite gestartet. Dafür wird ein Objekt der Klasse FTPSyncClient is
instanziiert. Von dem Objekt wird die Methode Execute ausgeführt. Diese Methode ruft die Methode
PrepareSync zur Generierung eines Dateinamens auf. Die Methode PrepareIni erstellt eine Ini Datei, die Daten
eines Datensatzes aus der Tabelle VfxSdef.dbf enthält. Die Methode UploadIni läd de erstellte Ini Datei auf
einen FTP Server hoch. Die Zugriffsinformationen für den FTP Server befinden sich im aktuellen Datensatz aus
der Tabelle VfxSdef.dbf.
Der Name der erstellten Ini Datei wird so aufgebaut:
lcUIniqueString = SYS(2015)
Usercode + YYYYMMDDHHMMSS + lcUIniqueString.ini
“Client_”+Usercode + YYYYMMDDHHMMSS + lcUIniqueString.zip
“Server_”+Usercode + YYYYMMDDHHMMSS + lcUIniqueString.zip
Usercode + YYYYMMDDHHMMSS + lcUIniqueString.cnf
2. Server
Auf dem Server läuft ein Windows Dienst, der mit Visual Basic erstellt ist. Dieser Windows Dienst dient nur
dazu einen mit VFP erstellten COM Server zu instanziieren, der die eigentliche Arbeit macht.
Der COM Server beobachtet einen Ordner, in den die für die Synchronisierung verwendeten Ini Dateien
hochgeladen werden.
Für jede hochgeladene Ini Datei wird ein COM Objekt instanziiert, das auf der Klasse FtpSyncServer basiert.
Nach dem Lesen der Ini Datei startet der Server die Vorbereitung der Daten für den Kunden, der die Ini Datei
gesendet hat. Es werden alle Daten vorbereitet, die seit der letzten Synchronisierung hinzugefügt oder geändert
wurden. Die Vorbereitung der Daten wird in der Methode PrepareData durchgeführt.
Diese Methode ruft die Methode PrepareEmptyDBC auf, um einen leeren Datenbankcontainer für die zu
synchronisierenden Daten vorzubereiten. Die Methode PrepareServerData führt die eigentliche
Datenvorbereitung durch. Die Methode CreateDataFile erstellt schließlich eine Zip Datei mit den Daten, die an
den Kunden übertragen werden sollen.
Alle Server Einstellungen (Ordner, Zeitüberschreitungsintervalle) sind in einer Ini Datei gespeichert. In der Ini
Datei können vier Ordnereinstellungen gemacht werden.
1.
2.
3.
4.
Ini Dateien
Hochgeladene Kundendaten
Zum Download für den Kunden bereitgestellte Daten vom Server
Bestätigungsdateien
Die Zeitüberschreitungsintervalle können getrennt für das Hochladen von Dateien und für Bestätigungen
eingestellt werden. Zeitüberschreitungsintervalle werden von einem Timer überwacht.
3. Kunde
Während(!) der Server Daten zum Download vorbereitet, bereitet der Kunde die Daten für den Upload vor und
läd die Daten unmittelbar nach der Vorbereitung hoch. Dies geschieht in der Methode PrepareData. Diese
Methode funktioniert genauso, wie die entsprechende Methode auf der Server Seite.
Visual Extend 10.0
Seite 72
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Nach dem Beenden des Uploads wartet der Kunde auf eine Datei zum Download. In der Regel wird der Server
inzwischen eine entsprechende Datei bereitgestellt haben. Es ist davon auszugehen, dass die Erstellung einer
Datei auf dem Server schneller gemacht werden kann, als der Kunde eine Datei erstellen und hochladen kann.
Wenn eine Datei zum Download gefunden wird, wird der Download in der Methode DownloadData gestarte.
Nach dem Download werden die Dateien aus dem heruntergeladenen Archiv extrahiert. Die Methode
ProcessServerData aktualisiert die lokale Datenbank mit den Daten vom Server.
Nach der Fertigstellung läd der Kunde eine Logdatei auf den Server hoch.
4. Server
Nach der Vorbereitung der Datei für den Kunden (Schritt 2) wartet der Server auf den Upload einer Zip Datei
vom Kunden. Nach dem Fertigstellen des Upoads, werden die Dateien aus dem Archiv extrahiert. Nach der
Extraktion werden die Daten in die Datenbank des Servers integriert. Anschließend wartet der Server auf die
Logdatei des Kunden. Schließlich protokolliert der Server den gesamten Vorgang.
In jedem Schritt können Zeitüberschreitungsintervalle den Vorgang stoppen.
Tabelle VfxSDef
Felder der Tabelle VFXSDef:
FtpUrl – URL des FTP Servers
FTPPort – Port für FTP (standardmäßig 21)
FtpUpINI – Name der Ini Datei für Uploads
FtpDwnINI – Name der Ini Datei für Downloads
FtpUpData – Name der Datei für den Upload
FtpDwnData – Name der Datei für den Download
FtpUpConf – Name der Datei für de Upload Bestätigung
FtpDwnConf – Name der Datei für de Download Bestätigung
FTPUser – Benutzername für die FTP Anmeldung
FTPPass – Kennwort für die FTP Anmeldung
Klasse cFTPsync in der Klassenbibliothek VfxFtpSync
Eigenschaften
cClientConfirmationFileName - Name der Datei für de Upload Bestätigung
cClientConfirmationFolder – Pfad, in den die Bestätigungsdatei hochgeladen wird. Aus Kundensicht ist es ein
FTP Ordner. Aus Server Sicht ist es ein physikalischer Pfad.
cClientDataFileName – Name der Datei mit den Kundendaten.
cClientDataFolder – Pfad, in den die Kundendaten hochgeladen werden. Aus Kundensicht ist es ein FTP Ordner.
Aus Server Sicht ist es ein physikalischer Pfad.
cClientIniFileName – Name der Ini Datei des Kunden.
cClientIniFolder – Pfad, in den die Ini Datei des Kunden hochgeladen wird. Aus Kundensicht ist es ein FTP
Ordner. Aus Server Sicht ist es ein physikalischer Pfad.
cLogFile – Name und Pfad der Logdatei.
cServerConfirmationFileName – Name der Bestätigungsdatei des Servers.
cServerConfirmationFolder – Ordner, in dem der Server die Bestätigungsdatei speichert. Aus Kundensicht ist es
ein FTP Ordner. Aus Server Sicht ist es ein physikalischer Pfad.
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Visual Extend 10.0
Seite 73
cServerDataFileName – Name der Datendatei des Servers.
cServerDataFolder – Ordner, in dem der Server Daten zum Download bereitstellt. Aus Kundensicht ist es ein
FTP Ordner. Aus Server Sicht ist es ein physikalischer Pfad.
cServerIniFileName – Name der Ini Datei des Servers.
cServerIniFolder – Ordner, in dem der Server Ini Dateien für den Download bereitstellt. Aus Kundensicht ist es
ein FTP Ordner. Aus Server Sicht ist es ein physikalischer Pfad.
nConfirmationTimeout – Maximale Wartezeit für die Bestätigungsdatei.
nDataTimeout - Maximale Wartezeit für eine Datei.
nDelay – Verzögerung für die Methode WaitForFile.
nIniTimeout – Maximale Wartezeit für eine Ini Datei.
oTimer – Referenz auf ein Timer Objekt (intern verwendet).
Methoden
Execute – Hauptmethode zum Start des Synchronisierungsprozesses.
PrepareData –Vorbereiten der Zip Datei für den Download. Verwendet die Methoden PrepareEmptyDBC,
PrepareDataTables und CreateDataFile.
PrepareEmptyDBC – Erstellen einer leeren Datenbank zur Speicherung der zu synchronisierenden Daten.
PrepareDataTables – Vorbeiretung der zu synchronisierenden Daten.
CreateDataFile – Erstellen einer Zip Datei für den Upload.
WaitForFile(tcFolder, tcFileName, tnTimeout) – Wartet, bis eine Datei fertiggestellt ist.
DeleteDirectory(tcDirectory) – Löschen eines Ordners einschließlich aller Dateien und aller Unterordner
DeleteSyncFiles – Löschen nicht mehr benötigter Synchronisierungsdateien.
PrepareConfirmation – Vorbereiten der Bestätigungsdatei.
PrepareIni – Erstellen einer Ini Datei.
ProcessConfirmation – Lesen einer Bestätigungsdatei.
WriteLog(tcLogInfo) – Schreiben von Log Informationen in einer Logdatei.
Klasse cFTPTimer in der Klassenbibliothek VfxFtpSync
Eigenschaften
lTimeoutElapsed – Wird auf .T. gesetzt, wenn eine Zeitüberschreitung vorliegt.
Visual Extend 10.0
Seite 74
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Klasse cFTPSyncServer in der Klassenbibliothek
VfxFtpSyncServer (vererbt cFTPSync)
Eigenschaften
cCreateDatabasePrgFolder – Name des Ordners, in dem generierte Datenbankprogramme abgelegt werden.
nStatus – Enthält den Status des Synchronisierungsvorgangs.
Methoden
Init(tcIniFileName)
ReadINI – Lesen einer Ini Datei, die der Kunde hochgeladen hat.
ProcessClientData – Verarbeiten einer Zip Datei, die der Kunde hochgeladen hat. Hierbei wird die Datenbank
des Servers mit den Daten des Kunden aktualisiert.
UpdateSyncStatus(tnStatus) – Aktualisiert den Status der Synchronisierung.
Statusliste
0 – Ini Datei gefunden
10 - ReadIni() wurde gestartet
11 - ReadIni() wurde beendet
20 - PrepareIni() wurde gestartet
21 - PrepareIni() wurde beendet
30 - PrepareData() wurde gestartet
40 - PrepareEmptyDBC() wurde gestartet
41 - PrepareEmptyDBC() wurde beendet
50 - PrepareDataTables() wurde gestartet
51 - PrepareDataTables() wurde beendet
60 - CreateDataFile() wurde gestartet
61 - CreateDataFile() wurde beendet
71 - PrepareData() has finished
80 - ProcessClientData() wurde gestartet
81 - ProcessClientData() wurde beendet
90 - PrepareConfirmation() wurde gestartet
91 - PrepareConfirmation() wurde beendet
100 - ProcessConfirmation() wurde gestartet
101 - ProcessConfirmation() wurde beendet
110 - DeleteSyncFiles() wurde gestartet
111 - DeleteSyncFiles() wurde beendet.
Klasse cFTPSyncClient in der Klassenbibliothek
VfxFtpSyncClient (vererbt cFTPSync)
Eigenschaften
cFieldInFileNames – Der Name von <Tabelle>.<Feld> wird in Dateinamen verwendet.
cFtpPassword - FTP Kennwort
cFtpPort - FTP Port
cFtpUrl - FTP URL
cFtpUserName - FTP Benutzername
cSyncFilesFolder - Name des Ordners, in dem Dateien für die Synchronisierung abgelegt werden. Der Name
wird mit der Funktion SYS(2015) generiert.
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Visual Extend 10.0
Seite 75
Methoden
PrepareSync – Vorbereitungen zur Synchrnisierung.
PrepareINI – Erstellen der Ini Datei, die auf den Server hochgeladen wird.
UploadINI – Aufruf der Methode UploadFile, um die Ini Datei hochzuladen.
UploadData – Aufruf der Methode UploadFile um die erstellte Zip Datei hochzuladen.
UploadConfirmation – Aufruf der Methode UploadFile um die erstellte Bestätigungdatei hochzuladen.
UploadFile(tcFtpUrl, tcFTPPort , tcFtpDir, tcFTPUserName, tcFTPPassword, tcFileName) – Hochladen einer
Datei auf einen FTP Server.
DownloadData – Aufruf der Methode DownloadFile um eine Zip Datei herunterzuladen. Automatische
Wiederholung bis zur eingestellten Zeitüberschreitung.
DownloadFile – Download einer angegebenen Datei.
ProcessServerData – Entpacken einer heruntergeladenen Archivdatei und aktualsieren der Datenbank.
DownloadIni – Download einer vom Server vorbereiteten Ini Datei.
ProcessIni – Verabeitung einer Ini Datei vom Server.
ProcessIniContent – Verarbeitung des Inhalts einer Ini Datei. Herunterladen einer Zip Dati und Verarbeitung.
ProcessIniZip – Verarbeitung der Zip Datei, die in der Ini Datei angegeben ist.
Klasse cFTPUpload in der Klassenbibliothek VfxFtpSyncClient
Eigenschaften
cCurrDir – Aktueller FTP Ordner.
cExtMessage – Erweiterte Fehlermeldung.
cFtpPassword – FTP Kennwort.
cFtpPort – FTP Port.
cFtpUrl – FTP URL.
cFtpUserName – FTP Benutzername.
cInetAgent – Internet Agent.
lLoadedDll – Wenn der Wert dieser Eigenschaft.T. ist, wurden die verwendeten API Funktionn bereits deklariert.
lUsePassiveMode – Einstellung für passivern FTP Modus.
nConnHndlr – Verbindungshandle.
nExtResult – Erweiterte Ergebnismeldung.
nInetHndlr – Internet Handle.
nResCode – Letzte Ergebnismeldung.
Visual Extend 10.0
Seite 76
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Methoden
ChangeFtpDir – Wechselt in den aktuellen FTP Ordner.
DeclareApiFunctions – Deklarieren der verwendeten API Funktionen.
DownloadFtpFile – Herunterladen einer Datei über das FTP Protokoll.
FtpClose – Schließen einer FTP Sitzung.
FtpCloseConnection – Schließen einer FTP Verbindung.
FtpOpen – Öffnen einer FTP Sitzung.
FtpOpenConnection – Öffnen einer FTP Verbindung.
GetErrorCode – Rückgabe einer Fehler Codes.
GetErrorText – Rückgabe einer Fehlertexte.
GetExtendedError – Rückgabe eines erweiterten Fehlers.
GetExtendedErrorCode – Rückgabe einer erweiterten Fehler Codes.
GetExtendedErrorMsg – Rückgabe einer erweiterten Fehlermeldung.
UploadFtpFile – Hochladen einer Datei.
Klasse cFTPSyncService
Eigenschaften
AcceptedCommands – 6 - Alle Ereignisse; 2 - PauseContinue; 4 – Shutdown
AllowUserInteraction – Erlauben von Benutzeraktivität.
cClientIniFolder – Ordner der Ini Datei des Kunden.
cLogFile – Name und Pfad der Logdatei.
cSynchronizationExe – Pfad zur Exe Datei für die Synchronisierung.
Dependencies – Verwendet von der VB Exe Datei.
DisplayName – Anzeigename des Dienstes.
LoadOrderGroup – Verwendet von der VB Exe Datei.
ServiceName – Name des Dienstes.
StartMode – 2 - Automatisch; 3 - Manuell; 4 – Deaktiviert.
UserAccount – Verwendet von der VB Exe Datei.
UserPassword – Verwendet von der VB Exe Datei.
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Visual Extend 10.0
Seite 77
Methoden
OnServiceContinue – Occurs when the services controller notifies the service that the user or another program
has requested the service to continue processing
OnServiceControl – Occurs when the services controller notifies the service of shutdown or user defined events
OnServiceInstall – Occurs when service is installed
OnServicePause – Occurs when service is paused
OnServiceShutdown – Occurs when service is shutdowned
OnServiceStart – Occurs when service is started
OnServiceStop – Occurs when service is stopped
OnServiceTimer – Occurs when service timer interval has elapsed
OnServiceUninstall – Occurs when service is uninstalled
WriteLog(tcLogInfo, tcLogFileName) - Writes log info in a log file
UTCTime(tdDate, tcTime) - Converts the local date and time to UTC format date and time.
Num2Buf(tnValue) - Called by UTCTime
Die folgenden drei Methoden werden vom Timer aufgerufen:
ClearMessage – Clear message
GetMessage – Returns message (empty string)
GetMessageSeverity – Returns message severity (-1)
Visual Extend 10.0
Seite 78
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
FTP Sync
Client
Transfer
files
Server
Start Sync
PrepareSync
Generates file names: cINIFileName, cUploadFileName,
cDownloadFileName, cConfirmationFileName
Server waits for a new INI file to be
uploaded
PrepareINI
prepares INI file containig vfxSDef data, password,
cUploadFileName, cDownloadFileName, cConfirmationFileName
UploadINI
Uploads INI file to the server
calls UploadFile
ReadINI
reads INI file (stores vfxSDef data, password,
UploadFileName, cDownloadFileName,
cConfirmationFileName into properties )
Client waits for the specified INI file to be available for
download ??? Timeout?
PrepareINI
Prepare INI file containing a path to zip file.
Calls CreateDataFile (to make the zip)
DownloadINI
Downloads INI file prepared from the server
calls DownloadFile
ProcessINI
Processes INI file prepared from the server
PrepareData
prepares ZIP file data to be sent to client
Calls PrepareEmptyDBC,
PrepareDataTables and CreateDataFile
calls ProcessINIContent
{
DownloadFile (to download ZIP file)
{
ProcessINIZip
PrepareData
prepares ZIP file data to be sent to server
Calls PrepareEmptyDBC, PrepareDataTables and
CreateDataFile
UploadData
Uploads ZIP file to the server
calls UploadFile
Server waits for the specified ZIP file to be
uploaded
??? Timeout?
Client waits for the specified ZIP file to be available for
download ??? Timeout?
DownloadData
Downloads ZIP file containing updates from the server
ProcessClientData
reads ZIP file sent by client and
calls DownloadFile
updates server
tables
ProcessServerData
reads ZIP file containing updates from the server and
updates client tables
PrepareConfirmation
Prepares confirmation file to be sent to client
PrepareConfirmation
Prepares confirmation file to be upload on the server
UploadConfirmation
Uploads confirmation text file to the server
calls UploadFile
Server waits for the specified Confirmation
file to be uploaded
Client waits for the specified Confirmation file to be
available for download
??? Timeout?
??? Timeout?
ProcessConfirmation
Process confirmation file sent by server
ProcessConfirmation
Process confirmation file sent by client
DeleteSyncFiles
Deletes files used by synchronization
DeleteSyncFiles
Deletes files used by synchronization
End Sync
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Visual Extend 10.0
Seite 79
Einstellungen in Ini Dateien
FtpSync.ini
ServerClassName – Name of service DLL used for service. (FtpSyncService.FtpSyncService)
TimerInterval – Time interval which is set on Service timer used to look for a new client INI to appear
Server.ini
Sektion [Folders]
CLIENTINIFOLDER – full path to folder where ini files are uploaded from clients
SERVERINIFOLDER – full path to folder where server ini is saved as response to each client ini file
CLIENTDATAFOLDER – full path to folder where client synchronization data is uploaded
SERVERDATAFOLDER – full path to folder where server synchronization data is saved
CLIENTCONFIRMATIONFOLDER – full path to folder where client uploads it’s confirmation file when it is
ready with processing server data
SERVERCONFIRMATIONFOLDER – full path to folder where server saves it’s confirmation file when it is
ready with processing client data
CREATEDATABASEPRGFOLDER – just folder name to place where create database prgs are placed
Sektion [Databases}
On each row is saved a database name and a folder name where an empty database to be made. Each is in []
brackets, separated with comma.
[<database name>],[<folder name>]
Sektion [Timer]
SYNCHRONIZATIONEXE – full path to server exe. This exe is started when a new ini file is found which
determine a start of synchronization process from Client.
DATATIMEOUT – timeout which server wait client to upload it’s synchronization data.
CONFIRMATIONTIMEOUT – timeout which server wait client to upload it’s confirmation file
SERVICELOGFILE – full path to log file where Service class writes it’s log info. Logging is made only if a log
file exists.
SERVERLOGFILE – full path to log file where Server class writes it’s log info. Logging is made only if a log file
exists.
Client.ini
Sektion [Databases}
On each row is saved a database name and a folder name where an empty database to be made. Each is in []
brackets, separated with comma.
[<database name>],[<folder name>]
Sektion [Timer]
INITIMEOUT – timeout which client wait server to answer it’s request for synchronization with saving an ini file.
DATATIMEOUT – timeout which client wait server to upload it’s synchronization data.
CONFIRMATIONTIMEOUT – timeout which client wait server to upload it’s confirmation file
CLIENTLOGFILE – full path to log file where Client class writes it’s log info. Logging is made only if a log file
exists.
Visual Extend 10.0
Seite 80
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Anwendungsschutz durch Produktaktivierung
Das Ziel der Produktaktivierung ist die unerlaubte Verwendung der Anwendung auf nicht aktivierten Computern
zu verhindern.
Der Anwendungsschutz durch Produktaktivierung kann im VFX – Application Wizard auf der Seite 3. Options
durch aktivieren des Kontrollkästchens Enable product activation für ein neu zu erstellendes Projekt eingeschaltet werden.
Später kann diese Einstellung mithilfe des VFX – Application Builder geändert werden. Die Eigenschaft
goProgram.lUseActivation muss auf .T. gesetzt werden, um die Produktaktivierung einzuschalten. Wenn die
Eigenschaft goProgram.lUseActivation auf .F. gesetzt ist, ist die Anwendung nicht durch die Produktaktivierung
geschützt.
Zu jeder Anwendung können bis zu 32 Rechte vergeben werden. Jedes Recht kann unabhängig von den anderen
Rechten aktiviert werden.
Liste der verwendeten Begriffe
Systemspezifischer Wert – Ein systemspezifischer Wert, zum Beispiel die Seriennummer einer Hardware-Komponente oder das Erstellungsdatum einer bestimmten Datei oder ein Schlüssel aus der WindowsRegistrierungsdatenbank. Die zu verwendete Datei und der zu verwendende Schlüssel aus der
Windows-Registrierungsdatenbank können vom Entwickler festgelegt werden.
Aktivierungsregel – Für jede Anwendung kann eine eindeutige Aktivierungsregel angelegt werden. Diese Regel
setzt sich aus einer Reihe systemspezifischer Werte zusammen, die einen PC eindeutig identifizieren.
Bei der Erstellung der Aktivierungsregel können Textbearbeitungsfunktionen verwendet werden.
Installationsschlüssel – Dies ist eine Zeichenkette, die Informationen über die im PC des Anwenders eingesetzte
Hardware enthält. Der Installationsschlüssel wird vom Entwickler benötigt um einen Aktivierungsschlüssel erstellen zu können.
Aktivierungsschlüssel – Dies ist eine Zeichenkette, die die Berechtigungen für einen speziellen PC enthält. Der
Aktivierungsschlüssel wird vom Entwickler anhand des Installationsschlüssels erstellt. Der Aktivierungsschlüssel ist für andere PCs nutzlos.
Installationsdatum – An diesem Datum wurde eine Anwendung erstmalig auf einem PC gestartet.
Das Funktionsprinzip
Wenn der Anwendungsschutz durch Produktaktivierung aktiviert ist, wird beim Start der Anwendung das Objekt
goProgram.SecurityRights instanziiert. Dieses Objekt hat Eigenschaften mit den Namen der Benutzerrechte, die
der Entwickler definiert hat. Jede dieser Eigenschaften kann einen von drei Werten annehmen:
-1 – Die Anwendung ist nicht aktiviert. In diesem Fall kann der Entwickler entscheiden welche Aktion
ausgeführt werden soll. Der Anwender könnte zum Beispiel begrenzten Zugriff auf Funktionen haben,
solange die Anwendung nicht aktiviert ist.
0 – Die Anwendung ist aktiviert, aber der Anwender hat nicht das Recht diese Aktion auszuführen.
1 – Die Anwendung ist aktiviert und der Anwender hat das Recht die Aktion auszuführen.
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Visual Extend 10.0
Seite 81
Wenn der Anwendungsschutz durch Produktaktivierung aktiviert ist, werden der Aktivierungsschlüssel und das
Datum des ersten Starts der Anwendung in einer Ini-Datei gespeichert. Der Entwickler kann den Namen dieser
Ini-Datei selbst wählen, sodass jede Anwendung ihre eigene Ini-Datei verwendet. Der Standardname ist VFX.ini.
Die Ini-Datei wird im Windows-Ordner gespeichert.
Der Aktivierungsschlüssel wird durch die Aktivierungsregel verschlüsselt. Der Schutz kann durch Hinzufügen
von Zeichenkonstanten, Schlüsseln aus der Windows-Registrierungsdatenbank und durch das Erstellungsdatum
einer beliebigen Datei weiter verbessert werden. Diese Kombination kann für jede Anwendung getrennt festgelegt werden, sodass jede Anwendung ihre eigenen Aktivierungsregeln hat.
Zusätzlich zu diesen Einstellungen kann der Entwickler den Typ des Schutzes festlegen.
Der Standardschutz erstellt die Ini-Datei beim ersten Start der Anwendung. Das während des Erstellens der IniDatei aktuelle Systemdatum wird in der Datei gespeichert. Dieses Datum steht während der Ausführung der
Anwendung in der Eigenschaft goProgram.InstallationDate zur Verfügung und kann dazu verwendet werden die
Laufzeit der Anwendung zu beschränken. Der Nachteil dieses Schutzes ist, dass der Anwender die erstellte IniDatei löschen kann und die Ini-Datei beim nächsten Start der Anwendung mit einem neuen Datum erneut erstellt
wird.
Um eine solche Manipulation durch den Anwender auszuschließen, kann der Entwickler einen erweiterten Schutz
einstellen. Hierbei wird eine zusätzliche Datei verwendet, die mit der Anwendung vertrieben werden muss. Der
Standardname dieser Datei heißt FirstInstall.txt. Der Dateiname kann mit der Eigenschaft cFirstInstall aus der
Klasse CActivation (Appl.vcx) eingestellt werden. Die Datei FirstInstall.txt wird im Windows-Ordner abgelegt.
Wenn der Entwickler den Schutz mit der Datei FirstInstall.txt auswählt, wird sich die Anwendung folgendermaßen verhalten. Beim Start der Anwendung wird zunächst die Ini-Datei überprüft. Wenn diese Datei existiert,
wird das Datum des ersten Starts der Eigenschaft goProgram.InstallationDate zugewiesen und die Benutzerrechte werden entsprechend dem Aktivierungsschlüssel eingestellt.
Wenn die Ini-Datei nicht existiert wird angenommen, dass dies der erste Start der Anwendung ist. Wenn dies der
Fall ist, wird zusätzlich überprüft, ob die Datei FirstInstall.txt existiert. Wenn diese Datei existiert ist
sichergestellt, dass die Anwendung wirklich zum ersten Mal gestartet wird. Das Systemdatum wird jetzt in der
Ini-Datei gespeichert und die Datei FirstInstall.txt wird gelöscht. Wenn ein Anwender nun versucht eine
Anwendung zu reaktivieren indem er die Ini-Datei löscht, wird die Ausführung der Anwendung beendet, weil die
Datei FirstInstall.txt nicht existiert. Dieser erweiterte Schutz der Anwendung bedeutet eine bessere Sicherheit.
Der Entwickler darf jedoch nicht vergessen die Datei FirstInstall.txt beim Vertrieb der Anwendung mit
auszuliefern.
Wenn der Anwender die installierte Anwendung aktivieren möchte, muss er seinen Installationsschlüssel an den
Entwickler senden. Der Installationsschlüssel kann auf drei verschiedene Arten an den Entwickler gesendet
werden. Die gewünschte Art kann in der Eigenschaft nRegWay eingestellt werden:
0 – Der Installationsschlüssel wird in einem Dialog angezeigt. Der Anwender kann den Schlüssel
kopieren und in einer anderen Anwendung (zum Beispiel in einer E-Mail) einfügen.
1 – Der Installationsschlüssel wird in einer Datei gespeichert. Diese Datei kann später an den Entwickler gesendet werden. Der Dateiname wird in der Eigenschaft cParamFile hinterlegt.
Visual Extend 10.0
Seite 82
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
2 – Der Installationsschlüssel wird in einer Datei gespeichert und sofort als E-Mail-Anhang an den
Entwickler geschickt. Der Dateiname muss in der Eigenschaft cParamFile hinterlegt werden. Die EMail-Adresse des Entwicklers muss in der Eigenschaft cRegEMail eingetragen werden.
11 – Nach Anzeige des Registrierungsdialogs wird der Installationsschlüssel in einer Datei
gespeichert. Diese Datei kann später an den Entwickler gesendet werden. Der Dateiname wird in der
Eigenschaft cParamFile hinterlegt.
12 – Nach Anzeige des Registrierungsdialogs wird der Installationsschlüssel in einer Datei gespeichert
und sofort als E-Mail-Anhang an den Entwickler geschickt. Der Dateiname muss in der Eigenschaft
cParamFile hinterlegt werden. Die E-Mail-Adresse des Entwicklers muss in der Eigenschaft
cRegEMail eingetragen werden.
Der Installationsschlüssel hat einen numerischen Wert mit 10 Stellen Länge. Der Anwender könnte den
Installationsschlüssel per E-Mail an den Entwickler senden oder auf einer Registrierungs-Website eintragen.
Über den VFX-Menüpunkt Activation, Customer List wird die VFX-Kundenverwaltung geöffnet. Der Entwickler
trägt den Installationsschlüssel im „Create Activation Key“-Assistenten ein um einen Aktivierungsschlüssel für
den Anwender zu erstellen. Der generierte Aktivierungsschlüssel wird dann an den Anwender geschickt und vom
Anwender im Aktivierungsformular eingegeben um die Anwendung zu aktivieren. Wahlweise kann die Datei mit
dem Aktivierungsschlüssel auch einfach im Ordner der Exe-Datei gespeichert werden. Beim nächsten Start der
Anwendung wird der Aktivierungsschlüssel aus dieser Datei gelesen.
Die Aktivierungsinformationen werden auf dem PC des Kunden in einer Ini-Datei gespeichert. Der Name dieser
Ini-Datei wird in der Eigenschaft cINIFileName der Klasse CVFXAcvtivation (Appl.vcx) eingetragen. Der
Standardwert ist VFX.ini.
Der Entwickler kann wählen, ob die einfache Produktaktivierung verwendet werden soll oder ob zusätzlich die
Datei FirstInstall.txt benutzt werden soll, um den ersten Start der Anwendung zu protokollieren. Der Name dieser
Datei kann in der Eigenschaft cFirstInstall der Klasse CVFXAcvtivation (Appl.vcx) eingetragen werden. Der
Standardwert ist FirstInstall.ini.
Wenn die Datei FirstInstall.txt verwendet werden soll, muss diese Datei mit der Anwendung vertrieben werden.
Das Installationsprogramm muss diese Datei im Windows-Ordner speichern. Das Aktivierungsobjekt wird diese
Datei beim ersten Start der Anwendung löschen. In diesem Moment wird das Installationsdatum in der Ini-Datei
gespeichert. Später wird bei jedem Start der Anwendung in der Ini-Datei geprüft, ob das Installationsdatum
vorhanden ist. Wenn das Datum fehlt und wenn die Datei FirstInstall.txt nicht vorhanden ist, wird davon
ausgegangen, dass an der Installation manipuliert wurde und die Ausführung der Anwendung wird beendet.
Wenn die Datei FirstInstall.txt nicht verwendet wird, wird die Ini-Datei neu erstellt, falls sie nicht vorhanden ist.
Das Installationsdatum kann auf zwei Arten ermittelt werden. Entweder wird das Systemdatum verwendet oder es
wird das Erstellungsdatum einer bestimmten Datei verwendet. Wenn das Erstellungsdatum einer Datei verwendet
werden soll, muss der Name dieser Datei in der Eigenschaft cRegFileName der Klasse CVFXActivation
gespeichert werden.
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Visual Extend 10.0
Seite 83
Die Definition der Aktivierungsregeln
Starten Sie den Dialog VFX – Define Activation Rules über den VFX-Menüpunkt Activation, Define Activation
Rules.
Wenn der „Define Activation Rules“-Assistent das erste Mal für ein Projekt gestartet wird, muss eine neue Regel
für dieses Projekt angelegt werden.
Auf der Seite Security Key des Assistenten befindet sich eine Combobox aus der eine Regel für das aktuelle
Projekt ausgewählt werden kann. In dem darunter liegenden Grid können so viele Zeilen hinzugefügt werden, wie
benötigt werden. Aus allen Zeilen des Grids wird in ein Schlüssel generiert, der in der Eigenschaft cactpattern
der Klasse CVfxactivation gespeichert wird. Die Anwendung beim Kunden erkennt anhand dieses Schlüssels
welche systemspezifischen Werte des PCs zur Generierung des Installationsschlüssels verwendet werden müssen.
Der Installationsschlüssel stellt sicher, dass die Anwendung nur auf dem Computer ausgeführt wird, für den der
Aktivierungsschlüssel erstellt wurde.
In der ersten Spalte des Grid kann ein systemspezifischer Wert ausgewählt werden. In einer Combobox sind hier
alle möglichen Parameter aufgeführt, die zur Erstellung des Installationsschlüssels verwendet werden können.
Zusätzlich können Zeichenkettenfunktionen angewendet werden, um den Wert zu verändern.
Zum Beispiel sollen anstelle der vollständigen Seriennummer einer Festplatte nur die letzten vier Stellen zur
Erstellung des Installationsschlüssels verwendet werden. Aus der Combobox in der ersten Spalte wird „HDD
Factory Serial Number“ ausgewählt. Die VFX-Systemvariable, die diesem Parameter entspricht heißt
„HDDFactoryNumber“ und erscheint in der zweiten Spalte. Um nur die letzten vier Stellen zu verwenden, muss
der folgende Ausdruck in der zweiten Spalte eingetragen werden: RIGHT(ALLTRIM(HDDFactoryNumber),4).
Visual Extend 10.0
Seite 84
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Wenn einer der systemspezifischen Werte „File Creation Date“ oder „Registry Key Value“ verwendet werden
soll, müssen weitere Parameter angegeben werden. Wenn das Erstellungsdatum einer Datei verwendet werden
soll, muss der Name der Datei angegeben werden. Um einen Windows-Registrierungsschlüssel verwenden zu
können, muss die Bezeichnung des Schlüssels eingegeben werden. Dies geschieht in der Spalte „Additional
Data“.
Aus den Aktivierungsregeln wird auf dem PC des Anwenders ein Installationsschlüssel erstellt. Dabei werden
alle in den Aktivierungsregeln enthaltenen Parameter berücksichtigt. Wenn nur ein Parameter auf dem PC des
Anwenders verändert wird, wird die Installation ungültig und der Anwender muss einen neuen Aktivierungsschlüssel anfordern, entsprechend seiner geänderten Hardware.
Es können so viele Zeilen dem Grid hinzugefügt werden, wie benötigt werden. Die Zeilen im Grid können mit
den Pfeiltasten am rechten Rand des Assistenten in eine andere Reihenfolge gebracht werden. Durch verschieben
der Zeilen im Grid ändern sich die Aktivierungsregeln.
Nach der Definition der Aktivierungsregeln wird das Muster in der Eigenschaft cActPattern der Klasse
CVFXActivation (Appl.vcx) gespeichert.
ACHTUNG: Der Wert der Eigenschaft cActPattern darf niemals gelöscht werden! Ohne diesen Wert ist es nicht
möglich Aktivierungsschlüssel zu erstellen!
Auf der Seite Rights können bis zu 32 verschiedene Benutzerrechte angelegt werden. Damit kann der Zugriff auf
bis zu 32 Module einer Anwendung gesteuert werden. Beispielsweise können Rechte angelegt werden, die es
dem Anwender erlauben Formulare zu starten (RunDataForms), Berichte zu drucken (RunReports), Daten zu
bearbeiten (EditData), Daten anzusehen (ViewData) usw. Zur Laufzeit der Anwendung können die einzelnen
Berechtigungen überprüft werden und ggf. wird die entsprechende Aktion ausgeführt.
Alle Benutzerrechte stehen zur Laufzeit als Eigenschaften des global sichtbaren Objekts
goProgram.SecurityRights zur Verfügung, sodass an jeder Stelle der Anwendung darauf zugegriffen werden
kann.
Wenn die Anwendung nicht aktiviert ist, haben alle Benutzerrechte den Wert -1. Wenn die Anwendung aktiviert
ist, hat ein Benutzerrecht den Wert 1, wenn die Aktion erlaubt ist und 0, wenn die Aktion nicht erlaubt ist.
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Visual Extend 10.0
Seite 85
Um im Assistenten ein Recht einzutragen muss zuerst das Kontrollkästchen in der ersten Spalte markiert werden.
Dann wird ein Name für das Recht eingetragen. Zur Laufzeit der Anwendung wird eine Eigenschaft des
SecurityRights-Objekts mit diesem Namen angelegt. Daher müssen bei der Eingabe des Namens die Konventionen zur Namensgebung von VFP beachtet werden!
ANMERKUNG: Anwendungsrechte sind für jede Anwendung unterschiedlich. Die Rechte, die für eine andere
Anwendung erstellt wurden, können nicht verwendet werden. Auch wenn ähnliche Rechte benötigt werden,
müssen diese neu erstellt werden. Die Anwendungsrechte werden in der Tabelle Vfxapprights.dbf im Projektordner gespeichert.
Erstellen eines Aktivierungsschlüssels
VFX 10.0-Anwendungen können vor unbefugter Nutzung mit einem Aktivierungsschlüssel geschützt werden. Die
Daten der Kunden, die einen Aktivierungsschlüssel erhalten haben, können mit umfangreichen Benutzerdaten
und Benutzerrechten verwaltet werden.
Im Formular Registered Customers werden die Kundendaten verwaltet. Für jeden Kunden werden die
Registrierungsnummer, der Aktivierungsschlüssel und die gewährten Rechte gespeichert. So ist es erforderlichenfalls einfach möglich einen neuen Aktivierungsschlüssel zu erstellen und zu versenden.
Die Schaltfläche Create activation key öffnet den Dialog zur Generierung eines Aktivierungsschlüssels. Nach
Erstellen eines Aktivierungsschlüssels wir die Kundenliste automatisch aktualisiert.
Wenn der Anwender seinen Installationsschlüssel sendet, muss ein Aktivierungsschlüssel erstellt werden. Dieser
Aktivierungsschlüssel teilt der Anwendung mit, ob der Anwender eine bestimmte Aktion ausführen darf. Für jede
Aktion muss das entsprechende Recht ausgewählt werden.
Visual Extend 10.0
Seite 86
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Mit der Schaltfläche „Read Installation Key“ öffnet sich ein Dialog, in den der Installationsschlüssel des
Anwenders eingegeben wird. Der Installationsschlüssel kann über die Zwischenablage eingefügt werden oder aus
einer Datei gelesen werden.
Nachdem jedes für den Anwender erlaubte Recht markiert ist, wird mit einem Klick auf OK der Aktivierungsschlüssel generiert. Der erstellte Aktivierungsschlüssel wird in der Datei <Projektname>.xak im Projektordner
gespeichert. Der Aktivierungsschlüssel oder die Datei muss an den Anwender zur Aktivierung der Anwendung
gesendet werden.
Wenn dem Anwender entsprechend dem obigen Beispiel alle Rechte zur Datenbearbeitung gegeben wurden, er
aber nicht das Recht hat Berichte zu drucken, sehen die Eigenschaften zur Laufzeit so aus:
goProgram.SecurityRights.RunDataForms = 1
goProgram.SecurityRights.RunReports = 0
goProgram.SecurityRights.EditData = 1
goProgram.SecurityRights.ViewData = 1
Wenn der Anwender eine Anwendung startet, die eine Aktivierung erfordert (und wenn die Anwendung noch
nicht aktiviert wurde), wird automatisch der Installationsschlüssel erzeugt. Abhängig vom Wert der Eigenschaft
nRegWay wird der Installationsschlüssel entweder angezeigt oder in einer Datei gespeichert, die per E-Mail
versendet werden kann. Nachdem der Anwender den Aktivierungsschlüssel erhalten hat, kann er ihn im
Aktivierungsfenster eingeben oder die Datei mit dem Aktivierungsschlüssel im Projektordner speichern. Damit
ist die Anwendung auf diesem Computer aktiviert.
Wenn der Anwender später den Menüpunkt Hilfe, Produkt aktivieren auswählt, wird der Installationsschlüssel
angezeigt, unabhängig von der Einstellung der Eigenschaft nRegWay.
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Visual Extend 10.0
Seite 87
Eigenschaften der Klasse CVFXActivation
cFirstInstall – Diese Eigenschaft enthält den Namen einer Datei. Anhand des Vorhandenseins dieser Datei
entscheidet diese Klasse, ob die Anwendung erstmalig gestartet wird. Wenn dieser Eigenschaft eine
leere Zeichenkette zugewiesen wird, kann nicht überprüft werden, ob die Anwendung erstmalig
gestartet wird. Das Datum des Starts wird dann ohne weitere Überprüfung in der Ini-Datei eingetragen.
cINIFileName – Der Name der Ini-Datei, in der die Aktivierungsinformationen und das Datum des ersten
Anwendungsstarts gespeichert sind. Der Standardwert ist VFX.ini.
cParamFile – Der Name der Datei, in der der Installationsschlüssel gespeichert wird. Abhängig vom Wert der
Eigenschaft nRegWay kann diese Datei per E-Mail versendet oder auf einem anderen Weg verarbeitet
werden.
cRegMail – In dieser Eigenschaft wird die E-Mail-Adresse des Entwicklers gespeichert, an die die Datei mit dem
Installationsschlüssel gesendet wird, wenn die Eigenschaft nRegWay den Wert 2 hat.
cRegFileName – Hier kann der Name einer Datei angegeben werden, die bei der Installation erstellt wird. Das
Erstellungsdatum dieser Datei wird verwendet um das Installationsdatum zu ermitteln. Wenn dieser
Eigenschaft kein Wert zugewiesen wird, wird das Systemdatum des ersten Starts der Anwendung verwendet.
nRegWay – In dieser Eigenschaft kann eingestellt werden, wie der Entwickler den Installationsschlüssel
bekommen soll.
0 – Der Installationsschlüssel wird in einem Dialog angezeigt und der Anwender kann den Installationsschlüssel kopieren und in beliebige Anwendungen einfügen.
1 – Der Installationsschlüssel wird in einer Datei gespeichert. Der Anwender kann diese Datei später
an den Entwickler übermitteln. Der Name der Datei wird in der Eigenschaft cParamFile hinterlegt.
2 – Der Installationsschlüssel wird in einer Datei gespeichert und an den Entwickler als E-MailAnhang gesendet. Der Name der Datei wird in der Eigenschaft cParamFile hinterlegt. Die E-MailAdresse des Entwicklers, an die der Installationsschlüssel gesendet wird, wird in der Eigenschaft
cRegEMail eingetragen.
11 – Nach Anzeige des Registrierungsdialogs wird der Installationsschlüssel in einer Datei
gespeichert. Diese Datei kann später an den Entwickler gesendet werden. Der Dateiname wird in der
Eigenschaft cParamFile hinterlegt.
12 – Nach Anzeige des Registrierungsdialogs wird der Installationsschlüssel in einer Datei gespeichert
und sofort als E-Mail-Anhang an den Entwickler geschickt. Der Dateiname muss in der Eigenschaft
cParamFile hinterlegt werden. Die E-Mail-Adresse des Entwicklers muss in der Eigenschaft
cRegEMail eingetragen werden.
Visual Extend 10.0
Seite 88
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Anwendungsverteilung
Müssen wir eine VFP Anwendung überhaupt installieren?
VFP Anwendungen müssen grundsätzlich nicht installiert werden. Mit der Entwicklungsumgebung von VFP
können Exe Dateien und auch Dll Dateien erstellt werden, die auf Kundenrechnern eingesetzt werden können,
auf denen die Laufzeitumgebung von VFP nicht installiert ist. Zum Ausführen von mit VFP erstellten Exe oder
Dll Dateien genügt es, wenn auf dem Kundenrechner die Laufzeitumgebung von VFP vorhanden (aber nicht
installiert) ist.
Die Laufzeitumgebung von VFP kann installiert werden. Dies ist aber nicht erforderlich. Wenn die Dateien der
Laufzeitumgebung im gleichen Ordner gespeichert sind, in dem auch die Exe oder Dll Datei gespeichert ist,
werden die Dateien in diesem Ordner gefunden und können problemlos verwendet werden.
Dies ist eine ganz herausragende und wichtige Eigenschaft von VFP. Viele Entwicklungssysteme erfordern die
Installation einer Laufzeitumgebung. Bei VFP ist das nicht so. Diesen großen Vorteil können wir uns zu Nutze
machen.
Easy Distribution
Für Visual Studio wird Werbung mit One-Click-Installationen gemacht. Nun, das ist ein Click zu viel. Es gibt
genug Situationen, in denen die Installation einer Anwendung nicht möglich ist. Hier haben wir mit VFP einen
entscheidenden Vorteil. Wir können Anwendungen erstellen, die ohne Installation auskommen.
In welchen Situationen kann nicht installiert werden?
Die Möglichkeit ohne Installation auszukommen, gewinnt beim Einsatz von VFP Anwendungen bei immer mehr
Unternehmen an Bedeutung. Immer öfter verlangen strenge Sicherheitsrichtlinien in Firmen und Behörden, dass
Installationen nicht möglich sind oder kompliziert genehmigt werden müssen. Die Systemadministration muss
ihre Genehmigung geben und das ist oft mit Hürden verbunden. Allerdings gibt es in praktisch jedem Netzwerk
freigegebene Ordner, in denen die Benutzer Schreibrechte haben, zum Beispiel um Dateien auszutauschen. Ein
solcher Ordner ist für unsere Ansprüche völlig ausreichend. Eine VFP Anwendung kann mit der
Laufzeitumgebung und der Datenbank in einen freigegebenen Ordner kopiert und von dort ausgeführt werden.
Ein spezieller Anwendungsfall ist der automatische Start einer Anwendung von einer CD-ROM. So eine
Anwendung darf keine installierte Laufzeitumgebung erfordern und praktisch keine Anforderungen an die
Umgebung stellen. So eine Anwendung muss ohne Installation auf jedem PC ausgeführt werden können. Diese
Möglichkeit haben wir mit VFP.
Wir können unsere Anwendung auch mit der Laufzeitumgebung auf einen Memory Stick oder eine USB
Festplatte kopieren und so auf jedem beliebigen PC sofort ausführen.
In welchen Situationen muss installiert werden?
Bei unseren Tests haben wir kein ActiveX Steuerelement oder irgendeine andere Komponente gefunden, die eine
Installation erfordert. Mit VFP Anwendungen laufen alle Komponenten entweder ohne Registrierung oder mit
einer programmatisch durchgeführten Registrierung, die zur Laufzeit der Anwendung durchgeführt werden kann.
Es kann also generell auf eine Installation von VFP Anwendungen verzichtet werden.
Eine Ausnahme mag es geben, wenn eine Anwendung eigentlich ohne Installation laufen soll und ActiveX
Steuerelemente verwendet werden sollen, die eine Registrierung erfordern, die Benutzer aber keine Schreibrechte
auf die Windows Registrierungsdatenbank haben. In diesem Fall kann die Anwendung nur von einem
Administrator installiert werden. Eine Alternative wäre aber auch in diesem Fall, dass ein Administrator die
Anwendung startet und so die benötigten ActiveX Steuerelemente programmatisch registriert.
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Visual Extend 10.0
Seite 89
Installation
Wie wir gesehen haben, gibt es keinen zwingenden Grund eine VFP Anwendung zu installieren. Aber eine
Installation hat auch Vorteile.
Eigentlich ist unser Ziel unseren Anwendungen ein professionelles Auftreten zu verleihen. Dazu gehört auch der
Einsatz eines Installationsprogramms.
Die Installation
Das Installationsprogramm sollte einen Eintrag unter Software in der Systemsteuerung anlegen und eine
Deinstallationsmöglichkeit anbieten. Das mit VFP gelieferte Installshield Express reicht für die meisten
Ansprüche von VFP-Entwicklern aus.
Über den Eintrag in der Systemsteuerung kann der Anwender Informationen über den Support der Anwendung
erhalten. Dies ist wichtig, wenn der Anwender die Applikation gar nicht mehr starten kann. Es ist daher
empfehlenswert die entsprechenden Felder im InstallShield Express auszufüllen.
Installationsprogramme
Für weitergehende Ansprüche sind Installationsprogramme von verschiedenen Herstellern erhältlich.
Installshield
Mit VFP wird eine speziell für VFP angepasste Version von Installshield geliefert. Es ist „Installshield Express
für Visual FoxPro“. Den meisten Entwicklern werden die Möglichkeiten dieser Version von Installshield
ausreichen. Entwickler mit weitergehenden Ansprüchen können eine leistungsfähigere Version von Installshield
erwerben. Der Vorteil von Installshield ist, dass es die Windows Installer Technologie verwendet und sich so
harmonisch in die Windows Welt integriert.
Wise
Großer Beliebtheit erfreut sich das Installationsprogramm Wise. Wise benutzt ein eigenes Installationsverfahren.
Trotzdem können mit Wise erstellte Setups zertifiziert werden. Wise enthält eine leistungsfähige Skriptsprache,
die es erlaubt auf dem Zielrechner praktisch alle denklichen Aktionen auszuführen.
InnoSetup
Außerdem möchten wir das kostenlose Werkzeug InnoSetup empfehlen. Weitergehende Informationen zu
InnoSetup sind in den Session Notes zur Session E-INNO aus dem Jahr 2006 zu finden.
InnoSetup kann über diese URL heruntergeladen werden:
www.jrsoftware.org/isdl.php
Visual Extend 10.0
Seite 90
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Keine Installation
Wie bereits erwähnt, kommen VFP Anwendungen ohne Installation aus.
Wie geht das eigentlich?
Eine mit VFP erstellte Anwendung benötigt eine Laufzeitumgebung. Diese Laufzeitumgebung wird bevorzugt im
Ordner der Anwendung gesucht. Erst wenn im Ordner der Anwendung keine Laufzeitumgebung gefunden wird,
wird die Windows Registrierungsdatenbank nach einer installierten Version der Laufzeitumgebung durchsucht.
Die folgenden Dateien werden für die Laufzeitumgebung von VFP Anwendungen benötigt:
-
GDIPLUS.dll
-
MSVCR71.dll
-
VFP9R.dll
-
VFP9Rdeu.dll
-
VFP9Renu.dll
Für mit VFP erstellte COM Server wird statt VFP9R.dll die Datei VFP9T.dll benötigt.
Welche Sprachversion der Runtime-Dll geladen wird, hängt von den Regionaleinstellungen in der Systemsteuerung ab. Wenn eine passende Datei gefunden wird, zum Beispiel VFP9Rdeu.dll für deutsche Regionaleinstellungen, so wird diese geladen. Wird keine lokalisierte Runtime-Dll gefunden, wird standardmäßig die
englische Version (VFP9Renu.dll) genommen. Wenn die Datei VFP9Renu.dll nicht gefunden wird, kann die
Anwendung nicht gestartet werden. Die Datei VFP9Renu.dll muss daher unbedingt mit ausgeliefert werden, auch
wenn sie bei deutschen Regionaleinstellungen nicht benötigt wird.
Was ist mit ActiveX Steuerelementen?
VFP Anwendungen erkennen ActiveX Steuerelemente, die sich im Ordner der Anwendung befinden, auch wenn
diese nicht registriert sind. Überraschend viele ActiveX Steuerelemente funktionieren ohne Registrierung in VFP
Anwendungen einwandfrei. Im Zweifelsfall hilft es hier, es einfach auszuprobieren.
Falls eine Registrierung erforderlich ist, kann dies programmatisch aus der Anwendung selbst gemacht werden,
bevor das ActiveX Steuerelement erstmalig verwendet wird. Voraussetzung ist dabei natürlich, dass der Benutzer
die erforderlichen Rechte besitzt. Wenn das ActiveX Steuerelement im Ordner unserer Anwendung bleibt, ist
kein Zugriff auf irgendwelche Windows Systemordner erforderlich. Der Benutzer braucht dann nur das Recht
schreibend auf die Windows Registrierungsdatenbank zugreifen zu können.
Wie kann programmatisch registriert werden?
Wir wollen unsere ActiveX Steuerelemente im Ordner der Anwendung registrieren. In der Regel können ActiveX
Steuerelemente mit RegSvr32.exe registriert werden. So können OCX und DLL Dateien registriert werden.
RegSvr32 muss dafür als Parameter der vollständige Pfad- und Dateiname des ActiveX Steuerelements
mitgegeben werden. RegSvr32 kann einfach mit dem RUN Befehl von VFP ausgeführt werden. Mit einer
einfachen Funktion kann fast jedes ActiveX Steuerelement registriert werden.
* Registrierung von OCX und DLL Dateien
LPARAMETERS tcFileName
LOCAL lcFilePath
lcFilePath = ADDBS(SYS(5) + SYS(2003)) + tcFileName
RUN /N regsvr32 &lcFilePath /s
RegSrv32 wird mit dem Parameter /s gestartet, um die Anzeige von Meldungen zu unterdrücken. /s steht für
silent mode.
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Visual Extend 10.0
Seite 91
Die meisten Anwendungen, die eine Registrierung erfordern, lassen sich mit dem Parameter /regserver
registrieren. Auch hierfür lässt sich der Code in einer einfachen Funktion unterbringen.
* Registrierung von EXE Dateien
LPARAMETERS tcFileName
LOCAL lcFilePath
lcFilePath = ADDBS(SYS(5) + SYS(2003)) + tcFileName
RUN /N &lcFilePath /REGSERVER
Bevor eine Datei registriert wird, sollte aber geprüft werden, ob eine Registrierung bereits erfolgt ist. Um dies
feststellen zu können, muss man nicht nur den Dateinamen, sondern auch die Bezeichnung wissen, die in der
Windows Registrierungsdatenbank von dem ActiveX Steuerelement eingetragen wird. Zum Beispiel registriert
sich das MSMAPI32.OCX mit der Bezeichnung MSMAPI.MAPISession.
LOCAL lcBuffer, lnRes
DECLARE integer CLSIDFromProgID IN Ole32.dll String cProdID, string
@vbuffer
lcBuffer = SPACE(16)
TRY
lnRes = CLSIDFromProgID(STRCONV("MSMAPI.MAPISession" + ;
CHR(0), 5), @lcBuffer)
CATCH
lnRes = -1
ENDTRY
CLEAR DLLS "CLSIDFromProgID"
RETURN (lnRes = 0)
Diese Funktion liefert .T. zurück, wenn MSMAPI registriert ist.
Was muss registriert werden?
XML
Wenn in einer VFP Anwendung die Klasse xmladapter verwendet wird, muss auf dem Rechner MSXML4
registriert sein. Mit einem einfachen Test auf einem Rechner ohne MSXML4 kann man das Verhalten zeigen.
CREATE CURSOR test( field1 N(10), field2 C(30))
INSERT INTO test values(1,"aaaaa")
INSERT INTO test values(2,"bbbbb")
INSERT INTO test values(3,"ccccc")
loXMLA=NEWOBJECT("XMLAdapter")
loXMLA.LoadXML("lcXML")
Beim Ausführen der letzten Zeile erscheint die Fehlermeldung:
Microsoft Visual FoxPro
OK
Help
This feature requires MSXML4 SP1 or later.
Wie bei allen anderen Komponenten ist auch für MSXML4 keine Installation erforderlich. Es ist ausreichend
MSXML4.dll zu registrieren. Zu beachten ist, dass 3 Dateien zu MSXML4 gehören:
-
MSXML4.dll
-
MSXML4a.dll
-
MSXML4r.dll
Die Registrierung der beiden anderen Dateien ist nicht erforderlich.
Weitere Informationen zur Weitergabe von MSXML4 befinden sich auf dieser Website:
http://msdn2.microsoft.com/en-us/library/ms755709.aspx
Zur Verwendung der XML Funktionen xmltocursor() oder cursortoxml() ist MSXML4 nicht erforderlich.
Visual Extend 10.0
Seite 92
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
MAPI
MSMAPI32.ocx muss registriert sein, wenn eine Anwendung MAPI verwendet.
Foxhhelp
Um aus einer VFP Anwendung eine kontextsensitive Hilfedatei aufrufen zu können, muss Foxhhelp registriert
sein. Es müssen die Dateien Foxhhelpps9.dll und Foxhhelp9.exe registriert sein. Mit der Funktion von oben kann
geprüft werden, ob Foxxhelpps9.dll registriert ist.
LOCAL lcBuffer, lnRes
DECLARE integer CLSIDFromProgID IN Ole32.dll String cProdID, string
@vbuffer
lcBuffer = SPACE(16)
TRY
lnRes = CLSIDFromProgID(STRCONV("Foxhhelp.Foxhtmlhelp9" + ;
CHR(0), 5), @lcBuffer)
CATCH
lnRes = -1
ENDTRY
CLEAR DLLS "CLSIDFromProgID"
RETURN (lnRes = 0)
Wenn diese Datei nicht registriert ist, müssen Foxhhelpps9.dll und Foxhhelp9.exe mit den Funktionen von oben
registriert werden.
Eine Anwendung baut ihre Umgebung selbst auf
Wie wir gesehen haben, kann eine VFP Anwendung sehr einfach prüfen, ob verwendete ActiveX Steuerelemente
vorhanden und/oder registriert sind. Von diesen Möglichkeiten sollte grundsätzlich Gebrauch gemacht werden.
Auch wenn man alle erforderlichen Komponenten mit einem Installationsprogramm installiert hat, kann es sein,
dass diese Komponenten zu einem späteren Zeitpunkt nicht mehr zur Verfügung stehen. Zum Beispiel, weil ein
anderes Programm unsere Komponenten deinstalliert hat oder mit anderen Versionen überschrieben hat, die mit
unserer Anwendung nicht funktionsfähig sind.
Start einer VFP-Anwendung von CD-ROM
Unsere Kunden erwarten von uns Anwendungen, die im Erscheinungsbild den Anwendungen großer Hersteller
gleichkommen.
Es beginnt bei einer Autostart-Anwendung auf der CD-ROM, mit der wir unsere Anwendung ausliefern und geht
mit dem Installationsprogramm weiter.
Software wird meistens auf CD-ROMs geliefert. Auf einer CD-ROM befindet sich in der Regel ein Programm,
das automatisch startet, wenn die CD-ROM in das Laufwerk eingelegt wird. Ein solches Programm kann mit VFP
erstellt werden. Das Problem ist hier, dass die Visual FoxPro Laufzeitumgebung wahrscheinlich nicht auf dem
Kundenrechner installiert ist.
Um einen Autostart zu ermöglichen muss sich im Hauptverzeichnis der CD-ROM eine Datei mit dem Namen
Autorun.inf befinden. Die Datei ist so ähnlich wie eine Ini-Datei aufgebaut. Hier ein Beispiel:
[autorun]
OPEN = StartCD.exe
ICON = MeinIcon.ico
Das Icon muss als Datei auf der CD-ROM gespeichert sein. Wenn ein Icon vorhanden ist, wird dieses im
Windows-Explorer angezeigt. In der Zeile OPEN wird das zu startende Programm eingetragen.
Das Autostart-Programm sollte dem Anwender zeigen was sich auf der CD-ROM befindet. Es sollten Hinweise
auf den Autor enthalten sein. Von hier aus sollte das eigentliche Installationsprogramm gestartet werden können.
Der Anwender sollte aber auch die Möglichkeit erhalten sich zunächst einen Überblick über das zu verschaffen,
was er installieren kann.
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Visual Extend 10.0
Seite 93
Es mag sinnvoll sein das Benutzerhandbuch als PDF-Datei auf den CD-ROMs zu speichern und dem Anwender
aus dem Autostart zu ermöglichen das Handbuch zu lesen. Der zum Lesen von PDF-Dateien benötigte Adobe
Reader kann kostenlos vertrieben werden. Dazu muss zuvor bei Adobe eine kostenlose Vertriebslizenz beantragt
werden.
So haben wir eine sehr professionelle CD-ROM.
Download von Updates über das Internet
In der Regel müssen zu einer Anwendung Updates verteilt werden. Sei es, dass in den Aktualisierungen Fehler
beseitigt wurden oder neue Eigenschaften hinzugekommen sind. Bei einem größeren Kundenkreis bietet es sich
an die Aktualisierungen über das Internet zu verteilen.
Der Download von Dateien aus dem Internet ist mit Funktionen aus der Wininet.dll relativ einfach möglich. Eine
fertige Klasse für diese Aufgabe finden Sie auf der Konferenz-CD-ROM.
Nach dem erfolgreichen Download muss die neu heruntergeladene Exe-Datei gegen die aktuell ausgeführte Datei
ausgetauscht werden. Dazu wird ein kleines Hilfsprogramm benötigt. Dieses Hilfsprogramm muss die alte ExeDatei umbenennen und der neu heruntergeladenen Datei den Namen der Exe-Datei geben. Ein lauffähiges
Beispiel für ein solches Loader-Programm befindet sich auf der Konferenz-CD-ROM.
So kann auf die Erstellung und Distribution von Installationsprogrammen für Aktualisierungen verzichtet werden.
Schlusswort
Wie wir gesehen haben, stellt VFX 10.0 eine vollständige Entwicklungsumgebung bereit, die keine Wünsche
offen lässt. Alle wesentlichen Einstellungen an VFX-Klassen, insbesondere an den Formularklassen, können mit
reentranten Generatoren durchgeführt werden.
Da VFX mit Quellen geliefert wird und selbst mit VFP programmiert ist hat der Entwickler unbegrenzte Freiheit
eigene Erweiterungen oder Anpassungen an eigene Bedürfnisse vorzunehmen.
Die mit VFX erstellten Applikationen vermitteln dem Anwender einen sehr professionellen Eindruck und eine
weitgehend Office-kompatible Bedienung.
VFX bietet mit all dem ein unschlagbares Preis-/Leistungsverhältnis. Es bietet jedem Programmierer eine Fundgrube an Ideen und eine Vielzahl von fertigen Problemlösungen.
Visual Extend 10.0
Seite 94
VFX 10.0 - Workshop
© 2008 V.Jordanova, U.Habermann
Herunterladen