home *** CD-ROM | disk | FTP | other *** search
- (* ----------------------------------------------------- *)
- (* CRTDEMO.PAS *)
- (* *)
- (* Dieses Programm demonstriert den Gebrauch des Objekts *)
- (* "VSMCrt" anhand des neuimplementierten Demoprogramm *)
- (* "CrtDemo" von Turbo Pascal. Die Unterschiede und Neu- *)
- (* heiten sind im Listing gekennzeichnet. *)
- (* *)
- (* (c) 1991 by R.Reichert & toolbox *)
- (* ----------------------------------------------------- *)
- PROGRAM CrtDemo;
-
- USES ScrObj, CrtVar;
-
- VAR
- { Textmodi-Variablen entfallen ohne Ersatz }
- LastCol, LastRow : BYTE;
- Ch : CHAR;
- Finished : BOOLEAN;
- { ^^^ ursprünglich "Done", des gleichnamigen Destruk-
- tors wegen umgetauft. }
-
- PROCEDURE Initialize;
- BEGIN
- WITH Crt^ DO BEGIN {<-- zur Benutzung ansprechen }
- SetCheckBreak (Off); {<-- Set..., keine Varzuweisung }
- LastCol := GetWinMaxX;{<-- Methoden liefern Werte, }
- LastRow := GetWinMaxY;{ auch hier keine Varzugriffe}
- GotoXY (1, LastRow);
- SetTextBackground (Black); { <-- nochmals dasselbe }
- SetTextColor (White);
- Write (' Ins-InsLine '+ { <-- aus dem Komma }
- 'Del-DelLine '+ { wurde ein "Plus" }
- #27#24#25#26'-Cursor '+
- 'Alt-W-Window '+
- 'Alt-R-Random '+
- 'Esc-Exit');
- Dec (LastRow);
- Randomize;
- END;
- END;
-
- PROCEDURE MakeWindow;
- VAR
- x1, y1, Width, Height : BYTE;
- BEGIN
- WITH Crt^ DO BEGIN
- Width :=Random (LastCol - 2) + 2;
- Height:=Random (LastRow - 2) + 2;
- x1 := Random (LastCol - Width) + 1;
- y1 := Random (LastRow - Height) + 1;
- Window(x1, y1, x1+Width, y1+Height);
- SetTextBackground (White);
- SetTextColor (Black);
- ClrScr;
- Window (Succ (x1), Succ (y1),
- Pred (x1+Width), Pred (y1+Height));
- SetTextBackground (Black);
- SetTextColor (White);
- ClrScr;
- END;
- END;
-
- PROCEDURE RandomText;
- BEGIN
- REPEAT
- Crt^.Write (Chr (Random (256-32)+32));
- UNTIL Crt^.KeyPressed;
- END;
-
- BEGIN
- Crt := New (VSMCrtPtr,
- Init (New (ScreenObjPtr, Init (0, 0))));
- { ^^^ Crt muss angelegt werden }
- Crt^.ClrScr;
- Initialize;
- MakeWindow;
- Finished := False;
- WITH Crt^ DO
- REPEAT
- Ch := ReadKey;
- CASE Ch OF
- #0 : BEGIN
- Ch := ReadKey;
- CASE Ch OF
- #17: MakeWindow; { Alt-W }
- #19: RandomText; { Alt-R }
- #45: Finished := True; { Alt-X }
- #72: GotoXY (WhereX, WhereY-1); { Up }
- #75: GotoXY (WhereX-1, WhereY); { Left }
- #77: GotoXY (WhereX+1, WhereY); { Right }
- #80: GotoXY (WhereX, WhereY+1); { Down }
- #82: InsLine; { Ins }
- #83: DelLine { Del }
- END
- END;
- #3 : Finished := True; { Ctrl-C }
- #13: WriteLn (''); { Enter }
- { ^^^ für Zeilenvorschub braucht es "Leerstring" }
-
- #27: Finished := True; { Esc }
- ELSE
- Write (Ch);
- { ^^^ ACHTUNG: Spezialzeichen wie BackTab werden
- ausgegeben ! (das wär' doch was
- für'n Erben!) }
- END;
- UNTIL Finished;
- Crt^.ClrScr;
- Crt^.Done; { <-- aufräumen nicht vergessen ! }
- END.
- (* ----------------------------------------------------- *)
- (* Ende von CRTDEMO.PAS *)
- (* ----------------------------------------------------- *)