2. Verwendung von Schriften

^

2.1 Überblick

R-BASIC kann alle im GEOS-System installierten Schriften (Fonts) und Schriftstile verwenden.

FontID's

GEOS (und auch R-BASIC) identifiziert Schriften über eine Font-Identifiaktions-Nummer, die FontID. Näheres dazu erfahren Sie im Abschnitt 2.2

Die Font-Modi

Um die Fähigkeiten von PC/GEOS voll ausreizen zu können, kennt R-BASIC drei Arten von Schriften (Font-Modi):
  • Im Fixed-Font-Modus (Abschnitt 2.3) hat jedes Zeichen eine feste Breite und eine feste Höhe. R-BASIC kennt und verwaltet die Position jedes einzelnen Zeichens.

  • Im GEOS-Font-Modus (Abschnitt 2.4) übernimmt GEOS die Ausgabe des Textes. Es stehen alle im System installierten Schriften und alle Textstile (Fett, Kursiv, hochgestellt usw.) zur Verfügung.

  • Im Block-Font-Modus (Abschnitt 2.5, ausführliche Beschreibung im Kapitel 3) wird für jeden Buchstaben eine kleine, Grafik ausgegeben (z.B. 14x8 Pixel). Damit ist es möglich, sehr einfach grafische Elemente auf den Bildschirm zu bringen.

Textstile

Die 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-Variable

Die 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-Fonts

PC/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

Tabelle

(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 Avenue
Weitere 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.

FontAvail

FontAvail 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

FontFind

FontFind 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 )

FontGetSysInfo

FontGetSysInfo 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:

Tabelle

^

2.3 Der Fixed-Font-Modus

Der 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.

FontSetFixed

Die Anweisung FontSetFixed versetzt R-BASIC in den Fixed-Font Modus. Dabei wird intern die Systemvariable printFont mit den passenden Werten belegt.
Syntax: FontSetFixed fontID, size [,lineHeight]

fontID: ID-Nummer des Fonts. Zulässige Werte: siehe Tabelle unten.

size: Größe der Schrift in Point. Zulässig sind die Werte 10, 12, 14, 18 u. 22

lineHeight: (optional) Zeilenabstand.
FontSetFixed stellt standardmäßig günstige Werte ein (siehe Tabelle unten). Wählen Sie den Zeilenabstand zu klein, überlappen sich die Buchstaben.

Beispiel 1:
FontSetFixed (FID_UNIVERSITY, 18) ' Klammern sind OK
Beispiel 2:
' Doppelten Zeilenabstand verwenden (vgl. Tabelle unten)
FontSetFixed FID_UNIVERSITY, 18, 48
Hinweise:
  • FontSetFixed stellt automatisch das maximale Textfenster ein, der Cursor wird nach links oben gesetzt (siehe Window-Befehl). Sie können das Fenster anschließend mit dem WINDOW-Befehl ändern und/oder den Cursor mit LOCATE positionieren.

  • Verwenden Sie bei Bedarf den Befehl PRINT atXY(x,y); "Text..." um die Textausgaben pixelgenau zu positionieren.

  • Im Fixed-Font-Modus wird der Texthintergrund per default in der aktuellen Hintergrundfarbe gelöscht. Um Texte transparent auszugeben müssen Sie die Hintergrundfarbe auf BG_TRANSPARENT setzen.
PAPER BG_TRANSPARENT
Hinweise für fortgeschrittene Programmierer:
  • Die von PRINT verwendete Schriftart (Font), die Textgröße und weitere Eigenschaften werden von der Systemvariable printFont bestimmt, die im Abschnitte 2.7 beschrieben ist. Fortgeschrittene Programmierer können die printFont - Variable auch direkt modifizieren.

  • Fortgeschrittene Programmierer finden eventuell die Syntax
    <variable> = FontSetFixed(fontID, size [,lineHeight])
    hilfreich. <variable> ist eine Variable vom Typ PrintFontStruct, die dann statt der Systemvariablen printFont belegt wird.
Tabelle: Zeichengrößen, die von FontSetFixed gesetzt werden. Blau kursiv bezeichnet das jeweilige printFont-Feld.

Tabelle

: Bison unterstützt nicht die Größen 18 und 22 Point, Berkeley nicht 22 Point. Hier wird nur die Zeichenbox (Breite und Höhe) vergrößert.

^

2.4 Der GEOS-Font-Modus

Im 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.

FontSetGEOS

Die Anweisung FontSetGEOS versetzt R-BASIC in den GEOS-Font Modus. Dabei wird intern die Systemvariable printFont mit den passenden Werten belegt.


Syntax: FontSetGEOS fontID, size [,lineHeight]

Parameter: fontID: ID-Nummer des Fonts.
Weitere Infos zur fontID und einige verfügbare Werte finden Sie hier.

size: Größe der Schrift in Point.

lineHeight: optional: Zeilenabstand.
FontSetGEOS stellt standardmäßig günstige Werte ein (Zeichengröße + ca. 30%, exakt: INT(1.35*size)). Wählen Sie den Zeilenabstand zu klein, überlappen sich die Buchstaben.

