2. Verwendung von Schriften^2.1 ÜberblickR-BASIC kann alle im GEOS-System installierten Schriften (Fonts) und Schriftstile verwenden.FontID'sGEOS (und auch R-BASIC) identifiziert Schriften über eine Font-Identifiaktions-Nummer, die FontID. Näheres dazu erfahren Sie im Abschnitt 2.2Die Font-ModiUm die Fähigkeiten von PC/GEOS voll ausreizen zu können, kennt R-BASIC drei Arten von Schriften (Font-Modi):
TextstileDie Eigenschaften der Schrift (Textstile: fett, kursiv, unterstrichen usw.) werden in R-BASIC über die Systemvariable printFont.style eingestellt. Das Feld style ist das einzige "öffentliche" Feld der printFont-Variablen und wird im Abschnitt 2.6 beschrieben. Alle anderen Felder werden automatisch beim Einstellen des Font-Modus gesetzt.Die printFont-VariableDie Systemvariable printFont ist der Kern der R-BASIC-Schriftverwaltung. Zuweisungen zu dieser Variablen oder einem ihrer Felder bestimmen die von R-BASIC verwendete Schrift und ihre Eigenschaften. Fortgeschrittene Programmierer können die printFont - Variable auch direkt modifizieren. Die notwendigen Informationen dafür finden Sie im Abschnitt 2.7.^2.2 Zugriff auf GEOS-FontsPC/GEOS identifiziert Schriften (genannt: Fonts) über eine sogenannte Font-ID-Nummer. Diese Font-ID ist an viele Font-Routinen zu übergeben, z.B. zum Einstellen des Font-Modus (Abschnitte 2.3, 2.4, 2.5). In R-BASIC sind einige Fonts, die auf allen GEOS-Systemen installiert sind, namentlich vordefiniert.Tabelle: Namentlich verfügbare Font-ID's in R-BASIC
(1) Hinweis: Die Fonts mit den ID's FID_BISON, FID_UNIVERSITY und FID_BERKELEY sind Bitmap-Fonts, die sich nicht zur Ausgabe auf den Drucker eignen. Einige weitere Font-ID's ohne vordefinierten Namen in R-BASIC: 1563 LED (Bitmap-Font) 53006 Fat Fracture 5632 Superb 4612 Sather Gothic 5123 Shattuck AvenueWeitere Font-ID's bekommen Sie aus dem PC/GEOS-SDK oder mit dem FontExplorer, der über das Menü "Extras"-"Tools" erreichbar ist. Um Informationen über die im System installierten Fonts zu erhalten, gibt es die Routinen FontAvail, FontFind, FontGetName$ und FontGetSysInfo, die im Folgenden beschrieben werden. FontAvailFontAvail prüft, ab ein Font mit der übergeben fontID (Font-Identifikations-Nummer) im System installiert ist. Es liefert TRUE (-1, Font ist installiert) oder FALSE (0, Font ist nicht installiert).Syntax: <variable> = FontAvail ( fontID ) Parameter: <variable> ist eine numerische Variable fontID: Identifikationsnummer des Fonts
Beispiele: |
found = FontAvail ( FID_ROMAN ) found = FontAvail ( 53267 ) ' Auf Animal-Font testen |
FontFindFontFind prüft, ob ein Font mit dem übergeben Namen im System installiert ist. Es liefert die Font-ID-Nummer oder 0 (Font ist nicht installiert).Syntax: <variable> = FontFind ( "FontName" ) Parameter: <variable> ist eine numerische Variable "FontName": Stringausdruck, Fontname Beispiel: |
fontID = FontFind ( "Cartoon" ) |
FontGetName$FontGetName$ liefert den GEOS-Namen des Fonts mit der übergeben fontID. Ist der Font nicht installiert, liefert es eine Leerstring.Syntax: <variable> = FontGetName$ ( fontID ) Parameter: <variable> ist eine Stringvariable fontID: Identifikationsnummer des Fonts Beispiel: |
nameOfRoman$ = FontGetName$ ( FID_ROMAN ) |
FontGetSysInfoFontGetSysInfo liefert Informationen über die Fonts, die GEOS für bestimmte Zwecke verwendet, indem es die zugehörigen INI-Einträge ausliest.Syntax: <variable> = FontGetSysInfo ( x ) Parameter: <variable> ist eine numerische Variable x: Welche Info wird angefordert. Siehe Tabelle. Beispiel: |
fontSize = FontGetSysInfo ( 7 ) |
|
Tabelle: Informationen, die FontGetSysInfo liefert:
2.3 Der Fixed-Font-ModusDer Fixed-Font-Modus ist die Standardeinstellung von R-BASIC. Jedes Zeichen hat eine feste Breite und eine feste Höhe. R-BASIC kennt und verwaltet die Position jedes einzelnen Zeichens. R-BASIC stehen 5 verschiedene Fonts in jeweils 5 verschiedenen Größen zur Verfügung. Es stehen einige Textstile zur Verfügung. Die Einstellung der Textstile erfolgt über das Feld printFont.style. Beachten Sie, dass die Textstile sog. Bit-Flags sind (d.h. bestimmte Bits haben bestimmte Bedeutung). Details dazu finden Sei im Abschnitt 2.6.FontSetFixedDie Anweisung FontSetFixed versetzt R-BASIC in den Fixed-Font Modus. Dabei wird intern die Systemvariable printFont mit den passenden Werten belegt.
Beispiel 1: |
FontSetFixed (FID_UNIVERSITY, 18) ' Klammern sind OK |
| Beispiel 2: |
' Doppelten Zeilenabstand verwenden (vgl. Tabelle unten) FontSetFixed FID_UNIVERSITY, 18, 48 |
Hinweise:
|
PAPER BG_TRANSPARENT |
Hinweise für fortgeschrittene Programmierer:
2.4 Der GEOS-Font-ModusIm GEOS-Font-Modus übernimmt das GEOS-System die Ausgabe des Textes. Es stehen alle im System installierten Schriften und alle Textstile (Fett, Kursiv, hochgestellt usw.) zur Verfügung. Die Einstellung der Textstile erfolgt über das Feld printFont.style (siehe Abschnitt 2.6). Beachten Sie, dass die Textstile sog. Bit-Flags sind (d.h. bestimmte Bits haben bestimmte Bedeutung).Da die meisten GEOS-Fonts sogenannte proportional-Fonts sind, d.h. ein 'm' ist viel breiter als ein 'l', kennt R-BASIC die Position der einzelnen Buchstaben bei einer Textausgabe nicht. Die Kommandos WINDOW und LOCATE arbeiten deswegen mit einer "durchschnittlichen" Buchstabenbreite und viele Print-Steuercodes arbeiten nicht oder nur eingeschränkt. R-BASIC hat keine Kontrolle über die genaue Position der einzelnen Zeichen innerhalb eines ausgegebenen Textstrings. Verwenden Sie bei Bedarf den Befehl PRINT atXY(x,y); "Text..." um die Textausgaben präzise zu positionieren. FontSetGEOSDie Anweisung FontSetGEOS versetzt R-BASIC in den GEOS-Font Modus. Dabei wird intern die Systemvariable printFont mit den passenden Werten belegt.
Beispiel 1: |
FontSetGEOS FID_SYMBOLPS, 18 |
| Beispiel 2 |
' Zeilenabstand = 150% der Schriftgröße FontSetGEOS(FID_ROMAN, 14, 1.5 * 14) ' Klammern sind erlaubt |
Hinweise:
|
PAPER BG_TRANSPARENT |
Hinweise für fortgeschrittene Programmierer:
^2.5 Der Block-Font-Modus (Block-Grafik-Modus)Im Block-Font-Modus wird statt eines GEOS-Fonts für jeden Buchstaben eine kleine, quadratische Grafik ausgegeben (z.B. 16x16 Pixel). Damit entstehen die typischen "Computer-Schriften" und es ist möglich, sehr einfach grafische Elemente auf den Bildschirm zu bringen. Es stehen keinerlei Textstile zur Verfügung.In diesem Abschnitt finden Sie eine kurze Übersicht zum Thema Block-Font-Modus. Eine ausführliche Beschreibung der Möglichkeiten finden Sie im Kapitel 3. FontSetBlockDie Anweisung FontSetBlock versetzt R-BASIC in den Blockgrafik-Modus. Dabei wird intern die Systemvariable printFont mit den passenden Werten belegt. Falls Sie FontSetBlock erstmalig im Programm verwenden oder eine andere als die aktuell gesetzte Zeichengröße verwenden wird der Zeichengenerator-Speicher gelöscht, d.h. alle Grafikzeichen sind leer. Der Parameter "colored" bestimmt, ob die Grafikzeichen in diesem Fall als monochrom (einfarbig, default) oder als farbig (256 Farben) behandelt werden sollen.
Beispiel: |
FontSetBlock 16, 24 |
|
Hinweise:
^2.6 TextstileR-BASIC kann verschiedene Textstile (wie unterstrichen, fett, kursiv usw.) verwenden. Welcher Stil verwendet werden soll, wird über die Systemvariable printFont.style bestimmt. Je nach Font-Modus stehen unterschiedliche Stile zur Verfügung. Im Block-Font-Modus stehen keine Stile zur Verfügung.Beispiel: |
printFont.style = TS_BOLD |
|
Für Hinweise und weitere Beispiele: siehe weiter unten.
Achtung! Die hier dargestellten Zusammenhänge beziehen sich auf die Textausgabe mit dem PRINT Kommando. Textobjekte (Memo, InputLine) haben ihren eigenen Weg Textstile zu verwenden. Das ist im Objekt-Handbuch, Kapitel 4.10 (Text-Objekte) erklärt.
(A) Wird von R-BASIC realisiert, keine Systemfunktion. Hinweise:
|
printFont.style = printFont.style OR TS_UNDERLINE |
|
Der Stil "unterstrichen" wird gesetzt, egal ob er bereits gesetzt war oder nicht.
Man löscht einen Stil mit AND NOT: |
printFont.style = printFont.style AND NOT TS_UNDERLINE |
|
Es ist kein Fehler, wenn der Stil gar nicht gesetzt war.
Man fragt einen Stil mit AND ab: |
IF printFont.style AND TS_UNDERLINE THEN ... |
|
Man überschreibt alte Stile mit neuen so: |
printFont.style = TS_ITALIC OR TS_UNDERLINE |
|
Beide Stile werden gesetzt, printFont.style erhält den Wert 17.
Sie sollten Addition (+) von Stilen vermeiden. Je nachdem, welche Stile schon gesetzt sind, können die Ergebnisse unerwartet sein. Beispiel: Das Setzen von Stilen mit + ist kein Problem: |
printFont.style = TS_ITALIC + TS_UNDERLINE |
|
printFont.style ist hat jetzt den Wert 17.
Schreibt man jetzt |
printFont.style = printFont.style + TS_ITALIC |
|
so erhält printFont.style den Wert 17 + 16 = 33. Das entspricht aber der Stilkombination TS_UNDERLINE und TS_BOLD.
Komplexes Beispiel: Fetten gedruckten Text nicht mehr fett drucken (TS_BOLD zurücksetzen) und unterstrichen (TS_UNDERLINE) ausgeben: |
printFont.style = (printFont.style OR TS_UNDERLINE) AND (NOT TS_BOLD) |
Die Klammern sind notwendig, um dem Compiler mitzuteilen, in welcher Reihenfolge die logischen Operatoren abgearbeitet werden sollen.
^2.7 Direkter Zugriff auf die printFont SystemvariableAchtung!Dieser Abschnitt richtet sich an erfahrene oder ambitionierte Programmierer. Die Kenntnis oder das Verständnis der hier dargestellten Zusammenhänge ist für die meisten Anwendungsfälle von Schriften nicht erforderlich. Lediglich das Feld printFont.style enthält "öffentliche" Informationen. Ändern Sie die anderen Felder, könnten zunächst unerwartete Ergebnisse auftreten. Üblicherweise verwendet man eine der Befehle FontSetFixed, FontSetGEOS und FontSetBlock, welche die Systemvariable printFont mit einer stimmigen printFont-Struktur belegen.
Die Systemvariable printFont ist folgendermaßen definiert: |
STRUCT PrintFontStruct type as word fontID as word fontSize as word charWidth as word lineHeight as word style as word ' öffentlich base as word END STRUCT DIM printFont AS PrintFontStruct |
Bedeutung der einzelnen Felder
Tipps und Beispiele für FortgeschritteneSie können selbst Variablen vom Typ PrintFontStruct definieren und verwenden. Hier können Sie veränderte Varianten der printFont-Variablen zwischenspeichern und später wieder verwenden. Auswirkungen auf den PRINT-Befehl hat aber nur das Setzen des Systemvariablen printFont.Beispiel: modifizierte printFont Variable speichern |
DIM newFont AS PrintFontStruct FontSetGEOS(FID_SANS, 12) ' belegt printFont newFont = printFont ' Kopie erstellen newFont.style = TS_STRIKE_THRU ' noch wirkungslos FontSetGEOS(FID_ROMAN, 20) ' belegt printFont printFont.style = TS_BOLD Print "Ich bin FETT, URW Roman, 20 Point" printFont = newFont Print "Ich bin Durchgestrichen, URW Sans, 12 Point" |
|
Sie können praktisch jeden GEOS-Font im Modus FT_FIXED einsetzen. Die nötigen Werte für charWidth, lineHeight und base erfordern aber Experimentieren. Denke Sie daran, dass der Buchstabe W und das Zeichen '_' mit TS_BOLD in das Raster passen sollte.
Beispiel: URW Roman als Fixed Font |
FontSetFixed(FID_SANS, 14)
' gültige Startwerte für printFont setzen
printFont.fontID = FID_ROMAN
printFont.charWidth = <ausprobieren>
printFont.lineHeight = <ausprobieren>
printFont.base = <ausprobieren>
|
|
Das Feld 'base' bestimmt die vertikale Position der Grundlinie der Buchstaben. Ändern Sie nur das Feld 'size', erscheinen die Buchstaben auf der alten Grundlinie, aber größer (wie in GeoWrite auch): Beispiel: Hallo große Welt |
FontSetGEOS(FID_CRANBROOK, 14) Print "Hallo"; printFont.size = 35 Print " große "; printFont.size = 14 Print "Welt" |
Die Zuweisung eines Wertes zur printFont-Variablen (implizit durch Verwendung einer der FontSet-Funktionen oder explizit mit einer anderen Variablen) stellt automatisch das maximale Textfenster ein.
^ |