MyFonts		Verwendung fremder Schriftarten in Pascal-Programmen.
ver 1.53	Copyright (c) 1993 by Matthias Kppe.

-----------------------------------------------------------------------------

1. Allgemeines
--------------

MyFonts ist eine Turbo-Pascal-Unit und dient der Verwendung fremder
Schriftarten in Pascal-Programmen. Folgende Schriftarten werden untersttzt:

 * VGA-BIOS-Schriftarten	8, 14, 16 pixel hoch
 * DOS-CPI-Schriftarten		codeseitenspezifisch, 8, 14, 16 pixel hoch
 * Windows-Bitmap-Schriftarten	(falls in Ihrem System vorhanden)
 * Windows-Vektor-Schriftarten	NEU! (falls in Ihrem System vorhanden)
 * BGI-Schriftarten		NEU: direkte Auswertung - bessere Manipulation

MyFonts arbeitet nach folgendem Prinzip: Zu Beginn eines Programms werden
mit MyFonts die einzusetzenden Schriftarten vereinbart. Innerhalb des
Programms knnen dann die Schriftarten ber Bezeichner angesprochen werden.
Dadurch ist leicht der Austausch von Schriften mglich.

Die Ausgabe der Schriften erfolgt mit Routinen, die zur Unit Graph weit-
gehend kompatibel sind. Untersttzt werden

  * Clipping (Beschrnkung der Ausgabe auf ein Rechteck),
  * TV-Markierungszeichen zur Umschaltung der Textfarbe,
  * Windows-Textmae,
  * Synthetisieren von Fettschrift (Windows und BGI) und
  * verschiedene Zeichenabstnde.
  * Ausrichtung von Text auch an Grundlinie und fhrender Linie

Die unit MyFonts ist Teil des MyMouse-Pakets und baut auf folgende units auf.

- Gr	    Diese unit ist das gemeinsam genutzte Graphikinterface. Der
	    Graphikmodus mu mittels SetGrMode gesetzt werden. Lesen Sie
  dazu die Dokumentation von Gr.

- Memory    Diese Turbo-Vision-unit wird verwendet, um dynamisch Platz fr
	    Schriftarten zu reservieren und bei Bedarf wieder freizugeben.
  Vor der Verwendung von MyFonts ist Memory durch einen Aufruf von
  InitMemory zu initialisieren. Wenn Sie viele groe Schriftarten verwenden,
  so empfiehlt es sich, den Pufferbereich zu vergrern, indem die
  Variable Memory.MaxBufMem vor dem Aufruf von InitMemory verndert wird.

MyFonts untersttzt die MetaGraph-Spezifikation vollstndig.

2. Vereinbarung der Schriftarten
--------------------------------

Ein varianter record (TFontRec) speichert die Daten einer Schriftart. Die
Kollektion FontCollection speichert die vereinbarten Schriftarten. Die
Vereinbarung einer Schriftart geschieht daher mittels

  FontCollection^.Insert(FontRec);

Dies wird bernommen von folgender Routine:

function DefFont(Font: PFontRec): Word;

  Fgt einen geladenen Font der Schriftkollektion hinzu. Die Nummer des
  Fonts wird als Funktionsergebnis zurckgegeben.

Rufen Sie also entsprechend auf:

  DefFont(FontRec);

FontRec ist dabei der Zeiger auf einen dynamisch reservierten TFontRec.
Folgende Funktionen nehmen die Reservierung und Belegung des TFontRec vor:

function LoadCPIFont(FName: PathStr; ReqCP, ReqLength: Word;
  CharSpace, AVertAdd, AHeight: Integer): PFontRec;

  Ldt eine Schriftart aus einer MS-DOS-Codepage-Informationsdatei (*.CPI);
  * FName ist der Dateiname (z.B. 'C:\DOS\EGA.CPI')
  * ReqCP ist die bentigte Codeseite (meist 437)
  * ReqLength ist die bentigte Schrifthhe in Pixel (8, 14 oder 16)
  * CharSpace ist der Standard-Zeichenabstand (meist 0)
  * AVertAdd ist die vertikale Verschiebung (meist 0)
  * AHeight ist die optionale virtuelle Hhe (Standard: 0)