Beispiel 1:
FontSetGEOS FID_SYMBOLPS, 18
Beispiel 2
' Zeilenabstand = 150% der Schriftgröße
FontSetGEOS(FID_ROMAN, 14, 1.5 * 14)   ' Klammern sind erlaubt
Hinweise:
  • FontSetGEOS stellt automatisch das maximale Textfenster ein, der Cursor wird nach links oben gesetzt (siehe Window-Befehl). Sie können das Fenster anschließend mit dem WINDOW-Befehl ändern und/oder den Cursor mit LOCATE positionieren.

  • Die Befehle WINDOW, LOCATE und POS arbeiten mit einer "durchschnittlichen" Zeichenbreite, der Befehl VGet$ steht nicht zur Verfügung.

  • Im GEOS Font Modus wird der Texthintergrund per default in der aktuellen Hintergrundfarbe gelöscht. Um Texte transparent auszugeben müssen Sie die Hintergrundfarbe auf BG_TRANSPARENT setzen.
PAPER BG_TRANSPARENT
Hinweise für fortgeschrittene Programmierer:
  • Die von PRINT verwendete Schriftart (Font), die Textgröße und weitere Eigenschaften, z.B. der Wert für die oben erwähnte "durchschnittliche" Zeichenbreite werden von der Systemvariable printFont bestimmt, die im Abschnitte 2.7 beschrieben ist. Fortgeschrittene Programmierer können die printFont - Variable auch direkt modifizieren.

  • Fortgeschrittene Programmierer finden eventuell die Syntax
    <variable> = FontSetGEOS(fontID, size [,lineHeight])
    hilfreich. <variable> ist eine Variable vom Typ PrintFontStruct, die dann statt der Systemvariablen printFont belegt wird.

^

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.

FontSetBlock

Die 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.
Syntax: FontSetBlock sizex, sizey [ , colored]

sizex, sizey: Größe der Block-Grafiken in Pixel.
Erlaubte Werte liegen zwischen 2 und 64 (jeweils einschließlich).

colored: Ungeladenen Zeichensatz als monochrom (FALSE, default)
oder als farbig (256 Farben) behandeln.

Beispiel:
FontSetBlock 16, 24

Hinweise:

  • Eine ausführliche Beschreibung der Möglichkeiten der Block-Font-Modus (auch Block-Grafik-Modus) finden Sie im Kapitel 3.

  • Sie verwenden ganz normal die Print-Anweisung, statt der Buchstaben erscheinen aber Grafik-Symbole auf dem Schirm.

  • Im Block-Grafik-Modus stehen keine Textstile zur Verfügung.

  • R-BASIC unterstützt des Verwenden von Grafikzeichensätzen durch sowohl direkten Zugriff auf den Zeichengenerator (den Speicher, in dem die Grafiksymbole abgelegt sind) als auch durch die Verwendung von Dateien, die Grafiksymbole enthalten.

  • Das Laden eines Zeichensatzes aus einer Datei (Befehl BlockLoad) überschreibt die durch den Parameter colored gesetzte Einstellung.

  • Ein intuitives Erstellen von Grafiksymbolen ist mit dem Block-Grafik-Editor möglich, den Sie im Menü "Extras"-"Tools" finden.

^

2.6 Textstile

R-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.

Tabelle: Textstile zur Benutzung mit printFont.style
F: Verfügbar im Fixed-Font Modus
G: Verfügbar im GEOS-Font-Modus
B: Im Block-Font-Modus ist nur TS_DONT_EXEC_CONTROLS verfügbar

Tabelle

(A) Wird von R-BASIC realisiert, keine Systemfunktion.

Hinweise:

  • Texte werden standardmäßig mit Hintergrund ausgegeben. Um Texte transparent auszugeben müssen Sie die Hintergrundfarbe auf BG_TRANSPARENT setzen (z.B. PAPER BG_TRANSPARENT)

  • Im GEOS-Font-Modus ist standardmäßig kein Stil gesetzt.

  • Die Stile sind sog. Bit-Flags, d.h. sie haben bestimmte Bits gesetzt (Flag = Flagge, in der Computertechnik oft ein bestimmtes Bit) und sollten mit OR (setzen) und AND NOT (löschen) kombiniert werden.
Man setzt einen Stil mit OR:
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 Systemvariable

Achtung!

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

type speichert den aktuell von PRINT verwendeten Font-Typ.
Gültige Werte sind FT_FIXED (0, gesetzt von FontSetFixed), FT_GEOS (1, gesetzt von FontSetGEOS) und FT_BLOCK (2, gesetzt von FontSetBlock).

fontID - Die GEOS-Font-ID für FT_FIXED und FT_GEOS.
Bei ungültigen Werten wählt GEOS einen Ersatzfont, häufig die BISON-Schrift.

fontSize - Die Größe der Schrift.
Bitmap-Schriften (z.B. FID_BISON) unterstützen nicht alle Größen.

charWidth - Breite eines Zeichens.
Für type = FT_FIXED gilt: Wert in Pixeln
Für type = FT_GEOS gilt: Wert in % von printFont.fontSize
Für type = FT_BLOCK gilt: Wert in Pixeln

lineHeight - Zeilenabstand, in Pixeln

style - Textstil für FT_GEOS und FT_FIXED:
Kombination von TS_xxx-Werten. Siehe Abschnitt 2.6.

base - Abstand der Text-Grundline vom oberen Rand der Zeile.

Tipps und Beispiele für Fortgeschrittene

Sie 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.

^

Weiter...