home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turbo Toolbox
/
Turbo_Toolbox.iso
/
qpdemo
/
fonts.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1989-08-23
|
3KB
|
122 lines
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.