239 lines
5.1 KiB
Plaintext
239 lines
5.1 KiB
Plaintext
|
|
|||
|
{ Copyright (c) 1989 by Borland International, Inc. }
|
|||
|
|
|||
|
unit Count;
|
|||
|
{ Turbo Pascal 5.5 object-oriented example.
|
|||
|
See BREAKOUT.PAS.
|
|||
|
This unit provides several text display object types, most of
|
|||
|
which are coupled with various types of counters.
|
|||
|
}
|
|||
|
|
|||
|
interface
|
|||
|
|
|||
|
uses Screen;
|
|||
|
|
|||
|
const
|
|||
|
StrSize = 40;
|
|||
|
|
|||
|
type
|
|||
|
TextStr = String[StrSize];
|
|||
|
TextPtr = ^TextStr;
|
|||
|
|
|||
|
TextString = object(Location)
|
|||
|
Text : TextPtr;
|
|||
|
Attr : Byte;
|
|||
|
constructor Init(InitX, InitY : Integer;
|
|||
|
InitText : TextStr;
|
|||
|
InitAttr : Byte);
|
|||
|
procedure Show; virtual;
|
|||
|
procedure Hide; virtual;
|
|||
|
end;
|
|||
|
|
|||
|
Counter = object(TextString)
|
|||
|
Value : Integer;
|
|||
|
BaseValue : Integer;
|
|||
|
constructor Init(InitValue, InitX, InitY : Integer;
|
|||
|
InitName : TextStr;
|
|||
|
InitAttr : Byte);
|
|||
|
procedure Show; virtual;
|
|||
|
procedure Hide; virtual;
|
|||
|
procedure ShowVal; virtual;
|
|||
|
procedure HideVal; virtual;
|
|||
|
procedure SetValue(NewValue : Integer);
|
|||
|
procedure Reset;
|
|||
|
procedure Increment;
|
|||
|
procedure Decrement;
|
|||
|
procedure Add(Incr : Integer);
|
|||
|
function Equal(TestValue : Integer) : Boolean;
|
|||
|
function GetValue : Integer;
|
|||
|
end;
|
|||
|
|
|||
|
DownCounter = object(Counter)
|
|||
|
Minimum : Integer;
|
|||
|
constructor Init(InitValue, InitX, InitY, InitMin : Integer;
|
|||
|
InitName : TextStr;
|
|||
|
InitAttr : Byte);
|
|||
|
procedure Decrement;
|
|||
|
procedure Add(Incr : Integer);
|
|||
|
function Last : Boolean;
|
|||
|
end;
|
|||
|
|
|||
|
LimitCounter = object(DownCounter)
|
|||
|
Maximum : Integer;
|
|||
|
constructor Init(InitValue, InitX, InitY, InitMin, InitMax : Integer;
|
|||
|
InitName : TextStr;
|
|||
|
InitAttr : Byte);
|
|||
|
procedure Increment;
|
|||
|
procedure Add(Incr : Integer);
|
|||
|
end;
|
|||
|
|
|||
|
implementation
|
|||
|
|
|||
|
uses Crt;
|
|||
|
|
|||
|
constructor TextString.Init(InitX, InitY : Integer;
|
|||
|
InitText : TextStr;
|
|||
|
InitAttr : Byte);
|
|||
|
begin
|
|||
|
Location.Init(InitX, InitY);
|
|||
|
Attr := InitAttr;
|
|||
|
GetMem(Text, Length(InitText) + 1);
|
|||
|
Move(InitText, Text^, Length(InitText) + 1);
|
|||
|
end;
|
|||
|
|
|||
|
procedure TextString.Show;
|
|||
|
begin
|
|||
|
Visible := True;
|
|||
|
GoToXY(X, Y);
|
|||
|
TextColor(Attr);
|
|||
|
Write(Text^);
|
|||
|
end;
|
|||
|
|
|||
|
procedure TextString.Hide;
|
|||
|
begin
|
|||
|
Visible := False;
|
|||
|
GoToXY(X, Y);
|
|||
|
TextAttr := Attr;
|
|||
|
Write('' : Length(Text^));
|
|||
|
end;
|
|||
|
|
|||
|
constructor Counter.Init(InitValue, InitX, InitY : Integer;
|
|||
|
InitName : TextStr;
|
|||
|
InitAttr : Byte);
|
|||
|
begin
|
|||
|
TextString.Init(InitX, InitY, InitName, InitAttr);
|
|||
|
BaseValue := InitValue;
|
|||
|
Value := InitValue;
|
|||
|
end;
|
|||
|
|
|||
|
procedure Counter.Show;
|
|||
|
begin
|
|||
|
Visible := True;
|
|||
|
GoToXY(X, Y);
|
|||
|
TextColor(Attr);
|
|||
|
Write(Text^, ': ', Value);
|
|||
|
end;
|
|||
|
|
|||
|
procedure Counter.Hide;
|
|||
|
begin
|
|||
|
Visible := False;
|
|||
|
GoToXY(X, Y);
|
|||
|
TextAttr := Attr;
|
|||
|
Write('' : Length(Text^) + 7);
|
|||
|
end;
|
|||
|
|
|||
|
procedure Counter.ShowVal;
|
|||
|
begin
|
|||
|
Visible := True;
|
|||
|
GoToXY(X + Length(Text^) + 2, Y);
|
|||
|
TextColor(Attr);
|
|||
|
Write(Value);
|
|||
|
end;
|
|||
|
|
|||
|
procedure Counter.HideVal;
|
|||
|
begin
|
|||
|
Visible := False;
|
|||
|
GoToXY(X + Length(Text^) + 2, Y);
|
|||
|
TextAttr := Attr;
|
|||
|
Write('' : 5);
|
|||
|
end;
|
|||
|
|
|||
|
procedure Counter.SetValue(NewValue : Integer);
|
|||
|
var
|
|||
|
Vis : Boolean;
|
|||
|
begin
|
|||
|
Vis := Visible;
|
|||
|
if Vis then
|
|||
|
HideVal;
|
|||
|
Value := NewValue;
|
|||
|
if Vis then
|
|||
|
ShowVal;
|
|||
|
end;
|
|||
|
|
|||
|
procedure Counter.Increment;
|
|||
|
begin
|
|||
|
SetValue(Value + 1);
|
|||
|
end;
|
|||
|
|
|||
|
procedure Counter.Decrement;
|
|||
|
begin
|
|||
|
SetValue(Value - 1);
|
|||
|
end;
|
|||
|
|
|||
|
procedure Counter.Add(Incr : Integer);
|
|||
|
begin
|
|||
|
SetValue(Value + Incr);
|
|||
|
end;
|
|||
|
|
|||
|
procedure Counter.Reset;
|
|||
|
begin
|
|||
|
SetValue(BaseValue);
|
|||
|
end;
|
|||
|
|
|||
|
function Counter.Equal(TestValue : Integer) : Boolean;
|
|||
|
begin
|
|||
|
Equal := (Value = TestValue);
|
|||
|
end;
|
|||
|
|
|||
|
function Counter.GetValue : Integer;
|
|||
|
begin
|
|||
|
GetValue := Value;
|
|||
|
end;
|
|||
|
|
|||
|
constructor DownCounter.Init(InitValue, InitX, InitY, InitMin : Integer;
|
|||
|
InitName : TextStr;
|
|||
|
InitAttr : Byte);
|
|||
|
begin
|
|||
|
Counter.Init(InitValue, InitX, InitY, InitName, InitAttr);
|
|||
|
Minimum := InitMin;
|
|||
|
end;
|
|||
|
|
|||
|
procedure DownCounter.Decrement;
|
|||
|
begin
|
|||
|
if Value > Minimum then
|
|||
|
Counter.Decrement;
|
|||
|
end;
|
|||
|
|
|||
|
procedure DownCounter.Add(Incr : Integer);
|
|||
|
var
|
|||
|
Temp : Integer;
|
|||
|
begin
|
|||
|
Temp := GetValue + Incr;
|
|||
|
if Temp >= Minimum then
|
|||
|
SetValue(Temp);
|
|||
|
end;
|
|||
|
|
|||
|
function DownCounter.Last : Boolean;
|
|||
|
begin
|
|||
|
Last := (Value = Minimum);
|
|||
|
end;
|
|||
|
|
|||
|
constructor LimitCounter.Init(InitValue,
|
|||
|
InitX,
|
|||
|
InitY,
|
|||
|
InitMin,
|
|||
|
InitMax : Integer;
|
|||
|
InitName : TextStr;
|
|||
|
InitAttr : Byte);
|
|||
|
begin
|
|||
|
DownCounter.Init(InitValue, InitX, InitY, InitMin, InitName, InitAttr);
|
|||
|
Maximum := InitMax;
|
|||
|
end;
|
|||
|
|
|||
|
procedure LimitCounter.Increment;
|
|||
|
begin
|
|||
|
if Value < Maximum then
|
|||
|
Counter.Increment;
|
|||
|
end;
|
|||
|
|
|||
|
procedure LimitCounter.Add(Incr : Integer);
|
|||
|
var
|
|||
|
Temp : Integer;
|
|||
|
begin
|
|||
|
Temp := Value + Incr;
|
|||
|
if (Temp <= Maximum) and (Temp >= Minimum) then
|
|||
|
SetValue(Temp);
|
|||
|
end;
|
|||
|
|
|||
|
end.
|
|||
|
|