home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turbo Toolbox
/
Turbo_Toolbox.iso
/
turbo4
/
crtdemo.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1987-12-08
|
5KB
|
145 lines
{ Copyright (c) 1985, 87 by Borland International, Inc. }
program CrtDemo;
{ Ein Beispiel für die Verwendung des Units Crt. Die folgenden Routinen
aus Crt werden verwendet:
ClrScr DelLine GoToXY InsLine KeyPressed
ReadKey TextBackground TextColor TextMode WhereX
WhereY Window Write WriteLn;
Außerdem greift das Programm auf die Variablen LastMode und WindMax
zu, die ebenfalls im Unit Crt deklariert sind.
Eine kurze Beschreibung des Programms:
1. Initialisierung
- Festhalten des momentan gesetzten Videomodus. Für EGA- und VGA-
Karten werden 43 bzw. 50 Zeilen gesetzt und ein Zeichensatz mit
8x8 Pixeln verwendet.
- Setzen der Variablen LastRow, um die unterste Zeile des Bildschirms
für Meldungen freizuhalten (für CGA und 40 Spalten werden dazu
zwei Bildschirmzeilen benutzt).
- Initialisierung des "Zufallszahlen"-Generators
2. Routine MakeWindow
- Erzeugt ein Textfenster, dessen Größe, Position und Farbe von
Zufallswerten bestimmt wird.
3. Hauptprogramm
- Aufruf der Initialisierung
- Schleife, die nur mit ESC abgebrochen werden kann:
- Ausgabe "normaler" Tastendrücke (wobei Zeilenumbruch und
eventuelles Rollen des Fensterinhalts automatisch stattfinden)
- Spezielle Behandlung der folgenden Tasten:
<Ins> fügt eine Zeile an der Position des Cursors ein
<Del> löscht die Zeile auf der Position des Cursors
<Auf>,
<Ab>,
<Rechts>,
<Links> bewegen den Cursor innerhalb des Fensters
<Alt-F> erzeugt ein neues (zufälliges) Fenster
<Alt-Z> erzeugt zufällige Zeichenfolgen bis zum nächsten
Tastendruck
<Alt-X>,
<ESC> beenden das Programm
}
uses Crt;
var
OrigMode,LastCol,LastRow: Word;
Ch: Char;
Done: Boolean;
procedure Initialize;
{ Setzt Videomodus, LastCol, LastRow, initialisiert den Zufallszahlen-
Generator und gibt die Statuszeile aus }
begin
CheckBreak:=False; { keine Prüfung auf Ctrl-C }
OrigMode:=LastMode; { mom. gesetzten Videomodus speichern }
TextMode(Lo(LastMode)+Font8x8); { für EGA/VGA: 43 bzw. 50 Zeilen }
LastCol:=Lo(WindMax)+1; { letzte Spalte }
LastRow:=Hi(WindMax)+1; { unterste Zeile }
GoToXY(1,LastRow); { Ausgabe der Statuszeile }
TextBackground(Black);
TextColor(White);
Write(' Ins-InsLine ',
'Del-DelLine ',
#27#24#25#26'-Cursor ',
'Alt-F-Fenster ',
'Alt-Z-Zufall ',
'Esc-Ende');
Dec(LastRow,80 div LastCol); { Statuszeile gegen Überschreiben schützen }
Randomize; { Initialisierung des Generators }
end;
procedure MakeWindow;
{ Erzeugt ein Fenster, dessen Position, Größe und Farbe durch den
"Zufallszahlen"-Generator bestimmt wird }
var
X,Y,Width,Height: Word;
begin
Width:=Random(LastCol-2)+2; { Größe }
Height:=Random(LastRow-2)+2;
X:=Random(LastCol-Width)+1; { Position }
Y:=Random(LastRow-Height)+1;
Window(X,Y,X+Width,Y+Height);
if OrigMode = Mono then
begin
TextBackground(White); { für Monochrom-Adapter }
TextColor(Black);
ClrScr;
Window(X+1,Y+1,X+Width-1,Y+Height-1);
TextBackground(Black);
TextColor(White);
ClrScr;
end
else
begin
TextBackground(Random(8));
TextColor(Random(7)+9);
end;
ClrScr;
end;
procedure RandomText;
{ erzeugt Buchstabenfolgen über den "Zufalls"-Genererator - bis
zum nächsten Tastendruck }
begin
repeat
Write(Chr(Random(256-32)+32)); { keine Steuerzeichen... }
until KeyPressed;
end;
begin { Hauptprogramm }
Initialize;
MakeWindow;
Done:=False;
repeat
Ch:=ReadKey;
case Ch of
#0: { Spezialtasten: }
begin
Ch:=ReadKey;
case Ch of
#33: MakeWindow; { Alt-F }
#44: RandomText; { Alt-Z }
#45: Done:=True; { Alt-X }
#72: GotoXY(WhereX,WhereY-1); { Auf }
#75: GotoXY(WhereX-1,WhereY); { Links }
#77: GotoXY(WhereX+1,WhereY); { Rechts }
#80: GotoXY(WhereX,WhereY+1); { Ab }
#82: InsLine; { Ins }
#83: DelLine; { Del }
end;
end; { RETURN und ESC }
#13: WriteLn; { RETURN (Enter) }
#27: Done:=True; { ESC }
else
Write(Ch); { "normales" Zeichen }
end;
until Done;
TextMode(OrigMode);
end.