home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Best of German Only 1
/
romside_best_of_german_only_1.iso
/
wissen
/
dos
/
wgraph
/
entpack.exe
/
WGDEMOQ!.EXE
/
GDIAG.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1992-12-20
|
3KB
|
143 lines
{$A+,B-,D-,E-,F+,I-,L-,N-,O+,R-,S-,V-}
UNIT GDiag;
INTERFACE
USES GDecl,
GViews,
GDlg,
GDrivers,
Dos,
Graph;
type PDiagramm=^TDiagramm;
TDiagramm=object(TWindow)
procedure SetPalette; virtual;
procedure InitBackground; virtual;
end;
PFarn=^TFarn;
TFarn=object(TWindow)
xs,ys,k:integer;
x,y,xn,yn,z,s:real;
procedure InitBackground; virtual;
procedure HandleEvent; virtual;
end;
PDiaBgrd=^TDiaBgrd;
TDiaBgrd=object(TBackground)
procedure Draw;virtual;
end;
PFarnBgrd=^TFarnBgrd;
TFarnBgrd=object(TBackground)
procedure Draw;virtual;
end;
IMPLEMENTATION
{Implementation TDiagramm}
procedure TDiagramm.SetPalette;
begin
Palette:=Pal[palRed];
end;
procedure TDiagramm.InitBackground;
var R:TRect;
begin
R:=Frame^.Area;
Bgrd:=new(PDiaBgrd, Init(R));
List^.InsertItem(Bgrd);
end;
{Implementation TFarn}
const ax:array[1..3,1..4] of real = ((0,0.2,-0.15,0.85),
(0,-0.26,0.28,0.04),
(0,0,0,0));
ay:array[1..3,1..4] of real = ((0,0.23,0.26,-0.04),
(0.16,0.22,0.24,0.85),
(0,1.6,0.44,1.6));
p:array[1..4] of real = (0.01,0.07,0.07,0.85);
procedure TFarn.HandleEvent;
var R:TRect;
begin
TWindow.HandleEvent;
R:=Frame^.Area;
with R do
begin
z:=Random;
k:=1;
s:=p[1];
while s<z do
begin
inc(k);
s:=s+p[k];
end;
xn:=ax[1,k]*x+ax[2,k]*y+ax[3,k];
yn:=ay[1,k]*x+ay[2,k]*y+ay[3,k];
x:=xn; y:=yn;
xs:=round(A.x+(Size.x div 2)*(x+8)*0.12);
ys:=round(A.y+((Size.y-24) div 2)*(15-y)*0.1);
PutPixel(xs,ys,LightGreen);
end;
end;
procedure TFarn.InitBackground;
var R:TRect;
begin
x:=0; y:=0; Randomize;
R:=Frame^.Area;
Bgrd:=new(PFarnBgrd, Init(R));
List^.InsertItem(Bgrd);
end;
{Implementation TDiaBgrd}
procedure TDiaBgrd.Draw;
var dx,dy,xm,ym,r:integer;
begin
with Border do
begin
SetFillStyle(XHatchFill,DarkGray);
Bar(A.x,A.y,B.x,B.y);
SetColor(Blue);
dx:=abs(B.x-A.x);
dy:=abs(B.y-A.y);
xm:=A.x+dx div 2;
ym:=A.y+dy div 2;
if dy>dx then r:=trunc(dx*3/8) else r:=trunc(dy*3/8);
SetFillStyle(SolidFill,LightRed);
PieSlice(xm,ym,0,45,r);
SetFillStyle(SolidFill,LightGreen);
PieSlice(xm,ym,45,140,r);
SetFillStyle(SolidFill,LightMagenta);
PieSlice(xm,ym,140,268,r);
SetFillStyle(SolidFill,LightBlue);
PieSlice(xm,ym,268,310,r);
SetFillStyle(SolidFill,Yellow);
PieSlice(xm,ym,310,360,r);
end;
end;
{Implementation TFarnBgrd}
procedure TFarnBgrd.Draw;
begin
with Border do
begin
SetFillStyle(XHatchFill,DarkGray);
Bar(A.x,A.y,B.x,B.y);
end;
end;
END.