|
Abbildung 3. Erhalten eines Handle auf ein Formular - Dieses Formular übergibt sein Handle von Windows der API-Funktion SetWindowRgn, um seine Form in einen Kreis zu ändern.
Beachten Sie im Zusammenhang mit den anderen Änderungen an _SCREEN, dass sowohl _VFP als auch _SCREEN über die Eigenschaft hWnd verfügen, dass diese aber unterschiedliche Werte enthalten. Andere Erweiterungen der BenutzeroberflächeNicht jede Interaktion geschieht über Formulare und Kontrollelemente. Es gibt eine Vielzahl anderer Möglichkeiten, mit dem Anwender zu kommunizieren, und einige der Änderungen von VFP behandeln diese Lösungen. Die Menüs von Visual FoxPro wurden erweitert, um die neuesten Techniken der Interaktion zu unterstützen. Der Befehl DEFINE BAR enthält einige neue Klauseln. PICTURE und PICTRES geben Ihnen die Möglichkeit, den Menüpunkten Bilder hinzuzufügen. Mit PICTURE geben Sie eine Datei einschließlich Pfad an. Mit PICTRES legen Sie die Nummer eines Menüs im Systemmenü von FoxPro fest und die dazugehörende Grafik wird mit diesem Menü benutzt. Um Grafiken nutzen zu können, muss das Popup, das das Menü enthält, mit der Klausel MARGIN definiert werden. INVERT ermöglicht Ihnen, ein Menü mit einem helleren Hintergrund und als ob es angeklickt wäre darzustellen. Auf diese Art werden in Office-Anwendungen die seltener genutzten Menüpunkte dargestellt, wenn sie alle erscheinen. Die letzte neue Klausel ist die komplexeste, da Sie zunächst Code entwickeln müssen, damit sie sinnvoll arbeitet. MRU steht für „most recently used“. Wenn Sie diese Klausel einem Menüpunkt hinzufügen, erscheint er als hervorgehobenes Zeichen, das nach unten zeigt und dadurch mitteilt, dass das Menü erweitert werden kann. Wenn der Anwender die Maus über diesen Punkt zieht oder darauf klickt können Sie darauf mit dem Hinzufügen weiterer Menüpunkte (oder mit jedem anderen Code, den Sie ausführen lassen wollen) antworten. Vermutlich werden die hinzugefügten Menüpunkte farblich umgekehrt dargestellt. Das folgende Programm erstellt innerhalb des Systemmenüs ein neues Menü mit drei Einträgen. Den ersten beiden sind Bilder zugeordnet. Der dritte Eintrag ist ein MRU. Wenn der Anwender das MRU auswählt wird ein separates Programm aufgerufen, in dem das Popup geändert wird. Zunächt das Programm, das das Menü und das Popup erstellt.
Hier nun ChgMRUPop, das aufgerufen wird, wenn der Anwender das MRU auswählt. Es Ändert das Popup, reaktiviert es ,und nachdem der Anwender seine Wahl getroffen hat, setzt er das Menü wieder in seinen Originalstatus:
Zum Schluss noch das Programm Release, das das Menü aufräumt, wenn der Anwender die MRU-Demo beendet.
Abbildung 4 zeigt das Menü in der Art, in der es zunächst erscheint, während Abbildung 5 das erweiterte Menü enthält.
Abbildung 4. Menüerweiterungen - Dieses Popup zeigt sowohl Bilder für die Menüpunkte als auch ein MRU-Menü.
Abbildung 5. Expansion des Menüs - Sie können Code schreiben, der auf den MRU reagiert, um dem Menü die zusätzlichen Einträge hinzuzufügen. Die neue Klausel INVERT bietet die Möglichkeit, Menüpunkte zu entwickeln, die zurückgesetzt und abgeblendet sind. Beide Arten der Bilder können im Menüdesigner angegeben werden. Sowohl die Optionen MRU als auch INVERT können nicht direkt im Designer abgehandelt werden. Es ist aber möglich, den Menüdesigner auszutricksen, indem Sie diese Optionen in die Klausel SKIP FOR aufnehmen. VFP bietet durch die Funktion MessageBox() bereits seit Langem eine Möglichkeit, dem Anwender eine Nachricht im Stil von Windows anzuzeigen. In dieser Version hat die Funktion noch einen Parameter Timeout sowie die Möglichkeit, die Nachricht automatisch in eine Zeichenfolge umzuwandeln, erhalten. Das bedeutet, dass Sie der Funktion jetzt auch ein Datum oder einen numerischen Wert übergeben können, ohne ihn vorher durch TRANSFORM() oder eine andere Funktion umzuwandeln. Natürlich ist es beim Erstellen komplexer Nachrichten mit vielen unterschiedlichen Datentypen nach wie vor erforderlich, alle Daten zunächst in Zeichenfolgen umzuwandeln, bevor man sie verknüpft. Der neue Parameter Timeout hat zur Folge, dass Sie eine Messagebox anzeigen können, bis der Anwender sie wegklickt oder bis die Zeit abgelaufen ist. Die Zeitspanne wird in Millisekunden gemessen. Wenn die Box durch Ablauf der Zeit freigegeben wird gibt die Funktion –1 zurück. Hier ein Beispiel:
Diese Nachricht wird für zwei Sekunden angezeigt, wenn der Anwender vorher nicht auf OK klickt. Abbildung 6 zeigt den Dialog.
Abbildung 6. Messagebox mit Timeout. Die Funktion MessageBox() verfügt über einen neuen Parameter Timeout, der nach einer angegebenen Zeit den Dialog beendet. Eine neue Funktion, die mit MessageBox() verwandt ist, behandelt Situationen, in denen Sie lediglich eine einzelne Eingabe vom Anwender erwarten und die Implementierung eines vollständigen Formulars übertrieben scheint. Die Funktion heißt InputBox() und bietet Ihnen Zugriff auf den gleichen Dialog, den VFP benutzt, um Ansichtenparameter zu erhalten. InputBox() akzeptiert die folgenden vier Parameter:
Ein Beispiel:
Abbildung 7 zeigt den daraus resultierenden Dialog. Wie die Syntax zeigt, liefert die Funktion immer einen Zeichenwert zurück. Abbildung 7. Einfache Eingabe - Die neue Funktion InputBox() macht es einfach, einen einzelnen Eingabewert abzufragen. Das Formular in Abbildung 1 enthält Schaltflächen, die die Änderungen in MessageBox() und eine Schaltfläche, die InputBox() demonstriert. Zwei Funktionen zur Anzeige von Systemdialogen wurden geändert. GetFont() besitzt jetzt die Fähigkeit, den gewählten Zeichensatz anzuzeigen. Um keinen bestehenden Code ändern zu müssen, enthält die Funktion nur dann die Zahl des Zeichensatzes, wenn ihr der optionale Parameter nCharacterSet übergeben wurde. Wurde der Parameter übergeben, wird das Feld im Fontdialog aktiviert. Abbildung 8 zeigt Ihnen den Dialog, der durch folgenden Aufruf angezeigt wird:
Abbildung 8. Fontauswahl - Der neue Parameter nCharacterSet von GetFont() aktiviert das Dropdown-Feld, so dass der Anwender den passenden Zeichenatz wählen kann. Wenn der Anwender in Abbildung 8 auf OK klickt, sieht der Rückgabewert folgendermaßen aus:
Die Änderungen in der Funktion GETDIR() sind noch wichtiger. Zunächst benutzt die Funktion unter gewissen Umständen eine Baumansicht, um das Laufwerk und die Verzeichnishierarchie anzuzeigen statt der untereinander angezeigten Ordnersymbole in VFP 6.0 und in früheren Versionen. Außerdem wurden noch drei neue Parameter hinzugefügt. Wird einer dieser Parameter übergeben, wird die Baumansicht im Dialog verwendet. Die neue Syntax sieht folgendermaßen aus:
Wie der Name bereits vermuten lässt, können Sie mit dem neuen Parameter cDialogCaption angeben, welcher Text in der Titelleiste des Dialogs erscheinen soll. Sie können im Parameter nFlags 0 oder mehrere additive Flags angeben. Sie arbeiten wie die Flags für ASCAN() – wählen Sie eines aus und fügen sie zusammen, um den Parameter nFlags zu erhalten. Tabelle 3 zeigt die Werte der Flags – einige davon sind nur in neueren Versionen von Windows sinnvoll einzusetzen. Der Parameter lRootOnly gibt an, ob die Baumansicht im Hauptverzeichnis des angegebenen Laufwerks (wenn er auf .T. steht) aufhören soll oder ob alle Verzeichnisse angezeigt werden (.F., dies ist der Vorgabewert). Tabelle 3. Die Flags von GETDIR() – Die Auswahl eines Verzeichnisses ist besser konfigurierbar als je zuvor. Übergeben Sie GETDIR() diese Werte gemeinsam als vierten Parameter. Einige dieser Werte machen es möglich, mit GETDIR() einen Drucker oder einen anderen Rechner statt eines Verzeichnisses auszuwählen. |