home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / turbo4 / crtdemo.pas < prev    next >
Pascal/Delphi Source File  |  1987-12-08  |  5KB  |  145 lines

  1.  
  2. {           Copyright (c) 1985, 87 by Borland International, Inc.            }
  3.  
  4. program CrtDemo;
  5. { Ein Beispiel für die Verwendung des Units Crt. Die folgenden Routinen
  6.   aus Crt werden verwendet:
  7.  
  8.     ClrScr       DelLine          GoToXY       InsLine     KeyPressed
  9.     ReadKey      TextBackground   TextColor    TextMode    WhereX
  10.     WhereY       Window           Write        WriteLn;
  11.  
  12.   Außerdem greift das Programm auf die Variablen LastMode und WindMax
  13.   zu, die ebenfalls im Unit Crt deklariert sind.
  14.  
  15.   Eine kurze Beschreibung des Programms:
  16.  
  17.   1. Initialisierung
  18.      - Festhalten des momentan gesetzten Videomodus. Für EGA- und VGA-
  19.        Karten werden 43 bzw. 50 Zeilen gesetzt und ein Zeichensatz mit
  20.        8x8 Pixeln verwendet.
  21.      - Setzen der Variablen LastRow, um die unterste Zeile des Bildschirms
  22.        für Meldungen freizuhalten (für CGA und 40 Spalten werden dazu
  23.        zwei Bildschirmzeilen benutzt).
  24.      - Initialisierung des "Zufallszahlen"-Generators
  25.   2. Routine MakeWindow
  26.      - Erzeugt ein Textfenster, dessen Größe, Position und Farbe von
  27.        Zufallswerten bestimmt wird.
  28.   3. Hauptprogramm
  29.      - Aufruf der Initialisierung
  30.      - Schleife, die nur mit ESC abgebrochen werden kann:
  31.          - Ausgabe "normaler" Tastendrücke (wobei Zeilenumbruch und
  32.            eventuelles Rollen des Fensterinhalts automatisch stattfinden)
  33.          - Spezielle Behandlung der folgenden Tasten:
  34.              <Ins>    fügt eine Zeile an der Position des Cursors ein
  35.              <Del>    löscht die Zeile auf der Position des Cursors
  36.              <Auf>,
  37.              <Ab>,
  38.              <Rechts>,
  39.              <Links>  bewegen den Cursor innerhalb des Fensters
  40.              <Alt-F>  erzeugt ein neues (zufälliges) Fenster
  41.              <Alt-Z>  erzeugt zufällige Zeichenfolgen bis zum nächsten
  42.                       Tastendruck
  43.              <Alt-X>,
  44.              <ESC>    beenden das Programm
  45. }
  46.  
  47. uses Crt;
  48.  
  49. var
  50.   OrigMode,LastCol,LastRow: Word;
  51.   Ch: Char;
  52.   Done: Boolean;
  53.  
  54. procedure Initialize;
  55. { Setzt Videomodus, LastCol, LastRow, initialisiert den Zufallszahlen-
  56.   Generator und gibt die Statuszeile aus }
  57. begin
  58.   CheckBreak:=False;                   { keine Prüfung auf Ctrl-C }
  59.   OrigMode:=LastMode;                  { mom. gesetzten Videomodus speichern }
  60.   TextMode(Lo(LastMode)+Font8x8);      { für EGA/VGA: 43 bzw. 50 Zeilen }
  61.   LastCol:=Lo(WindMax)+1;              { letzte Spalte }
  62.   LastRow:=Hi(WindMax)+1;              { unterste Zeile }
  63.   GoToXY(1,LastRow);                   { Ausgabe der Statuszeile }
  64.   TextBackground(Black);
  65.   TextColor(White);
  66.   Write(' Ins-InsLine  ',
  67.         'Del-DelLine  ',
  68.         #27#24#25#26'-Cursor  ',
  69.         'Alt-F-Fenster  ',
  70.         'Alt-Z-Zufall  ',
  71.         'Esc-Ende');
  72.   Dec(LastRow,80 div LastCol); { Statuszeile gegen Überschreiben schützen }
  73.   Randomize;                           { Initialisierung des Generators }
  74. end;
  75.  
  76. procedure MakeWindow;
  77. { Erzeugt ein Fenster, dessen Position, Größe und Farbe durch den
  78.   "Zufallszahlen"-Generator bestimmt wird }
  79. var
  80.   X,Y,Width,Height: Word;
  81. begin
  82.   Width:=Random(LastCol-2)+2;               { Größe }
  83.   Height:=Random(LastRow-2)+2;
  84.   X:=Random(LastCol-Width)+1;           { Position }
  85.   Y:=Random(LastRow-Height)+1;
  86.   Window(X,Y,X+Width,Y+Height);
  87.   if OrigMode = Mono then
  88.   begin
  89.     TextBackground(White);             { für Monochrom-Adapter }
  90.     TextColor(Black);
  91.     ClrScr;
  92.     Window(X+1,Y+1,X+Width-1,Y+Height-1);
  93.     TextBackground(Black);
  94.     TextColor(White);
  95.     ClrScr;
  96.   end
  97.   else
  98.   begin
  99.     TextBackground(Random(8));
  100.     TextColor(Random(7)+9);
  101.   end;
  102.   ClrScr;
  103. end;
  104.  
  105. procedure RandomText;
  106. { erzeugt Buchstabenfolgen über den "Zufalls"-Genererator - bis
  107.   zum nächsten Tastendruck }
  108. begin
  109.   repeat
  110.     Write(Chr(Random(256-32)+32));  { keine Steuerzeichen... }
  111.   until KeyPressed;
  112. end;
  113.  
  114. begin { Hauptprogramm }
  115.   Initialize;
  116.   MakeWindow;
  117.   Done:=False;
  118.   repeat
  119.     Ch:=ReadKey;
  120.     case Ch of
  121.       #0:                               { Spezialtasten: }
  122.       begin
  123.         Ch:=ReadKey;
  124.         case Ch of
  125.           #33: MakeWindow;              { Alt-F }
  126.           #44: RandomText;              { Alt-Z }
  127.           #45: Done:=True;              { Alt-X }
  128.           #72: GotoXY(WhereX,WhereY-1); { Auf }
  129.           #75: GotoXY(WhereX-1,WhereY); { Links }
  130.           #77: GotoXY(WhereX+1,WhereY); { Rechts }
  131.           #80: GotoXY(WhereX,WhereY+1); { Ab }
  132.           #82: InsLine;                 { Ins }
  133.           #83: DelLine;                 { Del }
  134.         end;
  135.       end;                                { RETURN und ESC }
  136.  
  137.       #13: WriteLn;                     { RETURN (Enter) }
  138.       #27: Done:=True;                  { ESC }
  139.     else
  140.       Write(Ch);      { "normales" Zeichen }
  141.     end;
  142.   until Done;
  143.   TextMode(OrigMode);
  144. end.
  145.