home *** CD-ROM | disk | FTP | other *** search
-
- { 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.