home *** CD-ROM | disk | FTP | other *** search
- {$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.