Windows Standard Font

Windows stellt uns ein COM-Object "Standard Font" (StdFont, CLSID {0BE35203-8F91-11CE-9DE3-00AA004BB851}) zur Vefügung, das in der Systemdatei oleaut32.dll implementiert ist und leicht in FoxPro instanziiert werden kann. Dieses COM-Objekt repräsentiert die Windows Standardschriftart, wie sie z.B. auch in Systemmenüs oder Dialogen verwendet wird. Zumeist ist sie auf "MS Sans Serif",8 voreingestellt.

FoxPro Object Browser

Um die COM-Interfaces mit den Eigenschaften, Methoden und Ereignissen genauer untersuchen zu können, bietet sich der FoxPro Object Browser an. Sie können ihn aus dem Menü Tools starten. Klicken Sie anschließend auf das Symbol Open Type Library links in der Symbolleiste. Im daraufhin erscheinenden Dialog "Open" aktivieren Sie bitte die Registerkarte COM Libraries und klicken Sie dort auf die Schaltfläche Browse.... Es erscheint der Dialog "Datei öffnen", wo Sie bitte als Dateityp *.tlb auswählen und die Datei stdole2.tlb im Windows systemverzeichnis (z.B. C:\Windows\system32) öffnen.

Verwendung in FoxPro

Sie können das Objekt ganz simpel in FoxPro instaziieren und auf seine Eigenschaften zugreifen:

oStdFont = CREATEOBJECT("StdFont")
? oStdFont.Name
? oStdFont.Bold

*-- Achtung: .Size ist vom Typ Currency!
? MTON(oStdFont.Size)

Achtung: Wie in der obigen Abbildung des Object Browsers zu sehen ist, wurde bei der Deklaration des COM-Interfaces ein Datentyp verwendet, der nicht ein rein numerischer Typ ist, sondern interesanterweise von FoxPro als Währung (Currency) interpretiert wird. Im einfachsten Fall können Sie die Funktion MTON() verwenden. Alternativ dazu können Sie ab Visual FoxPro 9.0 auch CAST verwenden und in Integer oder Numerisch "casten" (umwandeln):

? CAST(oStdFont.Size AS I)
? CAST(oStdFont.Size AS N)
? CAST(oStdFont.Size AS N(10,2))

Beispiel-Projekt

Sie können das folgende Beispiel-Projekt herunterladen, in dem die Verwendung des COM-Objekts StdFont demonstriert wird.

 stdfont.zip (9 kB)

Kernstück dieses kleinen Projekts ist die Klasse set_stdfont in der Klassenbibliothek stdfont.vcx.

Zentrales Element der Klasse set_stdfont ist die Eigenschaft oStdFont, die wir im Init-Ereignis mit CREATEOBJECT auf eine Objekt-Instanz von StdFont setzen. Um die Eigenschaften dieses Objekts direkt auslesen zu können, ohne uns weiter um die Konvertierung des Datentyps kümmern zu müssen, habe ich folgende Methoden hinzugefügt:

Im Methoden Code von GetFontSize() wird dabei abhängig von der FoxPro Version entweder MTON() oder CAST() verwendet.

Die Methode Apply() erwartet einen optionalen Parameter vom Typ "Objekt" und weist diesem Objekt und all seinen Unter-Objekten (sofern es sich um einen Container handelt) die Schrift-Eigenschaften von StdFont zu. Wird dieser Parameter nicht angegeben, versucht die Methode Apply() das selbe mit seinem Parent, falls es sich in einem Container befindet.

Um die Handhabung besonders einfach zu machen, habe ich noch eine Eigenschaft AutoApply vom Datentyp Logisch hinzugefügt, die standardmäßig auf .T. gesetzt ist. Im Init-Ereignis wird AutoApply ausgewertet. Ist AutoApply .T., dann wird über BINDEVENT im Init-Ereignis des Containers, der dieses Objekt enthält, die Apply Methode aufgerufen.

Damit ergeben sich für die Klasse folgende Anwendungen:

Aus einem Programm heraus instanziieren
Wenn Sie mit NEWOBJECT() (oder SET CLASSLIB TO <cFileName> und CREATEOBJECT()) ein Objekt erstellen, hat dieses keinen Parent und es wird keine automatische Aktion gesetzt, unabhängig von AutoApply. Sie können die Methode Apply() aufrufen und die Standard Schriftart einem beliebigen visuellen Objekt zuweisen. Im Beispiel simple.prg wird das anhand des FoxPro Hauptfensters gezeigt.
Objekt auf einem Formular, AutoApply auf .T.
Wenn Sie z.B. mit Drag-and-Drop das set_stdfont Objekt auf ein Formular ziehen, werden alle Steuerelemnte, die sich auf dem Formular befinden, in ihrer Schriftart auf die Standardschrift gesetzt. Siehe dazu das Beispiel-Formular simple.scx.
Objekt auf einem Formular, AutoApply auf .F.
Wenn Sie dem Anwender gestatten, die Schriftart für seine Formulare und Steuerelemente selbst zu verändern, kann es sinnvoll sein, einen Menüpunkt "Standard wieder herstellen" vorzusehen. Rufen Sie dazu einfach Apply() auf. Siehe dazu das Beispiel-Formular demo.scx.

 
 

Zurück zum Archiv