Session D-VFP7

Was ist neu in VFP 7.0 Eine Einführung

Christof Lange
The Foxpert!


Achtung, Gefahr.NET

Microsoft hat es getan mal wieder. Ende 1999 sah noch alles danach aus, als ob Ende 2000 die neue Version von Visual Studio erscheinen würde. Kein Wort von DOT-NET zu diesem Zeitpunkt, dafür jede Menge neuer und interessanter Features. Vorbei, vergessen, Vergangenheit. Im Laufe dieses Jahres entschloß sich Microsoft zu einem radikalen Kurswechsel in der Art, wie Applikationen entwickelt werden sollen: Die .NET Strategie war geboren, inklusive einer neuen Programmiersprache namens C#. Was hat das mit Visual FoxPro zu tun, werden Sie sich vielleicht fragen. Nun, Visual Studio 7.0 machte den Anfang in der langen Reihe von DOT-NET Tools und heißt nun Visual Studio.NET. Eine komplett neue Programmiersprache soll dazu gehören, zahlreiche neue Techniken, Konzepte, Tools. Alles das mußte aber entwickelt werden, so daß sich der Fertigstellungstermin von VisualStudio.NET immer weiter nach hinten verschob.

Das Ergebnis: Zum Zeitpunkt, an dem ich dieses Dokument schreibe, ist die aktuelle Version von VFP 7.0 eine Pre-Beta Version, eine sogenannte TechPreview. Da bedeutet nichts anderes, als daß noch viele bereits dokumentierte Funktionen fehlen bzw. fehlerhaft funktionieren, bereits implementierte Funktionen durchaus noch wieder entfernt werden können, aber auch, daß Microsoft durchaus noch in der Lage ist, neue Features hinzuzufügen. Daher sind alle nachfolgenden Ausführungen mit einer gewissen Vorsicht zu genießen.

I like 'em Fat Like This...

...dachte sich Microsoft, als es Zeit war, die Erweiterungen für VS.NET zu evaluieren. Alle diese Konzepte werden aller Voraussicht nach in den nächsten Monaten und Jahren vermutlich auf jeder Microsoft Veranstaltung extensiv behandelt werden. Daher möchte ich an dieser Stelle nur erwähnen, daß VFP zahlreiche neue Funktionen zur Unterstützung von DOT-NET, DNA, COM+, ASP+, WebServices, XML, IIS, MTS, MSMQ, VB, C++, C#, Office, Automation, COM, DCOM, SOAP, ROPE, HTML, etc. hat. In den folgenden Ausführungen werde ich mich aber auf die Funktionen beschränken, die in Visual FoxPro selbst neu sind. Diese Funktionen kann man grob in folgende Kategorien einteilen:

  • Spracherweiterungen,
  • IntelliSense und Editor-Erweiterungen
  • COM Kompatibilität
  • IDE-Erweiterungen und Tools

FoxSpeak

Der folgende Abschnitt listet in Kurzform die wichtigsten Änderungen an der Entwicklungssprache von Visual FoxPro. Da VFP immer noch in Entwicklung
Befehl, Funktion, Eigenschaft Bedeutung
#INCLUDE

Include-Dateien werden nun auch mit einem relativen Pfad im aktuellen Verzeichnis, in allen mit SET PATH eingestellten Verzeichnissen und relativ zum Zieldokument gesucht.

_CODESENSE

Enthält den Namen und Pfad auf FoxCode.APP.

_FOXCODE

Enthält den Namen und Pfad der FoxCode.DBF

_FOXTASK

Enthält die Tabelle mit den Aufgaben.

_OBJECTBROWSER

Enthält den Namen des Objektkataloges.

_TASKLIST

Enthält den Namen der Anwendung, welche die Aufgabenliste verwaltet.

_VFP.EditorOptions

Enthält die Optionen zum Steuern von IntelliSense und anderen Editor-Eigenschaften.

_VFP.LanguageOptions

Steuert einige Optionen in VFP, wie zum Beispiel, daß Variablen nicht verwendet werden können, wenn sie nicht explizit definiert wurden.

_VSBUILD

Enthält den Namen des Programmes, das aus Visual Studio vermutlich zum Kompilieren einer Anwendung aufgerufen wird.

