home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power-Programmierung
/
CD1.mdf
/
pascal
/
das_buch
/
symbol
/
sfintern.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1993-05-20
|
5KB
|
117 lines
{$A+,B-,D-,E-,F-,G-,I-,L-,N-,O-,P-,Q-,R-,S-,T-,V-,X+,Y-}
{$M $1000,0,$20000}
(*===================================================================*)
(* SFINTERN.PAS *)
(* Copyright (C) 1993 te-wi Verlag, München *)
(*-------------------------------------------------------------------*)
(* Demonstration für den UserFont »SYMB.CHR«, eingebunden als *)
(* GOTH.OBJ (GothicFont) *)
(* Das Programm kann sowohl im Real als auch im Protected Mode *)
(* compiliert werden. *)
(*===================================================================*)
PROGRAM InternalSymbolFont;
USES
Crt, Dos, Graph;
VAR
result,
Symbol,
gd, gm: INTEGER;
i : BYTE;
mult : INTEGER;
cs : STRING[3];
ch : CHAR;
x, y : INTEGER;
PROCEDURE GothicFontProc; EXTERNAL; {$L SYMB} (* <--- ein Trick *)
PROCEDURE TriplexFontProc; EXTERNAL; {$L TRIP}
PROCEDURE SmallFontProc; EXTERNAL; {$L LITT}
BEGIN
DetectGraph(gd, gm);
IF gd = VGA THEN BEGIN (* wenn VGA ermittelt, SVGA *)
gm := 0; (* probieren. Allerdings *)
gd := InstallUserDriver('SVGA', NIL);(* muß der Treiber für die *)
InitGraph(gd, gm, GetEnv('BGIPATH'));(* Karte korrekt gepatcht *)
IF GraphResult <> grOk THEN (* sein. Falls der Treiber *)
BEGIN (* nicht gefunden wurde, *)
gd := VGA; (* wird die Installation *)
gm := VGAHi; (* mit VGA erneut versucht *)
InitGraph(gd, gm, GetEnv('BGIPATH'));
END; (* Falls keine VGA, dann *)
END ELSE InitGraph(gd, gm, GetEnv('BGIPATH')); (* normal initial. *)
result := GraphResult; (* Fehlerüberprüfung *)
IF result = grOk THEN (* alles war ok, los geht's *)
BEGIN
SetTextJustify(CenterText, TopText); (* Headline mit der *)
SetTextStyle(SmallFont, HorizDir, 5); (* Fontinfo ausgeben *)
OutTextXY(Succ(GetMaxX) DIV 2, 5, (* in SmallFont *)
'BGI-Symbol-Zeichensatz »SYMB.CHR«'); (* Symbolschrift *)
Symbol := RegisterBGIFont(@GothicFontProc);
RegisterBGIFont(@SmallFontProc); (* deshalb $X+ *)
RegisterBGIFont(@TriplexFontProc);
SetTextJustify(LeftText, BottomText);
Rectangle(4, 20, GetMaxX - 4, GetMaxY); (* Rahmen ziehen *)
CASE Succ(GetMaxY) OF
600: mult := 4; (* SVGA *)
480: mult := 3; (* VGA *)
350: mult := 2; (* EGA *)
200: mult := 1; (* CGA *)
ELSE mult := 2; (* Hercules *)
END;
MoveTo(15, Succ(GetMaxY) DIV 9);
SetTextStyle(Symbol, HorizDir, mult);
FOR i := 0 TO 255 DO (* Alle Zeichen auf *)
BEGIN (* dem Bildschirm *)
IF GetX >= GetMaxX - TextWidth('W') (* ausgeben, die *)
- Round(2 * mult / 3) - 20 THEN (* zugehörige Nummer *)
MoveTo(15, GetY + 10 * mult);
SetColor(White);
IF i <> 255 THEN OutText(Chr(i)) ELSE OutText(' ');
SetTextStyle(SmallFont, HorizDir, 4); (* im SmallFont *)
Str(i, cs);
SetColor(Yellow);
OutText(cs);
SetTextStyle(Symbol, HorizDir, mult);
OutText(#0); (* halber Space *)
END;
ch := #0;
REPEAT
ch := ReadKey; (* Und wenn fertig, auf eine Taste warten ... *)
UNTIL ch <> #0;
SetColor(LightRed);
ClearDevice; (* den Bildschirm löschen *)
SetTextStyle(TriplexFont, HorizDir, 2);
OutTextXY(10, 30, 'Bitte geben Sie beliebige Zeichen ein ' +
'(Ende mit <ALT 255>:');
SetColor(White);
MoveTo(10, x); (* und den Benutzer den *)
SetTextStyle(Symbol, HorizDir, 3); (* Font testen lassen *)
x := 10;
y := GetMaxY DIV 10;
MoveTo(x, y);
ch := #0;
REPEAT
Inc(x, TextWidth(ch) + 1);
ch := ReadKey;
IF ch = #13 THEN (* Zeilenumbruch *)
BEGIN
OutTextXY(x, y, ch);
Inc(y, TextHeight(Chr(189)) + 10);
x := 0;
END;
IF ch <> #13 THEN OutTextXY(x, y, ch);
UNTIL ch = #$FF; (* bis #255 gedrückt wird *)
RestoreCrtMode; (* Textmodus und Ende *)
WriteLn('Ende ....');
END
ELSE (* Fehler bei der Initialisierung melden: *)
WriteLn('Grafik-Initialisierungsfehler Nummer: ', Abs(result));
END.
(*===================================================================*)