home *** CD-ROM | disk | FTP | other *** search
/ PC Expert 29 / Pce29cd.iso / RUNIMAGE / DELPHI40 / DEMOS / TEECHART / STACKARE.PAS < prev    next >
Pascal/Delphi Source File  |  1998-06-16  |  4KB  |  140 lines

  1. {*********************************************}
  2. { TeeChart Delphi Component Library           }
  3. { Areas Demo                                  }
  4. { Copyright (c) 1995-1996 by David Berneda    }
  5. { All rights reserved                         }
  6. {*********************************************}
  7. unit Stackare;
  8.  
  9. interface
  10.  
  11. { This form shows 3 TAreaSeries components on same Chart.
  12.   Areas can be Stacked or Stacked 100%
  13. }
  14. uses
  15.   SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  16.   Forms, Dialogs, StdCtrls, Teengine, Series, Buttons, Chart, ExtCtrls,
  17.   TeeProcs
  18.   ;
  19.  
  20. type
  21.   TAreasForm = class(TForm)
  22.     Panel1: TPanel;
  23.     RadioGroup1: TRadioGroup;
  24.     Chart1: TChart;
  25.     BitBtn1: TBitBtn;
  26.     AreaSeries1: TAreaSeries;
  27.     AreaSeries2: TAreaSeries;
  28.     AreaSeries3: TAreaSeries;
  29.     CheckBox1: TCheckBox;
  30.     Label1: TLabel;
  31.     CheckBox2: TCheckBox;
  32.     Timer1: TTimer;
  33.     procedure FormCreate(Sender: TObject);
  34.     procedure RadioGroup1Click(Sender: TObject);
  35.     procedure CheckBox1Click(Sender: TObject);
  36.     procedure Chart1MouseMove(Sender: TObject; Shift: TShiftState; X,
  37.       Y: Integer);
  38.     procedure CheckBox2Click(Sender: TObject);
  39.     procedure Timer1Timer(Sender: TObject);
  40.   private
  41.     { Private declarations }
  42.   public
  43.     { Public declarations }
  44.     tmpDelta,tmpCounter,tmpIndex:Longint;
  45.     tmpSeries:TAreaSeries;
  46.   end;
  47.  
  48. implementation
  49.  
  50. {$R *.DFM}
  51.  
  52. { Some random values.... }
  53. procedure TAreasForm.FormCreate(Sender: TObject);
  54.  
  55.   Procedure CreateRandom(Area:TAreaSeries);
  56.   var t:Longint;
  57.       Old:Double;
  58.   begin
  59.     With Area do
  60.     begin
  61.       XValues.DateTime:=False;
  62.       Clear;
  63.       Old:=500+Random(1000);
  64.       for t:=1 to 30 do
  65.       begin
  66.         Old:=Old+Random(50)-25;
  67.         Add( Old,'',clTeeColor);
  68.       end;
  69.       Cursor:=crTeeHand;
  70.     end;
  71.   end;
  72.  
  73. begin
  74.   tmpCounter:=-1;
  75.   tmpSeries:=nil;
  76.   CreateRandom(AreaSeries1);
  77.   CreateRandom(AreaSeries2);
  78.   CreateRandom(AreaSeries3);
  79. end;
  80.  
  81. procedure TAreasForm.RadioGroup1Click(Sender: TObject);
  82. begin
  83.   { Change how areas are displayed. (Stacked, Stacked 100%) }
  84.   AreaSeries1.MultiArea:=TMultiArea(RadioGroup1.ItemIndex);
  85. end;
  86.  
  87. procedure TAreasForm.CheckBox1Click(Sender: TObject);
  88. begin
  89.   Chart1.View3D:=CheckBox1.Checked;  { <-- turn on/off 3d }
  90. end;
  91.  
  92. procedure TAreasForm.Chart1MouseMove(Sender: TObject; Shift: TShiftState;
  93.   X, Y: Integer);
  94.  
  95.   Procedure HitSeries(ASeries:TChartSeries);
  96.   Var tmp:Longint;
  97.   begin
  98.     tmp:=ASeries.Clicked(x,y);
  99.     if tmp<>-1 then
  100.     begin
  101.       Label1.Caption:=ASeries.Name;
  102.       Label1.Font.Color:=ASeries.SeriesColor;
  103.     end;
  104.   end;
  105.  
  106. var t:Longint;
  107. begin
  108.   Label1.Caption:='';
  109.   for t:=0 to Chart1.SeriesCount-1 do HitSeries(Chart1.Series[t]);
  110.   Label1.Visible:=Label1.Caption<>'';
  111. end;
  112.  
  113. procedure TAreasForm.CheckBox2Click(Sender: TObject);
  114. begin
  115.   Timer1.Enabled:=CheckBox2.Checked;
  116.   if Timer1.Enabled then RadioGroup1.ItemIndex:=1;
  117. end;
  118.  
  119. procedure TAreasForm.Timer1Timer(Sender: TObject);
  120. var tmp:Double;
  121. begin
  122.   if (tmpCounter=-1) or (tmpCounter=5) then
  123.   begin
  124.     Case Random(3) of
  125.       0: tmpSeries:=AreaSeries1;
  126.       1: tmpSeries:=AreaSeries2;
  127.       2: tmpSeries:=AreaSeries3;
  128.     end;
  129.     tmpIndex:=Random(tmpSeries.Count);
  130.     tmpCounter:=0;
  131.     With tmpSeries.GetVertAxis do tmpDelta:=Round(Abs(Maximum-Minimum)/50.0);
  132.     if Random(2)=1 then tmpDelta:=-tmpDelta;
  133.   end;
  134.   inc(tmpCounter);
  135.   tmp:=tmpSeries.YValue[tmpIndex];
  136.   if (tmp+tmpDelta)>0 then tmpSeries.YValue[tmpIndex]:=tmp+tmpDelta;
  137. end;
  138.  
  139. end.
  140.