function LoadBgiFileFont(FName: PathStr; ReqHeight, AMultX, ADivX, AMultY,
  ADivY: Integer; CharSpace, AVertAdd, AHeight: Integer;
  Attr: Word): PFontRec;

  Diese Routine ersetzt LoadBgiFont von frheren Versionen.

  Ldt einen skalierbaren BGI-Font (*.CHR)
  * FName ist der Dateiname der CHR-Datei (z.B. 'C:\TP\BGI\SANS.CHR').
    Wenn Sie eingelinkte Schriftarten verwenden mchten, setzen Sie fr diesen
    Parameter FixedAddr(p) ein, wobei p ein Zeiger auf die Schriftart ist.
  * ReqHeight ist die bentigte Zeichenhhe
  * AMultX, ADivX, AMultY, ADivY geben die Skalierung des Fonts an und
    entsprechen den von SetUserCharSize bekannten Parametern
  * CharSpace, AVertAdd, AHeight s.o.
  * Attr ist das zu synthetisierende Attribut (ftNormal fr normale Schrift,
    ftBold fr Fettschrift). Addieren Sie dazu ftNoDescent, wenn die Unter-
    lngen nicht ausgezhlt werden sollen.

  Anmerkung:  *	Setzen Sie ReqHeight = 0, so wird die Schrift mit den
		angegebenen Skalierungsfaktoren/-divisoren skaliert.
	      * Setzen Sie ReqHeight <> 0, so wird die Schrift so skaliert,
		da sie die gewnschte Hhe erreicht. Die Skalierungsparameter
		knnen 0 gesetzt werden, oder Sie spezifizieren durch sie
		ein bestimmtes Hhen-/Breitenverhltnis.

  MyFonts verwendet nicht das BGI, um diese Fonts auszuwerten. Sie bentigen
  aber eine Linienroutine, um die Schriftart darzustellen. Nehmen Sie daher
  die mitgelieferte Interface-Unit BGI in die Uses-Liste Ihres Programmes
  auf. Wenn Sie mehr Darstellungsgeschwindigkeit wnschen, empfehlen wir
  Ihnen die Unit MetaGraph, die separat erhltlich ist.

function LoadBIOSFont(ReqLength: Word;
  CharSpace, AVertAdd, AHeight: Integer): PFontRec;

  Ldt einen eingebauten VGA-BIOS-Font.
  * ReqLength ist die bentigte Schrifthhe in Pixel (8, 14 oder 16)
  * CharSpace, AVertAdd, AHeight s.o.
  BIOS-Fonts bentigen kaum Speicherplatz.

function LoadWinFont(FName: PathStr; reqNr, reqPt, reqLength: Word;
  CharSpace, AVertAdd, AHeight: Integer; Attr: Word): PFontRec;

  Ldt einen Windows-Bitmap- oder Windows-Vektor-Font (*.FON).
  * FName ist der Dateiname (z.B 'C:\WINDOWS\SYSTEM\SSERIFE.FON')
  * reqNr ist die Nummer des gewnschten Fonts in der Datei
  * reqPt ist die Punktgre des gewnschten Fonts.
  * reqLength ist die Lnge des gewnschten Fonts in Pixel.
  ! Nur einer dieser drei Parameter mu belegt werden, die anderen beiden
    bleiben auf 0 gesetzt.
  * Bitpositionen in Attr speichern Attribute des Fonts.
    - Ist Attr=ftNormal, so wird der Font normal dargestellt.
    - Ist Attr=ftBold, so wird der Font halbfett dargestellt.
      Evtl. sollte ber CharSpace der Zeichenabstand vergrert werden.
  * CharSpace, AVertAdd, AHeight s.o.

  Fr skalierbare Windows-Fonts bentigen Sie eine Linienroutine, um die
  Schriftart darzustellen. Nehmen Sie daher die mitgelieferte Interface-Unit
  BGI in die Uses-Liste Ihres Programmes auf. Wenn Sie mehr Darstellungs-
  geschwindigkeit wnschen, empfehlen wir Ihnen die Unit MetaGraph, die
  separat erhltlich ist.

function AliasOf(Font: Word; CharSpace, AVertAdd, AHeight: Integer;
  Attr: Word): PFontRec;

  Ldt einen Alias-Font, d.h. einen Verweis auf einen anderen geladenen Font.
  * Font ist die Nummer des anderen Fonts. Es sind sowohl Vorwrts- als auch
    Rckwrtsverweise zulssig.
  * In den Parametern CharSpace, AVertAdd, AHeight und Attr unterscheidet
    sich der Font von seinem Alias.
  Die Verwendung von Alias-Fonts hat - gegenber mehrfachem Laden des gleichen
  Fonts - Vorteile in der Speicherausnutzng.

  Beachten Sie, da sich das Verhalten eines doppelten Alias im Vergleich
  zu Version 1.2 verndert hat.

function FullAliasOf(Font: Word): PFontRec;

  Ldt einen Alias-Font. Im Gegensatz zu AliasOf liefert die Funktion ein
  vollstndig identisches Alias, d.h. die Parameter bleiben unverndert.

Werden in Abhngigkeit von der installierten Software verschiedene Fonts
genutzt (z.B. Windows-Fonts bei installiertem Windows; ansonsten BIOS-Fonts),
so knnen zum Ausgleich von Schriftartunterschieden vertikale Korrekturen
ber die Parameter AVertAdd und AHeight vorgenommen werden.
Diese Korrekturmethode wird nicht empfohlen; sie ist veraltet. Nutzen Sie
statt dessen die fortgeschrittenen Textma-Funktionen von MyFonts.

Die mitunter umfangreichen Schriftartinformationen werden erst bei Bedarf aus
den Dateien gelesen. Dazu bentigter Speicher wird dynamisch reserviert;
entstehen neue Speicheranforderungen, so kann der Speicher automatisch
wieder freigegeben werden.

3. Ausgabe von Texten
---------------------

Folgende Ausgaberoutinen auf hoher Ebene stellt MyFonts bereit. Sie sind
weitestgehend mit den Graph-Routinen kompatibel.

