Korrekte Einstellung der Optionen von Visual FoxPro
von Rainer Becker
Die Konfiguration der Optionen unter Visual FoxPro bedarf bei Projektbeginn einer gewissen Überarbeitung, da die Standardeinstellungen in vielen Fällen nur sehr eingeschränkt zu empfehlen sind. Kontrollieren sollte man die Einstellungen unabhängig davon ohnehin. Außerdem sollten die Optionen bei allen Projektbeteiligten nach Möglichkeit identisch eingestellt sein. Die Optionen findet man unter der Menüleiste "Extras" als letzten Punkt. Für jeden Reiter des Optionen-Pageframes werden nachfolgend die meines Erachtens zu ändernden Einstellungen aufgezählt. Dies sind allerdings nur persönliche Empfehlungen und nicht allgemeingültige Wahrheiten. Vorab allerdings noch ein paar Informationen über den Austausch der erstellten Optionen.
Ablage in der Registry
Die Optionseinstellungen werden von Visual FoxPro in der lokalen Registry gespeichert. Sofern man an mehreren Personalcomputern (z.B. Arbeitsplatz im Büro und zu Hause oder zusätzlicher Laptop) arbeitet oder sofern mehrere Personen gemeinsam an einem Projekt beteiligt sind, ist das Abgleichen der eingestellten Optionen sehr sinnvoll. Dieser Abgleich der Optionen kann am Einfachsten durch den Import einer zuvor erstellten Registrydatei (*.REG) erfolgen. Durch einfaches Doppelklicken auf diese Datei werden die in ihr enthaltenen Registry-Einträge in die lokale Registry übernommen. Die Einstellungen sollten danach aber vorsichtshalber noch geprüft werden.
|
Abbildung 1: Pfad der VFP-Optionen im Registrierungseditor |
Nach dem korrekten Einstellen aller Optionen kann man sich eine solche .REG-Datei über den Registrierungseditor (REGEDIT.EXE) erstellen lassen. Dazu wählt man den Zweig \HKEY_CURRENT_USER und darunter \Software\Microsoft\VisualFoxPro\6.0. Danach wählt man unter dem ersten Menü "Registrierung" den Menüpunkt "Registrierungsdatei exportieren" und stellt als Exportbereich statt "Alles" den "Gewählter Zweig" ein. Fertig ist die entsprechende .REG-Datei, der man nur noch einen Namen zu geben braucht.
Die erstellte Datei enthält alle Subabschnitt in der Registry für Visual FoxPro. Dazu gehören außer den Optionen (unter \Options) die Abschnitte "ChooseColor" mit Farbeinstellungen, "Coverage" mit der Konfiguration des Coverage-Profilers sowie "Desktop" und "Fonts" mit den Bildschirm- und Schriftarteneinstellungen. Sofern man nicht alle diese weiteren hier nicht weiter behandelten Einstellmöglichkeiten abgleichen möchte, kann man sich auf den Unterabschnitt \Options beschränken. Dieser enthält alle nachfolgend beschriebenen Einstellungsmöglichkeiten sowie die weiteren Abschnitte "IntelliDrop" für die Klassenzuordnung zu Feldarten, "OLEList" und "VCXList" mit den ausgewählten ActiveX-Controls und Klassenbibliotheken.
Um zwischen mehreren Projektbeteiligten einheitliche Einstellungen erreichen zu können, stellt der Weg über eine .REG-Datei den einfachsten Weg da. Sofern man allerdings für verschiedene Projekte unterschiedliche Einstellungen verwendet, sei daß Tool von Joachim Hilgers (dFPUG-Regionalleiter in Köln sowie Inhaber der Firma Hicosoft) empfohlen, welches in der Library des dFPUG-Forums im Internet (http://www.dfpug.de) zu finden ist (siehe auch Begleit-CD). Dieses kostenfreie Tool erlaubt die Verwaltung von mehreren Optionseinstellungen und den schnellen Wechsel dazwischen.
Die verschiedenen Reiter der Optionen nunmehr im Einzelnen:
Ländereinstellungen
|
Abbildung 2: Reiter Ländereinstellungen |
Unter dem Reiter "Ländereinstellungen" sollte man keinesfalls die Checkbox für die Übernahme der derzeitigen Systemeinstellungen ankreuzen. Stattdessen sollte man folgende Einstellungen für den Bereich der Datumeinstellungen vornehmen: Datumsformat "Deutsch" mit Datumstrennzeichen und Jahrhundertanzeige; Zeitanzeige mit 24 Stunden und Sekunden; Währungsformat "1DM" und Währungssymbol "DM"; 1000er Trennzeichen auf "." mit Dezimaltrennzeichen "," und 2 Dezimalstellen.
Zusätzlich kann man sich noch den Wochenbeginn und die Zählweise für die erste Kalenderwoche einstellen, damit die Kalenderwochenberechnung ebenfalls lokalisiert ist. Die Woche beginnt dann am "Montag" und die erste Woche des Jahres ist die "Erste Vier-Tage-Woche".
Syntaxfarbe
|
Abbildung 3: Reiter Syntaxfarbe |
Den verschiedenen Syntaxbereichen kann man jeweils eine eigene Farbe im Editor zuweisen. Dies ist ausgesprochen praktisch und erhöht die Übersichtlichkeit von Quellcode sehr deutlich. Im angezeigten "Muster"-Fenster kann man auch gleich die Auswirkungen in der Praxis anschauen.
Unter dem Reiter "Syntaxfarbe" verwende ich bei meiner täglichen Arbeit nachfolgende Einstellungen:
Bereich
|
Farbe
|
Kommentare
|
Grün
|
Schlüsselwörter
|
Blau
|
Literale
|
Rot
|
Standard
|
Automatisch
|
Operatoren
|
Automatisch
|
Zeichenketten
|
Rosa
|
Variablen
|
Automatisch
|
|
Tabelle 1: Vorschlag Farbzuordnungen |
Mit "Schlüsselwörter" sind dabei die FoxPro-Befehle gemeint, unter "Literale" werden Zahlenangaben und unter "Zeichenketten" Strings verstanden. Die Farbangabe "Automatisch" heißt, daß der entsprechende Abschnitt Schwarz auf Weiß dargestellt wird. Wie man in der Tabelle sieht, empfehle ich, nicht sämtliche Syntaxarten andersfarbig darzustellen, da die Anzeige sonst zu bunt und damit wieder unübersichtlich wird.
Klassenzuordnung zu Feldern
|
Abbildung 4: Reiter Klassenzuordnung zu Feldern |
Unter dem Reiter "Klassenzuordnung zu Feldern" erfolgt die Zuordnung der eigenen Basisklassen (Subklassen der entsprechenden FoxPro-Klassen) zu allen Feldarten. Sofern man Tabellenfelder aus der Datenumgebung, aus einem Datenbankcontainer oder aus einer aufgeklappten Tabelle im Projektmanager auf eine Maske zieht, wird gemäß der hier vorgenommenen Einstellungen die jeweils gewünschte Klasse für das Anzeigeelement des Datenbankfeldes in der Maske eingesetzt. Dies erspart einem aufwendiges Abändern der Parentklassen der Benutzeroberfläche. Sofern bei einem Datenbankfeld direkt eine Klasse angegeben wurde, wird diese natürlich weiterhin verwendet und nicht durch eine Klasse gemäß der Klassenzuordnung ersetzt.
In jeder Zeile der Zuordnung muß eine Klasse und eine Klassenbibliothek eingetragen werden. Desweiteren sollte man die vier Checkboxen zu jeder Klassenzuordnung gesetzt lassen. Insbesondere die erste Checkbox "Feldüberschrift mit Drag & Drop übernehmen" ist besonders praktisch. Dadurch wird zusätzlich zu dem Feld mit der Klasse gemäß dem jeweiligen Feldtyp auch gleich ein entsprechendes Label angelegt mit der Feldbeschriftung - das spart wahnsinnig viel Zeit bei der Maskengestaltung. Welche Klasse generell für die Labels verwendet wird, kann man gleich mit einstellen.
Die Zuordnung selbst erfolgt über eine Zusatzmaske (siehe nächste Abbildung), die sich hinter dem Button "Bearbeiten" verbirgt. Mit dieser Maske lassen sich die gewünschten Basisklassen sehr schnell zuweisen, sofern sich alle in der gleichen Klassenbibliothek befinden. Dann kann man nämlich die Bibliothek über den Button "Datenblatt" (sehr geschickte Beschreibung...) einstellen und dann über die beiden Comboboxen "Typ" und "Name" den jeweiligen Feldarten die entsprechende Klasse zuweisen.
|
Abbildung 5: Auswahldialog Klassenzuordnung zu Feldern |
Vor der Zuordnung muß man natürlich die entsprechenden Basisklassen abgeleitet haben. Dabei empfehle ich, jeweils eine Klasse für Zeichenketten, Datumsfelder, Numerische Felder, Logische Felder und Memofelder anzulegen. Außerdem benötigt man noch jeweils eine Klasse für Beschriftungen und für Grids.
Typ
|
Klassenname
|
Zeichen
|
GUI_TEXT
|
Zeichen (binär)
|
GUI_TEXT
|
Datum
|
GUI_DATE
|
DatumZeit
|
GUI_DATE
|
Numerisch
|
GUI_ SPINNER
|
Währung
|
GUI_ SPINNER
|
Double
|
GUI_ SPINNER
|
Gleitkomma
|
GUI_ SPINNER
|
Integer
|
GUI_ SPINNER
|
Objekt (OLE)
|
Kein Eintrag
|
Logisch
|
GUI_CHECKBOX
|
Memo
|
GUI_EDITBOX
|
Memo (binär)
|
GUI_EDITBOX
|
Mehrere (Grid)
|
GUI_GRID_BASE
|
Beschriftung
|
GUI_LABEL
| |
Tabelle 2: Vorschlag Klassenzuordnung zu Feldtypen |
Eine Grid-Klasse wird automatisch dann auf einer Maske plaziert, wenn man nicht ein einzelnes Feld sondern eine ganze Tabelle aus der Datenumgebung, einem Datenbankcontainer oder dem Projektmanager auf die Maske zieht. Für OLE Objekte ist die Definition einer Standardklasse eigentlich nicht sinnvoll, weil jedes ActiveX-Steuerelement letztendlich seine eigene spezialiserte Containerklasse benötigt.
Umgebung
|
Abbildung 6: Reiter Umgebung |
Unter dem Reiter "Umgebung" kann man sich sämtliche Checkboxen einschalten. Nur bei "Befehlsresultate" ist dies nicht immer sinnvoll.
Allgemein
|
Abbildung 7: Reiter Allgemein |
Unter dem Reiter "Allgemein" erfolgen normalerweise eigentlich keine Änderungen. Man sollte allerdings prüfen, ob die oben abgebildeten Schalter die richtigen Default-Einstellungen haben.
In der Einstellungsgruppe "Dateneingabe" sollte man meines Erachtens keinesfalls als Standard "Neue Datensätze mit aktuellen Werten füllen" sowie "Verlassen von Feldern mit EINGABE oder TAB" einstellen. Solche grundlegenden Verhaltensweisen sollten wenn überhaupt dann für den Anwender individuell konfigurierbar sein. Dies entspricht ansonsten den SET-Einstellungen SET CARRY und SET CONFIRM.
Ich selbst verwende wegen häufigem interaktiven Arbeiten im Befehlsfenster die Einstellung "Strikte Datumsebene" im Pulldown auf "0 - Aus". Dies ist jetzt allerdings keine Empfehlung für die tatsächliche Programmierung. Da sollte man vielleicht doch besser einen höheren Level einstellen, um die Jahr-2000-Kompatibilität der eigenen Anwendung sicherzustellen.
Daten
|
Abbildung 8 : Reiter Daten
|
Unter dem Reiter "Daten" müssen oben eingetragene Einstellungen geändert bzw. geprüft werden. Insbesondere sollte niemals die Option "Eindeutige Datensätze in Indizes" eingestellt werden, da dann nicht tatsächlich "eineindeutige Schlüssel" (Candidate Keys) erstellt werden, sondern nur das jeweils erste Auftauchen eines Wertes im Index vermerkt wird (entspricht SET UNIQUE).
Desweiteren sollte man statt der Default-Collatesequenz "GENERAL" wahlweise im Sortierfolge-Pulldown "MACHINE" wählen oder die deutsche Telefonbuchsortierung oder die gewichtete Sortierung "UNIQWT". Dann werden weiterhin Groß- und Kleinschreibung unterschieden und Indizes benötigen nicht doppelt soviel Speicherplatz wie der eigentliche Suchbegriff. Siehe dazu auch die Checkliste zur Rushmore-Optimierung.
Statt einer automatischen Dateisperrung sollte man auf jeden Fall "Mehrfache Datensatzsperren" (entspricht SET MULTILOCKS) einstellen, damit nicht bei Datenänderungen eine Dateisperre (FLOCK()) gesetzt wird, was Änderungen durch andere Anwender nicht nur für den aktuellen Satz sondern für die gesamte Tabelle ausschließen würde.
Dateiablage
Unter dem Reiter "Dateiablage" sollten folgende Pfadangaben geändert werden:
- Standardverzeichnis: ""
- Suchpfad: ggf. Suchpfade einstellen
- Temporäre Dateien: "c:\temp"
- Globale Include Datei: "\include.h"
Ein Standardverzeichnis sollte man sich auf jeden Fall für sein Projekt setzen. Auch das Verlagern der temporären Dateien von FoxPro in ein eigenes leicht zu leerendes Verzeichnis macht Sinn. Der Suchpfad ist sinnvoll, damit man nicht immer feste Pfadangaben verwenden muß - insbesondere beim Einbinden von Konstantendateien ist dies praktisch, da bei mehreren Entwicklern bestimmt einer auf einem anderen Laufwerk oder auf einem tiefergelegenen oder anders benannten Verzeichnis arbeitet und dann festverdrahtete vollständige Pfade für Include-Dateien nicht durchgängig funktionieren. Abhilfe kann man in diesem Fall bestenfalls durch die Vorgabe einer an einheitlicher Stelle abgelegten globalen Include-Datei schaffen, in welche dann über #INCLUDE der jeweils lokal gültige Pfad für die eigentlichen Include-Dateien eingesetzt wird.
Desweiteren kann man alle Pfade auf Hilfswerkzeuge, die nicht benötigt werden, löschen, da sonst bei jedem Start sämtliche gesetzten Pfade zeitaufwendig überprüft werden. Wahlweise kann auch noch ein Standardstartprogramm angewählt werden, in welchem man sich vielleicht ein zusätzliches Entwicklermenü zum FoxPro-Systemmenü addiert.
Formulare
|
Abbildung 9: Reiter Formulare |
Unter dem Reiter "Formulare" müssen fast alle Einträge geändert werden, wenn man praktisch arbeiten können möchte. Rasterlinien und Rasterausrichtung sind für die exakte Positionierung von Steuerelementen auf Masken sehr praktisch; ebenso die Funktion "Position anzeigen". Ich selbst bevorzuge außerdem die Aktivierreihenfolge "Nach Liste". Als Maßstabseinheiten sollte man auf jeden Fall "Pixel" verwenden. Die maximale Entwurfsfläche muß man individuell auf die Projektanforderungen einstellen, bei mir wären das "1024*768" Pixel.
Damit die Neuanlage von Masken gleich auf der richtigen Basisklasse stattfindet, sollte man unter "Formular" seine Maskenbasisklasse (z.B. "gui_form" / "gui_base.vcx") eintragen. Bei "Formularsatz" nehme ich normalerweise keine Eintragung vor, da Maskensets in der Praxis nur noch sehr selten vorkommen. Um sich nicht durch Systemabstürze der eben erstellten Klassen selbst zu entledigen, hat sich ansonsten die Checkbox vor "Vor der Ausführung des Formulars auffordern, die Veränderungen abzuspeichen" bewährt.
Projekte
Unter dem Reiter "Projekte" erfolgen keine Änderungen bis auf die Eintragung des "Aktives Quellcodeverwaltungs-Programm" mit Auswahl von "Microsoft Visual SourceSafe", sofern man SourceSafe oder ein anderes Versionsverwaltungswerkzeug einsetzen möchte. Dies muß natürlich zuvor als Client auf dem Arbeitsplatz installiert worden sein. Bei Projekten mit mehreren Beteiligten, hat sich eine Versionsverwaltung in der Praxis sehr bewährt, auch wenn das Arbeiten damit sicherlich gewöhnungsbedürftig ist und bei schlechten Netzwerkverbindungen oder großen Versionsbeständen etwas zäh sein kann. Manche Entwickler arbeiten sogar im Einzelplatzbetrieb mit einer Versionsverwaltung, um auf ältere Stände und Versionen zurückgreifen zu können, ohne permanent selbst Sicherungskopien anfertigen zu müssen.
FoxPro-Steuerelemente
|
Abbildung 10: Reiter Steuerelemente |
Unter dem Reiter "Steuerelemente" sind in der Optionsbox die "Bibliotheken visueller Klassen" einzutragen. Diese stehen dann in der Steuerelemente-Auswahlbox auf dem obersten Symbol zum Umschalten zur Verfügung. Folgende Libraries sollen mindestens eingetragen werden:
Bereich
|
Klassenbibliothek
|
GUI-Basisklassen
|
GUI_BASE.VCX |
GUI-Buttonklassen |
GUI_BUTTON.VCX |
Tabelle 3: Vorschlag Bibliotheken visueller Klassen
|
Damit hat man dann die wichtigsten Oberflächenelemente direkt bei der Maskenerstellung zur Verfügung. Diese Liste wird je nach Projektverlauf natürlich umfangreicher werden.
ActiveX-Steuerelemente
Alle eingesetzten ActiveX-Controls müssen auf dem Reiter "Steuerelemente" unter "Optionen" in Visual FoxPro in dem Bereich "ActiveX-Controls" angemeldet werden, so daß diese im Steuerelemente-Toolbar des Maskendesigners unter dem Stichwort ActiveX zur Verfügung stehen.
Vor dem Einsatz muß man ActiveX-Controls registrieren. Dies geht durch Ziehen der .OCX- bzw. .DLL-Datei auf das Programm REGSVR32.EXE oder wahlweise Anmelden dieser Anwendung als Default für die Dateiendungen .OCX- bzw. .DLL für Registrierung per Doppelklick. Für die ggf. verwendeten Standard-Steuerelemente (Treeview, ImageList und Listview von Microsoft) ist eine Registrierung nicht notwendig. Diese geschieht automatisch bei der Installation des Entwicklungstools (VFP).
Empfohlen werden von mir allgemein folgende ActiveX-Steuerelemente:
Name
|
Beschreibung
|
DBI
Treeview Control
|
Kostenpflichtiges
aber schnelleres Treeview, als das Microsoft Treeview-Control
|
Dynazip
Zip / UnZip Control
|
Funktionen
zum (De-) Komprimieren von Dateien
|
FoxFix
|
Bibliothek
für die Reparatur von defekten Tabellen und Memodateien
|
Microsoft
Agent Control
|
Für
die Einblendung eines Hilfe-Agenten
|
Microsoft
Rich Textbox Control
|
Für
die Eingabe von formatiertem Text durch den Anwender
(einfache Version)
|
TextControl
|
Ditto,
teure Version
|
Microsoft
SysInfo Control
|
Für
die Anzeige der Systeminformationen
|
Tabelle 4:
Vorschlag für ActiveX-Steuerelemente
|
Wenn diese Controls eingesetzt werden, muß natürlich auch für ein entsprechendes Setup / Installationsprogramm gesorgt werden. Im Setup-Wizard von Visual FoxPro kann man die entsprechenden Controls dann gleich beim Anwender mit registrieren lassen.
Konfigurationsdateien
Soweit die interaktiv einstellbaren Optionen. Darüberhinaus müssen leider noch weitere Einstellungen vorgenommen werden. Eine CONFIG.FPW-Datei muß angelegt werden für einige nur hier durchführbare Konfigurationsarbeiten. Folgende Eintragungen sollten in der Datei mindestens vorgenommen werden:
- TITLE = "Visual FoxPro Entwicklungsumgebung"
- CODEPAGE = AUTO
- MVCOUNT = 2048
Gerne stelle ich in einer CONFIG-Datei auch noch einige weitere Einstellungen ein, die allerdings bereits weiter oben in Reitern ebenfalls vorgenommen wurden:
KEYCOMP = WINDOWS
COLLATE = MACHINE
CENTURY = ON
DATE = GERMAN
Die Einstellungen für den zu verwendenden Vorder- und Hintergrundspeicher kann man mittlerweile programmatisch vornehmen und nicht mehr in einer Konfigurationsdatei.
Sonstige Hinweise
Mit dem OK-Button der Optionen-Maske werden die Einstellungen nur temporär gesetzt und gehen mit Beendigung von Visual FoxPro verloren. Nur wenn man den Button "Als Standardeinstellung verwenden" drückt, werden die gewählten Einstellungen tatsächlich in die Registry geschrieben.
Die Optionen können ansonsten auch als FoxPro-Quellcode exportiert werden. Ein Shift-Click auf den OK-Button des Optionen-Dialogs stellt sämtliche Einstellungen in das Befehlsfenster von Visual FoxPro. Dort können Sie dann markiert und über das Clipboard (auch zu finden in der Systemvariablen _CLIPTEXT) in ein eigenes Programm oder eine Konfigurationsdatei kopiert werden.
Sofern man nur einzelne Einstellungen in seine Anwendung übernehmen oder dort ändern möchte, noch der Hinweis, daß in den Hilfetexten zur Optionen-Maske für jede Einstellmöglichkeit auch immer der Verweis auf den entsprechenden SET-Befehl von Visual FoxPro zu finden ist.
|
Abbildung 11: Buttonleiste der Optionenmaske |
|