Activate

Dieses Ereignis wird nun auch für den Projektmanager ausgelöst.

ADLLS()

Erstellt ein Array mit allen deklarierten API-Funktionen.

ALANGUAGE()

Füllt ein Array mit allen VFP-Schlüsselworten, Klassen, etc.

ALINES()

Kann nun beliebige Zeichen für das Zeilenende entgegennehmen, zum Beispiel: ALINES(laArray,"Eins,Zwei,Drei",",")
DISPLAY MEMORY LIKE laArray

AMEMBERS()

Kann nun auch Angaben über COM-Server zurückgeben, indem die Type-Library ausgelesen wird. Außerdem werden umfangreiche Filteroptionen angeboten, mit denen die zu ermittelnden Eigenschaften gezielt eingestellt werden können.

APROCINFO()

Füllt ein Array mit den Angaben, die im DocumentView angezeigt werden, also zum Beispiel alle Prozedurnamen in einer PRG-Datei.

ASCAN()

Kann endlich auch nur eine einzige Spalte durchsuchen. Außerdem kann über einen Flag-Parameter gesteuert werden, ob die Groß-/Kleinschreibungberücksichtigt werden, ob eine exakte Suche erfolgen und ob die Element-Nummer oder die Zeilennummer zurückgegeben werden soll.

ASESSIONS()

Erstellt ein Array mit allen existierenden Datasession-IDs.

ASORT()

Kann nun auch unabhängig von Groß-/Kleinschreibung sortieren.

ASTACKINFO()

Erstellt ein Array mit der kompletten Aufrufhierarchie, also Prozedur, Datei, Zeilennumer, etc. Im Prinzip handelt es sich um die Informationen, die auch durch SET COVERAGE in eine Datei geschrieben werden (mit Ausnahme der Ausführungsdauer).

ATAGINFO()

Erstellt ein Array mit allen Detailinformationen zum Index einer geöff­neten Tabelle.

BITAND()
BITOR()
BITXOR()

Unterstützen mehr als zwei Parameter, was verschachtelte Aufrufe diese Funktionen unnötig macht.

BLANK
CALCULATE
PACK
RECALL
SET FILTER

Alle diese Befehle unterstützen nun die IN Klausel zur Angabe eines Arbeitsbereiches.

BROWSE

Mit der neuen NOCAPTION Klausel können Sie VFP zwingen, die tatsächlichen Feldnamen anstelle der Caption aus der Datenbank anzuzeigen.

CLEAR DLLS

Kann nun auch die Deklaration einzelner Funktionen wieder löschen.

COMCLASSINFO()

Gibt die Registry-Informationen eines existierenden Objektes zurück.

CREATEOBJECTEX()

Durch die Angabe einer IID (Interface-ID) kann bei Objekten, die mehrere Schnittstellen unterstützen, ein bestimmtes Interface angefordert werden.

CURSORTOXML()

Konvertiert einen Cursor in einen XML-String.

Deactivate

Dieses Ereignis wird nun auch für den Projektmanager ausgelöst.

DECLARE DLL

Unterstützt einen neuen Datentyp OBJECT. Dabei handelt es sich um einen Zeiger auf ein IDispatch-Interface, der in VFP als COM-Objekt interpretiert wird.

DEFINE BAR

Die neuen Klauseln PICTURE, PICTRES, MRU und INVERT ermög­lichen es, Menüs zu erstellen, die zusammengeklappt sind und dann auf Wunsch expandieren. Außerdem kann jedem Menüpunkt ein Bild zugeordnet werden.

DEFINE CLASS

Ermöglicht die Angabe von Datentypen für die Type-Library von COM-Servern. Desweiteren kann eine bestimmte Schnittstelle mittels IMPLEMENTS implementiert werden. Dies ist zum Beispiel notwendig, um VFP-Komponenten in eine MSMQ/MTS Umgebung zu integrieren. Außerdem kann die Klassenbibliothek angegeben werden, von der einer Klasse abgeleitet werden soll, so daß auch bei programmatischen Definitionen nicht mittels SET CLASSLIB/PROCEDURE TO die Biblio­thek geladen werden muß.