procedure OutTextXY(x, y: Integer; s: string);
function TextWidth(s: string): Integer;
function TextHeight(s: string): Integer;

  mssen nicht dokumentiert werden.

procedure SetTextJustify(Horiz, Vert: Word);

  Es gibt zwei neue vertikale Textausrichtungen:
  * BaseLine	an der Grundlinie der Zeichen
  * LeadLine	an der fhrenden Linie (hchster Punkt von Grobuchstaben)

procedure SetTextParams(Font: Word; CharSpace: Integer; Color: Word;
  UseMarker: Boolean);

  Wird anstelle von SetTextStyle eingesetzt.
  * Font ist die Nummer des Fonts, mit dem Textausgaben erfolgen sollen.
  * CharSpace ist der additive Zeichenabstand. Die Summe aus CharSpace und
    dem Standard-CharSpace (eingestellt mit den Vereinbarungsroutinen) ergibt
    den tatschlichen Zeichenabstand.
    Darf auch negativ sein.
  * Color ist die Zeichenfarbe. Das Low-Byte von Color gibt die Farbe des
    normalen Textes, das High-Byte die des hervorgehobenen Textes an.
  * UseMarker gibt an, ob Turbo-Vision-hnliche Markierungszeichen verwendet
    werden sollen. Bei true schaltet die Tilde (~) zwischen normal und
    hervorgehoben um; bei false wird die Tilde als normales Zeichen behandelt.

procedure SetMarker(Marker: Char);

  Ermglicht die Vernderung des Markierungszeichens. Standard: Tilde (~).

procedure GetTextMetrics(var Metrics: TTextMetric);

  Ermittelt metrische Daten der aktuellen Schriftart. Die bergebene
  Datenstruktur ist voll kompatibel zu der TextMetric-Struktur von Windows.
  Lesen Sie deshalb in Ihrer SDK-Dokumentation oder den Hilfetexten von
  Pascal fr Windows fr genauere Informationen.

  Hier eine Aufstellung der wichtigsten Mae:

  tmHeight		Zeichenhhe
  tmAscent		Oberlnge
  tmDescent		Unterlnge
  tmInternalLeading     Freiraum fr Akzente (innerhalb der Oberlnge)
  tmExternalLeading	Empfohlener Zeilenabstand
  tmAveCharWidth	Durchschnittliche Zeichenbreite
  tmMaxCharWidth	Maximale Zeichenbreite

  Bitte beachten Sie, da bei Nicht-Windows-Schriftarten einige der
  fortgeschrittenen Angaben nicht richtig gesetzt werden knnen.

4. Weitere Routinen
-------------------

procedure InitMyFonts;

  Initialisiert MyFonts. Mu zu Beginn des Programms aufgerufen werden.

procedure DoneMyFonts;

  Beendet MyFonts. Sollte am Ende des Programms aufgerufen werden.

Die anderen Routinen von MyFonts stellen eine Schnittstelle zu systemnaher
Software dar und sind fr normalen Einsatz wenig geeignet. Sie bleiben
daher undokumentiert.

5. Variablen
------------

Die Variablen ClipRect (Clipping-Rechteck) und DrawOrigin (Zeichenursprung)
sind in der Unit Gr zu finden, ebenso Routinen, die diese Variablen belegen.

FontCollection: PFontCollection;

  Diese Kollektion speichert alle relevanten Daten aller vereinbarten
  Schriftarten.

Die anderen Variablen werden intern verwendet, stellen eine Schnittstelle zu
systemnaher Software dar und werden daher nicht dokumentiert.

6. Weitere Hinweise
-------------------

Die Zhlung der Schriftarten beginnt ab 0. Es ist sinnvoll, fr die
vereinbarten Schriftarten Bezeichner (Konstanten) zu definieren. ber sie
ist einfacher Zugriff auf die verschiedenen Schriftarten mglich.

In der Dokumentation zum Graphikprotokoll Gr finden Sie Informationen zum
Clipping, zum Zeichenursprung, zu den Bildschirmseiten und Graphikparametern.

Sie knnen den Pufferbereich fr Schriftarten an Ihre Bedrfnisse anpassen,
indem Sie die Variable Memory.MaxBufMem modifizieren. Lesen Sie dazu
Ihre Turbo-Vision-Dokumentation.

Sehen Sie sich bitte die Beispielprogramme zu MyFonts an. Aus ihnen knnen
Sie noch viele Details entnehmen.

-----------------------------------------------------------------------------
				Neu in Version 1.5
-----------------------------------------------------------------------------

1. Untersttzung skalierbarer Windows-Schriftarten.
2. Untersttzung von Windows-Schriftarten der Schriftart-Version 3
   bis 64 KB Gre.
3. Direkte Auswertung der BGI-Fonts - dadurch Synthetisierung von Fettschrift,
   direkte Untersttzung der Markierungszeichen, Schriftmae und mehr
   Kompatibilitt.
4. Untersttzung der Windows-Textmae.
5. Ausrichtung von Texten an der Grundlinie und der fhrenden Linie.
6. Beschleunigter und verbesserter Einsatz von Alias-Schriftarten.

