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