home *** CD-ROM | disk | FTP | other *** search
/ Delphi 5 for Professionals / DELPHI5.iso / AddOns / Components / TEECHART / Delphi1_And_Delphi2 / EXAMPLES / EXTENDED / BASICMUL.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1998-10-24  |  8.5 KB  |  303 lines

  1. unit BasicMul;
  2.  
  3. interface
  4.  
  5. uses
  6.   WinProcs,WinTypes, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  7.   TeEngine, Series, StdCtrls, ExtCtrls, TeeProcs, Chart, TeeLisB, TeeComma;
  8.  
  9. type
  10.   TBasicMultipleAxes = class(TForm)
  11.     Chart1: TChart;
  12.     Panel1: TPanel;
  13.     Button1: TButton;
  14.     Memo1: TMemo;
  15.     Series1: TFastLineSeries;
  16.     Series2: TFastLineSeries;
  17.     Series3: TFastLineSeries;
  18.     Series4: TFastLineSeries;
  19.     Series5: TFastLineSeries;
  20.     Panel2: TPanel;
  21.     ChartListBox1: TChartListBox;
  22.     Label1: TLabel;
  23.     Label2: TLabel;
  24.     Label3: TLabel;
  25.     ScrollBar1: TScrollBar;
  26.     ScrollBar2: TScrollBar;
  27.     ScrollBar3: TScrollBar;
  28.     TeeCommander1: TTeeCommander;
  29.     RGAxis: TRadioGroup;
  30.     CBOtherSide: TCheckBox;
  31.     Button2: TButton;
  32.     CBGrid: TCheckBox;
  33.     procedure Button1Click(Sender: TObject);
  34.     procedure FormCreate(Sender: TObject);
  35.     procedure ChartListBox1OtherItemsChange(Sender: TObject);
  36.     procedure ScrollBar1Change(Sender: TObject);
  37.     procedure ScrollBar2Change(Sender: TObject);
  38.     procedure ScrollBar3Change(Sender: TObject);
  39.     procedure FormShow(Sender: TObject);
  40.     procedure RGAxisClick(Sender: TObject);
  41.     procedure Button2Click(Sender: TObject);
  42.     procedure CBGridClick(Sender: TObject);
  43.     procedure TeeCommander1ChartMouseMove(Sender: TObject;
  44.       Shift: TShiftState; X, Y: Integer);
  45.     procedure TeeCommander1ChartMouseDown(Sender: TObject;
  46.       Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  47.     procedure TeeCommander1ChartMouseUp(Sender: TObject;
  48.       Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  49.   private
  50.     { Private declarations }
  51.   public
  52.     { Public declarations }
  53.     Selected : TChartSeries;
  54.     DragAxis : TChartAxis;
  55.     OldX,
  56.     OldY     : Integer;
  57.   end;
  58.  
  59. var
  60.   BasicMultipleAxes: TBasicMultipleAxes;
  61.  
  62. implementation
  63.  
  64. {$R *.DFM}
  65.  
  66. procedure TBasicMultipleAxes.Button1Click(Sender: TObject);
  67. begin
  68.   Close;
  69. end;
  70.  
  71. Procedure ReUseAxisForSeries( ASeries1,ASeries2:TChartSeries );
  72. begin
  73.   ASeries2.CustomHorizAxis:=ASeries1.CustomHorizAxis;
  74.   ASeries2.CustomVertAxis:=ASeries1.CustomVertAxis;
  75. end;
  76.  
  77. Procedure SetNewAxis( Axis:TChartAxis;
  78.                       ASeries:TChartSeries;
  79.                       IsOtherSide:Boolean;
  80.                       AStart,AEnd:Integer;
  81.                       APositionPercent:Integer );
  82. begin
  83.   Axis.Axis.Color:=ASeries.SeriesColor;
  84.   Axis.OtherSide:=IsOtherSide;
  85.   Axis.StartPosition:=AStart;
  86.   Axis.EndPosition:=AEnd;
  87.   Axis.PositionPercent:=APositionPercent;
  88. end;
  89.  
  90. Procedure HorizAxisForSeries( ASeries:TChartSeries;
  91.                               IsOtherSide:Boolean;
  92.                               AStart,AEnd:Integer;
  93.                               APositionPercent:Integer );
  94. Var Axis:TChartAxis;
  95. begin
  96.   Axis:=TChartAxis.Create(ASeries.ParentChart);
  97.   Axis.Horizontal:=True;
  98.   Axis.Grid.Visible:=False;
  99.   ASeries.CustomHorizAxis:=Axis;
  100.   SetNewAxis(Axis,ASeries,IsOtherside,AStart,AEnd,APositionPercent);
  101. end;
  102.  
  103. Procedure VertAxisForSeries( ASeries:TChartSeries;
  104.                              IsOtherSide:Boolean;
  105.                              AStart,AEnd:Integer;
  106.                              APositionPercent:Integer );
  107. Var Axis:TChartAxis;
  108. begin
  109.   Axis:=TChartAxis.Create(ASeries.ParentChart);
  110.   Axis.Horizontal:=False;
  111.   Axis.Grid.Visible:=False;
  112.   ASeries.CustomVertAxis:=Axis;
  113.   SetNewAxis(Axis,ASeries,IsOtherside,AStart,AEnd,APositionPercent);
  114. end;
  115.  
  116. procedure TBasicMultipleAxes.FormCreate(Sender: TObject);
  117. begin
  118.   { Series1 is correctly associated to
  119.     Chart1.LeftAxis and BottomAxis.  }
  120.   Series1.GetHorizAxis.Axis.Color:=Series1.SeriesColor;
  121.   Series1.GetVertAxis.Axis.Color:=Series1.SeriesColor;
  122.  
  123.   { For Series2 to Series5, create new axes... }
  124.   HorizAxisForSeries( Series2, True, 0,70,0 );
  125.   VertAxisForSeries( Series2, False, 50,100,-12 );
  126.  
  127.   HorizAxisForSeries( Series3, True, 60,100,-15 );
  128.   VertAxisForSeries( Series3, True, 0,100,0 );
  129.  
  130.   HorizAxisForSeries( Series4, True, 0,60,-15 );
  131.   VertAxisForSeries( Series4, False, 0,50,-12 );
  132.  
  133.   HorizAxisForSeries( Series5, True, 81,100,0 );
  134.   VertAxisForSeries( Series5, True, 0,40,-12 );
  135.  
  136.   { Some nice things... }
  137.   With Series5.GetHorizAxis.LabelsFont do
  138.   begin
  139.     Style:=[fsItalic];
  140.     Size:=12;
  141.     Color:=Series5.SeriesColor;
  142.   end;
  143.  
  144.   { Random values... }
  145.   Series1.FillSampleValues(100);
  146.   Series2.FillSampleValues(100);
  147.   Series3.FillSampleValues(100);
  148.   Series4.FillSampleValues(100);
  149.   Series5.FillSampleValues(100);
  150. end;
  151.  
  152. procedure TBasicMultipleAxes.ChartListBox1OtherItemsChange(
  153.   Sender: TObject);
  154. begin
  155.   With ChartListBox1.SelectedSeries do
  156.   begin
  157.     if RGAxis.ItemIndex=0 then
  158.     With GetHorizAxis do
  159.     begin
  160.       ScrollBar1.Position:=Round(StartPosition);
  161.       ScrollBar2.Position:=Round(EndPosition);
  162.       ScrollBar3.Position:=Round(PositionPercent);
  163.       CBOtherSide.Checked:=OtherSide;
  164.     end
  165.     else
  166.     With GetVertAxis do
  167.     begin
  168.       ScrollBar1.Position:=Round(StartPosition);
  169.       ScrollBar2.Position:=Round(EndPosition);
  170.       ScrollBar3.Position:=Round(PositionPercent);
  171.       CBOtherSide.Checked:=OtherSide;
  172.     end;
  173.   end;
  174. end;
  175.  
  176. procedure TBasicMultipleAxes.ScrollBar1Change(Sender: TObject);
  177. begin
  178.   With ChartListBox1.SelectedSeries do
  179.   if RGAxis.ItemIndex=0 then
  180.      GetHorizAxis.StartPosition:=ScrollBar1.Position
  181.   else
  182.      GetVertAxis.StartPosition:=ScrollBar1.Position
  183. end;
  184.  
  185. procedure TBasicMultipleAxes.ScrollBar2Change(Sender: TObject);
  186. begin
  187.   With ChartListBox1.SelectedSeries do
  188.   if RGAxis.ItemIndex=0 then
  189.      GetHorizAxis.EndPosition:=ScrollBar2.Position
  190.   else
  191.      GetVertAxis.EndPosition:=ScrollBar2.Position
  192. end;
  193.  
  194. procedure TBasicMultipleAxes.ScrollBar3Change(Sender: TObject);
  195. begin
  196.   With ChartListBox1.SelectedSeries do
  197.   if RGAxis.ItemIndex=0 then
  198.      GetHorizAxis.PositionPercent:=ScrollBar3.Position
  199.   else
  200.      GetVertAxis.PositionPercent:=ScrollBar3.Position
  201. end;
  202.  
  203. procedure TBasicMultipleAxes.FormShow(Sender: TObject);
  204. begin
  205.   ChartListBox1OtherItemsChange(Self);
  206. end;
  207.  
  208. procedure TBasicMultipleAxes.RGAxisClick(Sender: TObject);
  209. begin
  210.   ChartListBox1OtherItemsChange(Self);
  211. end;
  212.  
  213. procedure TBasicMultipleAxes.Button2Click(Sender: TObject);
  214.  
  215.   Procedure MoveAxisRandom(Axis:TChartAxis);
  216.   begin
  217.     With Axis do
  218.     Case Random(3) of
  219.       0: StartPosition:=Random(100);
  220.       1: EndPosition:=StartPosition+Random(100-Round(StartPosition));
  221.       2: PositionPercent:=Random(100)-15;
  222.     end;
  223.   end;
  224.  
  225. var tmp:TChartSeries;
  226. begin
  227.   tmp:=Chart1[Random(Chart1.SeriesCount)];
  228.   if Random(100)<50 then MoveAxisRandom(tmp.GetHorizAxis)
  229.                     else MoveAxisRandom(tmp.GetVertAxis);
  230. end;
  231.  
  232. Function AxisClicked(AChart:TChart; x,y:Integer):TChartAxis;
  233. var t:Integer;
  234. begin
  235.   With AChart.AxesList do
  236.   for t:=0 to Count-1 do
  237.   if TChartAxis(Items[t]).Clicked(x,y) then
  238.   begin
  239.     result:=TChartAxis(Items[t]);
  240.     exit;
  241.   end;
  242.   result:=nil;
  243. end;
  244.  
  245. procedure TBasicMultipleAxes.CBGridClick(Sender: TObject);
  246. begin
  247.   Chart1.LeftAxis.Grid.Visible:=CBGrid.Checked;
  248.   Chart1.BottomAxis.Grid.Visible:=CBGrid.Checked;
  249. end;
  250.  
  251. procedure TBasicMultipleAxes.TeeCommander1ChartMouseMove(Sender: TObject;
  252.   Shift: TShiftState; X, Y: Integer);
  253. var tmp:Double;
  254. begin
  255.   if Assigned(DragAxis) then
  256.   With DragAxis do
  257.   begin
  258.     if Horizontal then
  259.     begin
  260.       if OtherSide then tmp:=(y-Chart1.ChartRect.Top)/Chart1.ChartHeight
  261.                    else tmp:=(Chart1.ChartRect.Bottom-y)/Chart1.ChartHeight;
  262.     end
  263.     else
  264.     begin
  265.        if OtherSide then tmp:=(Chart1.ChartRect.Right-x)/Chart1.ChartWidth
  266.                     else tmp:=(x-Chart1.ChartRect.Left)/Chart1.ChartWidth;
  267.     end;
  268.     PositionPercent:=100.0*tmp;
  269.     Chart1.CancelMouse:=True;
  270.   end
  271.   else
  272.   begin
  273.     if AxisClicked(Chart1,x,y)<>nil then
  274.     begin
  275.       Chart1.Cursor:=crTeeHand;
  276.       Chart1.OriginalCursor:=Chart1.Cursor;
  277.     end
  278.     else
  279.     if Chart1.Cursor<>crDefault then
  280.     begin
  281.       Chart1.Cursor:=crDefault;
  282.       Chart1.OriginalCursor:=Chart1.Cursor;
  283.     end;
  284.   end;
  285. end;
  286.  
  287. procedure TBasicMultipleAxes.TeeCommander1ChartMouseDown(Sender: TObject;
  288.   Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  289. begin
  290.   DragAxis:=AxisClicked(Chart1,x,y);
  291.   Chart1.CancelMouse:=Assigned(DragAxis);
  292.   OldX:=X-Chart1.ChartRect.Left;
  293.   OldY:=Y-Chart1.ChartRect.Top;
  294. end;
  295.  
  296. procedure TBasicMultipleAxes.TeeCommander1ChartMouseUp(Sender: TObject;
  297.   Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  298. begin
  299.   DragAxis:=nil;
  300. end;
  301.  
  302. end.
  303.