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.
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.
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
? CAST(oStdFont.Size AS I) ? CAST(oStdFont.Size AS N) ? CAST(oStdFont.Size AS N(10,2))
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
Die Methode
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: