home *** CD-ROM | disk | FTP | other *** search
-
- PROGRAM fonts;
-
- { FONTS.PAS demonstriert Schriftsatz-Funktionen einschl:
-
- _GetFontInfo _RegisterFonts _SetGTextVector
- _GetGTextExtent _SetFont _UnregisterFonts
- _OutGText
-
- Wir richten auch mit der Standardvariablen ExitProc eine
- Abschlußprozedur ein.
- }
-
- USES
- MSGraph, Crt, Dos;
-
- CONST
- wrzv : CSTRING[2] = #$0d#$0a;
-
- VAR
- nfonts : Integer;
- liste : STRING[20];
- fonverz : STRING[128];
- vc : _VideoConfig;
- fi : _FontInfo;
- fontnum : Byte;
- x, y : Word;
- ch : Char;
- ergebnis : Integer;
- enduspei : POINTER;
-
- {============================= exit_fonts ==============================
- Diese Abschlußprozedur wird automatisch bei jedem Programmabschluß
- aufgerufen. Sie nimmt nach den Schriftsätzen Rücksetzung des
- Videomodus vor und gibt den Schriftsatzspeicher wieder frei.
- }
- {$F+}
- PROCEDURE exit_fonts;
- {$F-}
- BEGIN
- ExitProc := enduspei;
- ergebnis := _SetVideoMode( _DefaultMode );
- _UnRegisterFonts;
- END;
-
- {=============================== int2str ===============================
- Diese Funktion ergibt eine CSTRING, in der ihr Integerargument
- enthalten ist.
- }
- FUNCTION int2str( x : Integer ) : CSTRING;
- VAR cs : CSTRING;
- BEGIN
- Str( x, cs );
- int2str := cs;
- END;
-
- {========================= Programm-Hauptteil =========================}
-
- BEGIN
- enduspei := ExitProc;
- ExitProc := @exit_fonts;
-
- { Kopfzeilen-Info aus allen verfügbaren .FON Dateien einlesen. }
- fonverz := '*.FON';
- nfonts := _RegisterFonts( fonverz );
- IF (nfonts <= 0) THEN
- BEGIN
- _OutText( 'Vollständigen Pfadnamen der .FON-Dateien eingeben:');
- Readln( fonverz );
- IF fonverz[Length( fonverz )] <> '\' THEN fonverz := fonverz +
- '\';
- fonverz := fonverz + '*.FON';
- nfonts := _RegisterFonts( fonverz );
- IF (nfonts <= 0) THEN
- BEGIN
- _OutText( 'Fehler: kann Schriftsätze nicht registrtieren' );
- Halt( 1 ); { Abort }
- END;
- END; { falls Schriftsätze nich zu finden sind }
-
- { Höchstmöglichen Grafikmodus einrichten und Konfiguration holen. }
- IF (_SetVideoMode( _MaxResMode ) = 0) THEN Halt( 1 );
- _GetVideoConfig( vc );
-
- { Alle Schriftsatznamen mittig am Bildschirm angeben. }
- FOR fontnum := 1 TO nfonts DO
- BEGIN
- { Optionen-CString aufbauen. }
- liste := 'n' + int2str( fontnum );
- _ClearScreen( _GClearScreen );
- _OutText( 'Font index ' + int2str( _SetFont( liste ) ) + wrzv );
- IF (_GetFontInfo( fi ) < 0) THEN
- BEGIN
- _OutText( 'Fehler: Schriftsatz-Info nicht verfügbar' );
- ch := ReadKey;
- END;
-
- { Zur Mittigstellung Textlänge und Schriftsatzhöhe verwenden. }
- x := (vc.NumXPixels DIV 2) -
- (_GetGTextExtent( fi.FaceName ) DIV 2);
- y := (vc.NumYPixels DIV 2) - (fi.Ascent DIV 2);
- _MoveTo( x, y );
- IF (vc.NumColors > 2) THEN _SetColor( fontnum + 1 );
- _SetGTextVector( 1, 0 );
- _OutGText( fi.FaceName );
-
- { Gedrehten Text demonstrieren }
- IF (vc.NumColors > 2) THEN _SetColor( fontnum + 1 );
- _MoveTo( x - (2 * fi.Ascent), y );
- _SetGTextVector( 0, 1 );
- _OutGText( fi.FaceName );
- _MoveTo( x + _GetGTextExtent( fi.FaceName ) +
- (2 * fi.Ascent), y );
- _SetGTextVector( 0, -1);
- _OutGText( fi.FaceName );
- ch := ReadKey;
-
- END; { FOR-Schleife }
-
- END.
-
-