94 lines
2.6 KiB
Plaintext
94 lines
2.6 KiB
Plaintext
|
|
|||
|
{ Copyright (c) 1989 by Borland Interational, Inc. }
|
|||
|
|
|||
|
program FigureDemo;
|
|||
|
{ From P-47 of the Object-Oriented Programming Guide.
|
|||
|
Extending FIGURES.PAS with type Arc.
|
|||
|
}
|
|||
|
|
|||
|
uses Crt, DOS, Graph, Figures;
|
|||
|
|
|||
|
type
|
|||
|
Arc = object (Circle)
|
|||
|
StartAngle, EndAngle : Integer;
|
|||
|
constructor Init(InitX, InitY : Integer;
|
|||
|
InitRadius : Integer;
|
|||
|
InitStartAngle, InitEndAngle : Integer);
|
|||
|
procedure Show; virtual;
|
|||
|
procedure Hide; virtual;
|
|||
|
end;
|
|||
|
|
|||
|
var
|
|||
|
GraphDriver : Integer;
|
|||
|
GraphMode : Integer;
|
|||
|
ErrorCode : Integer;
|
|||
|
AnArc : Arc;
|
|||
|
ACircle : Circle;
|
|||
|
|
|||
|
|
|||
|
{--------------------------------------------------------}
|
|||
|
{ Arc's method declarations: }
|
|||
|
{--------------------------------------------------------}
|
|||
|
|
|||
|
constructor Arc.Init(InitX,InitY : Integer;
|
|||
|
InitRadius : Integer;
|
|||
|
InitStartAngle, InitEndAngle : Integer);
|
|||
|
begin
|
|||
|
Circle.Init(InitX, InitY, InitRadius);
|
|||
|
StartAngle := InitStartAngle;
|
|||
|
EndAngle := InitEndAngle;
|
|||
|
end;
|
|||
|
|
|||
|
procedure Arc.Show;
|
|||
|
begin
|
|||
|
Visible := True;
|
|||
|
Graph.Arc(X, Y, StartAngle, EndAngle, Radius);
|
|||
|
end;
|
|||
|
|
|||
|
procedure Arc.Hide;
|
|||
|
var
|
|||
|
TempColor : Word;
|
|||
|
begin
|
|||
|
TempColor := Graph.GetColor;
|
|||
|
Graph.SetColor(GetBkColor);
|
|||
|
Visible := False;
|
|||
|
{ Draw the arc in the background color to hide it }
|
|||
|
Graph.Arc(X, Y, StartAngle, EndAngle, Radius);
|
|||
|
SetColor(TempColor);
|
|||
|
end;
|
|||
|
|
|||
|
|
|||
|
{--------------------------------------------------------}
|
|||
|
{ Main program: }
|
|||
|
{--------------------------------------------------------}
|
|||
|
|
|||
|
begin
|
|||
|
GraphDriver := Detect; { Let the BGI determine what board
|
|||
|
you're using }
|
|||
|
DetectGraph(GraphDriver, GraphMode);
|
|||
|
InitGraph(GraphDriver, GraphMode,'');
|
|||
|
if GraphResult <> GrOK then
|
|||
|
begin
|
|||
|
WriteLn('>>Halted on graphics error:',
|
|||
|
GraphErrorMsg(GraphDriver));
|
|||
|
Halt(1)
|
|||
|
end;
|
|||
|
|
|||
|
{ All descendents of type Point contain virtual methods and }
|
|||
|
{ *must* be initialized before use through a constructor call. }
|
|||
|
|
|||
|
ACircle.Init(151, 82, { Initial X,Y at 151,82 }
|
|||
|
50); { Initial radius of 50 pixels }
|
|||
|
AnArc.Init(151, 82, { Initial X,Y at 151,82 }
|
|||
|
25, 0, 90); { Initial radius of 50 pixels }
|
|||
|
{ Start angle: 0; End angle: 90 }
|
|||
|
|
|||
|
{ Replace AnArc with ACircle to drag a circle instead of an }
|
|||
|
{ arc. Press Enter to stop dragging and end the program. }
|
|||
|
|
|||
|
ACircle.Drag(5); { Parameter is # of pixels to drag by }
|
|||
|
CloseGraph;
|
|||
|
RestoreCRTMode;
|
|||
|
end.
|
|||
|
|
|||
|
|