200 lines
3.3 KiB
Plaintext
200 lines
3.3 KiB
Plaintext
|
|
|||
|
{ Copyright (c) 1989 by Borland International, Inc. }
|
|||
|
|
|||
|
unit Screen;
|
|||
|
{ Turbo Pascal 5.5 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.
|
|||
|
|