DISPLAYPATH()

Verkürzt einen Pfad, wenn er eine angegebene Länge überschreitet und füllt den mittleren Teil mit Punkten, z.B. "C:\Windows\...\Test.DLL".

EDITSOURCE()

Kann jeden beliebigen Dateinamen mit Angaben zur Prozedur und Zeilennummer entgegennehmen und öffnet diese Datei mit dem jeweiligen Editor an der angegebenen Position.

EVENTHANDLER()

Funktion aus dem VFPCOM.Util. Bindet ein VFP-Objekt als Ereignis­be­handlung an ein COM-Objekt. Damit können Sie beispielsweise reagieren, wenn der Anwender ein Word-Dokument schließt.

EXECSCRIPT()

Erhält als Parameter beliebigen VFP Quellcode, zum Beispiel aus einem Memofeld, führt diesen aus und liefert das Ergebnis zurück. Intern wird ein temporäres PRG erstellt und mittels COMPILE kompiliert.

GETDIR()

Zeigt nun einen Standard-Windows Dialog an, in dem auch die Netzwerkumgebung angezeigt wird und es möglich ist, neue Verzeichnisse anzulegen.

GETFONT()

Es kann nun auch eine sprachspezifische Variante eines Zeichensatzes angegeben werden bzw. vom Anwender ausgewählt werden.

GETINTERFACE()

Es kann eine Referenz auf ein anderes Interface eines bestehenden COM-Objektes ermittelt werden.

GETOBJECT()

Unterstützt nun jedes Objekt, daß das COM Interface IMoniker unterstützt. Dies ist insbesondere für ADSI, IIS, etc. interessant.

GETWORDCOUNT()

Zählt die Worte in einem String.

GETWORDNUM()

Liefert ein bestimmtes Wort aus einem String zurück.

HighlightBackColor

Definiert die Hintergrundfarbe der aktiven Zeile in einem Grid

HighlightForeColor

Definiert die Vordergrundfarbe der aktiven Zeile eines Grids.

HWND

Diese Eigenschaft gibt den Windows Handle eines Formulares oder Toolbars zurück.

INPUTBOX()

Ähnlich wie MESSAGEBOX(), allerdings kann der Anwender einen Wert eingeben. Es wird der View-Parameter Dialog verwendet.

LOCAL
PRIVATE
LPARAMETER

Mit der AS-Klausel kann optional der Typ einer jeden Variablen angegeben werden. Dieser Typ wird sowohl für IntelliSense als auch für die Type-Library einer COM-Komponente verwendet, nicht aber zur Laufzeit geprüft.

MESSAGEBOX()

Unterstützt nun beliebige Datentypen, die automatisch in einen String konvertiert werden. Außerdem kann eine Zeit angegeben werden, nach der die Dialogbox automatisch geschlossen wird.

MODIFY COMMAND
MODIFY VIEW
MODIFY PROCEDURE

Die Endung .H wird nun ebenfalls im Dateiauswahldialog mit angezeigt. Außerdem können diese Designer nun programmatisch mit der NOWAIT Klausel gestartet werden.

MouseEnter()

Dieses Ereignis feuert, wenn die Maus in ein Objekt hineinbewegt wird.

MouseLeave()

Dieses Ereignis feuert, wenn die Maus aus einem Objekt heraus bewegt wird.

Objects[]

Die folgenden Objekte haben nun ebenfalls dieses Array: CommandGroup, DataEnvironment, Grid, PageFrame, OptionGroup

OS()

Gibt nun 11 unterschiedliche Informationen über das Betriebssystem zurück.

PictAlignment

Gibt an, wie ein Bild auf einem Button positioniert wird.

QUARTER()

Liefert das Quartal eines Datumausdruckes zurück.

QueryNewFile()

Dieses Ereignis feuert im ProjectHook, bevor eine neue Datei dem Projekt hinzugefügt wird.

RETURN

Kann nun auch ein Array zurückgeben. Dieses muß mit @ gekennzeichnet werden.

RowColChange

Diese Eigenschaft des Grids gibt an, ob beim Auslösen ders After/BeforeRowColChange Ereignisses ein Zeilen bzw. ein Spalten­wechsel erfolgte.

