home *** CD-ROM | disk | FTP | other *** search
-
- { Copyright (c) 1989,90 by Borland International, Inc. }
-
- unit Screen;
- { Turbo Pascal 6.0 object-oriented example.
- See BREAKOUT.PAS.
- This unit provides several objects for dealing with the screen.
- }
-
- interface
-
- uses Crt, Dos;
-
- type
- Location = object
- X, Y : Integer;
- Visible : Boolean;
- constructor Init(InitX, InitY : Integer);
- procedure Relocate(NewX, NewY : Integer);
- procedure MoveTo(NewX, NewY : Integer); virtual;
- procedure Show; virtual;
- procedure Hide; virtual;
- function GetX : Integer;
- function GetY : Integer;
- function IsVisible : Boolean;
- end;
-
- Cursor = object(Location)
- OldCursor : Integer;
- TempCursor : Integer;
- constructor Init;
- procedure Show; virtual;
- procedure Hide; virtual;
- procedure SetCursor(NewCursor : Integer);
- function GetCursor : Integer;
- procedure MoveTo(NewX, NewY : Integer); virtual;
- procedure Save;
- procedure Restore;
- procedure Speedup;
- procedure Slowdown;
- end;
-
- SaveScreen = object(Cursor)
- OldAttr : Byte;
- constructor Init;
- procedure Save;
- procedure Restore;
- end;
-
- implementation
-
- procedure SetCursorSpeed(NewSpeed : Word);
- begin
- Port[$60] := $F3;
- Delay(200);
- Port[$60] := NewSpeed;
- end;
-
- constructor Location.Init(InitX, InitY : Integer);
- begin
- X := InitX;
- Y := InitY;
- Visible := False;
- end;
-
- procedure Location.Relocate(NewX, NewY : Integer);
- begin
- X := NewX;
- Y := NewY;
- end;
-
- procedure Location.MoveTo(NewX, NewY : Integer);
- var
- Vis : Boolean;
- begin
- Vis := Visible;
- if Vis then Hide;
- X := NewX;
- Y := NewY;
- if Vis then Show;
- end;
-
- procedure Location.Show;
- begin
- Visible := True;
- end;
-
- procedure Location.Hide;
- begin
- Visible := False;
- end;
-
- function Location.GetX : Integer;
- begin
- GetX := X;
- end;
-
- function Location.GetY : Integer;
- begin
- GetY := Y;
- end;
-
- function Location.IsVisible;
- begin
- IsVisible := Visible;
- end;
-
- constructor Cursor.Init;
- begin
- Location.Init(WhereX, WhereY);
- OldCursor := GetCursor;
- Location.Show;
- end;
-
- procedure Cursor.Show;
- begin
- SetCursor(TempCursor);
- end;
-
- procedure Cursor.Hide;
- begin
- TempCursor := GetCursor;
- SetCursor($2000);
- end;
-
- function Cursor.GetCursor : Integer;
- var
- Reg : Registers;
- begin
- with Reg do
- begin
- AH := 3;
- BH := 0;
- Intr($10, Reg);
- GetCursor := CX;
- end;
- end;
-
- procedure Cursor.SetCursor(NewCursor : Integer);
- var
- Reg : Registers;
- begin
- with Reg do
- begin
- AH := 1;
- BH := 0;
- CX := NewCursor;
- Intr($10, Reg);
- end;
- end;
-
- procedure Cursor.MoveTo(NewX, NewY : Integer);
- begin
- Location.Relocate(NewX, NewY);
- GoToXY(NewX, NewY);
- end;
-
- procedure Cursor.Save;
- begin
- Location.Relocate(WhereX, WhereY);
- OldCursor := GetCursor;
- end;
-
- procedure Cursor.Restore;
- begin
- SetCursor(OldCursor);
- GoToXY(X, Y);
- end;
-
- procedure Cursor.Speedup;
- begin
- SetCursorSpeed(0);
- end;
-
- procedure Cursor.Slowdown;
- begin
- SetCursorSpeed($2C);
- end;
-
- constructor SaveScreen.Init;
- begin
- Cursor.Init;
- OldAttr := TextAttr;
- end;
-
- procedure SaveScreen.Save;
- begin
- Cursor.Save;
- OldAttr := TextAttr;
- end;
-
- procedure SaveScreen.Restore;
- begin
- Cursor.Restore;
- TextAttr := OldAttr;
- ClrScr;
- end;
-
- end.
-