ShowInTaskbar

Gibt bei einem Formular der obersten Ebene (Top-Level Form) an, ob dieses in der Startleiste angezeigt wird, oder nicht.

SELECT - SQL

Mit der INTO CURSOR ... READWRITE Option kann ein Cursor erstellt werden, der nicht schreibgeschützt ist.

SET REPROCESS

Es kann beeinflußt werden, wie VFP die Systemdateien sperrt (FoxUser, FoxCode, VCX-Bibliotheken, etc.).

SET("TEXTMERGE")

Gibt weitere Werte zurück, die durch SET TEXTMERGE und TEXT...ENDTEXT eingestellt werden können.

SpecialEffect

Die neue Option HotTracking zeigt Controls ähnlich wie bei Office und dem Internet Explorer an. Wenn das Control keinen Fokus hat, dann wird es ohne Rahmen angezeigt, wenn die Maus nicht über dem Objekt ist, und mit einem dünnen Rahmen, wenn sie über dem Objekt ist. Hat das Objekt den Fokus, dann wird es ohne Maus mit einem dünnen Rahmen, mit Maus mit einem 3D-Rahmen angezeigt.

STREXTRACT()

Liefert einen String zwischen zwei Begrenzungsstrings. Dies kann insbesondere für das Parsen von HTML-Text verwendet werden.

STRTRAN()

Unterstützt optional auch eine nicht-exakte und eine Case-Insenitive Suche.

SYS(2336)

Ermöglicht die Kontrolle über kritische Sektionen (Critical Sections) in einer MTDLL. Ist seit VFP6/SP3 verfügbar.

SYS(2800)

Aktiviert/Deaktiviert die Eingabehilfen. Bereits seit VFP6/SP4 verfügbar.

SYS(3054)

Neue Parameter für weitere Informationen (Filter-Statistik). Unterstützt die Rückgabe der Ausgabe in eine Variable, was sich sehr gut zum Testen einsetzen läßt.

SYS(3095)

Gibt den IDispatch-Zeiger als Speicheradresse für ein beliebiges COM-Objekt zurück. Bereits seit VFP6/SP4 verfügbar.

SYS(3096)-SYS(3098)

Undokumentiert. Ruft die Methoden des IUnknown-Interfaces auf. Bereits seit VFP6/SP4 verfügbar, aber dort nicht vollständig implementiert.

TEXT…ENDTEXT
SET TEXTMERGE

Beide Befehle unterstützen die Ausgabe auf dem Bildschirm, in eine Datei und in eine Variable. Die letzen beiden Optionen können auch Texte anfügen. Bei beiden Befehlen wird TEXTMERGE unterstützt, zum Beispiel: TEXT TO lcText TEXTMERGE NOSHOW
Heute ist: <<DATE()>>
ENDTEXT
m.lcText

TEXTMERGE()

Wie TEXT...ENDTEXT, liefert das Ergebnis aber direkt zurück.

USE

Für Remote-Ansichten kann ein Verbindungsstring angegeben werden, so daß keine Connection definiert werden muß.

VisualEffect

Ermöglicht es, CommandButton hervorgehoben, vertieft und ohne Rand darzustellen.

WDOCKABLE()

Liefert .T., wenn ein Fenster gedockt werden kann.

WordWrap

Auch Header haben nun diese Eigenschaft.

WriteMethod()

Über einen optionalen Parameter kann eine Methode angelegt werden, wenn sie nicht bereits existiert. Steht nur zur Entwurfszeit zur Verfügung.

XMLUPDATE()

Liefert einen XML-String, der nur die Änderungen enthält, die in einer gebufferten Tabelle vorgenommen wurden.

XMLTABLEUPDATE()

Aktualisiert einen Cursor oder eine Tabelle anhand eines Strings, wie er vom XMLUPDATE() erzeugt wird.

XMLTOCURSOR()

Erstellt einen Cursor aus einem XML-String.

dFPUG c/o ISYS GmbH

Frankfurter Str. 21 b

D-61476 Kronberg

per Fax an:

+49-6173-950904

oder per e-Mail an:

redaktion@dfpug.de


© Texte, Grafiken und Inhalt: ISYS GmbH