home *** CD-ROM | disk | FTP | other *** search
- unit BasicMul;
-
- interface
-
- uses
- WinProcs,WinTypes, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- TeEngine, Series, StdCtrls, ExtCtrls, TeeProcs, Chart, TeeLisB, TeeComma;
-
- type
- TBasicMultipleAxes = class(TForm)
- Chart1: TChart;
- Panel1: TPanel;
- Button1: TButton;
- Memo1: TMemo;
- Series1: TFastLineSeries;
- Series2: TFastLineSeries;
- Series3: TFastLineSeries;
- Series4: TFastLineSeries;
- Series5: TFastLineSeries;
- Panel2: TPanel;
- ChartListBox1: TChartListBox;
- Label1: TLabel;
- Label2: TLabel;
- Label3: TLabel;
- ScrollBar1: TScrollBar;
- ScrollBar2: TScrollBar;
- ScrollBar3: TScrollBar;
- TeeCommander1: TTeeCommander;
- RGAxis: TRadioGroup;
- CBOtherSide: TCheckBox;
- Button2: TButton;
- CBGrid: TCheckBox;
- procedure Button1Click(Sender: TObject);
- procedure FormCreate(Sender: TObject);
- procedure ChartListBox1OtherItemsChange(Sender: TObject);
- procedure ScrollBar1Change(Sender: TObject);
- procedure ScrollBar2Change(Sender: TObject);
- procedure ScrollBar3Change(Sender: TObject);
- procedure FormShow(Sender: TObject);
- procedure RGAxisClick(Sender: TObject);
- procedure Button2Click(Sender: TObject);
- procedure CBGridClick(Sender: TObject);
- procedure TeeCommander1ChartMouseMove(Sender: TObject;
- Shift: TShiftState; X, Y: Integer);
- procedure TeeCommander1ChartMouseDown(Sender: TObject;
- Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
- procedure TeeCommander1ChartMouseUp(Sender: TObject;
- Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
- private
- { Private declarations }
- public
- { Public declarations }
- Selected : TChartSeries;
- DragAxis : TChartAxis;
- OldX,
- OldY : Integer;
- end;
-
- var
- BasicMultipleAxes: TBasicMultipleAxes;
-
- implementation
-
- {$R *.DFM}
-
- procedure TBasicMultipleAxes.Button1Click(Sender: TObject);
- begin
- Close;
- end;
-
- Procedure ReUseAxisForSeries( ASeries1,ASeries2:TChartSeries );
- begin
- ASeries2.CustomHorizAxis:=ASeries1.CustomHorizAxis;
- ASeries2.CustomVertAxis:=ASeries1.CustomVertAxis;
- end;
-
- Procedure SetNewAxis( Axis:TChartAxis;
- ASeries:TChartSeries;
- IsOtherSide:Boolean;
- AStart,AEnd:Integer;
- APositionPercent:Integer );
- begin
- Axis.Axis.Color:=ASeries.SeriesColor;
- Axis.OtherSide:=IsOtherSide;
- Axis.StartPosition:=AStart;
- Axis.EndPosition:=AEnd;
- Axis.PositionPercent:=APositionPercent;
- end;
-
- Procedure HorizAxisForSeries( ASeries:TChartSeries;
- IsOtherSide:Boolean;
- AStart,AEnd:Integer;
- APositionPercent:Integer );
- Var Axis:TChartAxis;
- begin
- Axis:=TChartAxis.Create(ASeries.ParentChart);
- Axis.Horizontal:=True;
- Axis.Grid.Visible:=False;
- ASeries.CustomHorizAxis:=Axis;
- SetNewAxis(Axis,ASeries,IsOtherside,AStart,AEnd,APositionPercent);
- end;
-
- Procedure VertAxisForSeries( ASeries:TChartSeries;
- IsOtherSide:Boolean;
- AStart,AEnd:Integer;
- APositionPercent:Integer );
- Var Axis:TChartAxis;
- begin
- Axis:=TChartAxis.Create(ASeries.ParentChart);
- Axis.Horizontal:=False;
- Axis.Grid.Visible:=False;
- ASeries.CustomVertAxis:=Axis;
- SetNewAxis(Axis,ASeries,IsOtherside,AStart,AEnd,APositionPercent);
- end;
-
- procedure TBasicMultipleAxes.FormCreate(Sender: TObject);
- begin
- { Series1 is correctly associated to
- Chart1.LeftAxis and BottomAxis. }
- Series1.GetHorizAxis.Axis.Color:=Series1.SeriesColor;
- Series1.GetVertAxis.Axis.Color:=Series1.SeriesColor;
-
- { For Series2 to Series5, create new axes... }
- HorizAxisForSeries( Series2, True, 0,70,0 );
- VertAxisForSeries( Series2, False, 50,100,-12 );
-
- HorizAxisForSeries( Series3, True, 60,100,-15 );
- VertAxisForSeries( Series3, True, 0,100,0 );
-
- HorizAxisForSeries( Series4, True, 0,60,-15 );
- VertAxisForSeries( Series4, False, 0,50,-12 );
-
- HorizAxisForSeries( Series5, True, 81,100,0 );
- VertAxisForSeries( Series5, True, 0,40,-12 );
-
- { Some nice things... }
- With Series5.GetHorizAxis.LabelsFont do
- begin
- Style:=[fsItalic];
- Size:=12;
- Color:=Series5.SeriesColor;
- end;
-
- { Random values... }
- Series1.FillSampleValues(100);
- Series2.FillSampleValues(100);
- Series3.FillSampleValues(100);
- Series4.FillSampleValues(100);
- Series5.FillSampleValues(100);
- end;
-
- procedure TBasicMultipleAxes.ChartListBox1OtherItemsChange(
- Sender: TObject);
- begin
- With ChartListBox1.SelectedSeries do
- begin
- if RGAxis.ItemIndex=0 then
- With GetHorizAxis do
- begin
- ScrollBar1.Position:=Round(StartPosition);
- ScrollBar2.Position:=Round(EndPosition);
- ScrollBar3.Position:=Round(PositionPercent);
- CBOtherSide.Checked:=OtherSide;
- end
- else
- With GetVertAxis do
- begin
- ScrollBar1.Position:=Round(StartPosition);
- ScrollBar2.Position:=Round(EndPosition);
- ScrollBar3.Position:=Round(PositionPercent);
- CBOtherSide.Checked:=OtherSide;
- end;
- end;
- end;
-
- procedure TBasicMultipleAxes.ScrollBar1Change(Sender: TObject);
- begin
- With ChartListBox1.SelectedSeries do
- if RGAxis.ItemIndex=0 then
- GetHorizAxis.StartPosition:=ScrollBar1.Position
- else
- GetVertAxis.StartPosition:=ScrollBar1.Position
- end;
-
- procedure TBasicMultipleAxes.ScrollBar2Change(Sender: TObject);
- begin
- With ChartListBox1.SelectedSeries do
- if RGAxis.ItemIndex=0 then
- GetHorizAxis.EndPosition:=ScrollBar2.Position
- else
- GetVertAxis.EndPosition:=ScrollBar2.Position
- end;
-
- procedure TBasicMultipleAxes.ScrollBar3Change(Sender: TObject);
- begin
- With ChartListBox1.SelectedSeries do
- if RGAxis.ItemIndex=0 then
- GetHorizAxis.PositionPercent:=ScrollBar3.Position
- else
- GetVertAxis.PositionPercent:=ScrollBar3.Position
- end;
-
- procedure TBasicMultipleAxes.FormShow(Sender: TObject);
- begin
- ChartListBox1OtherItemsChange(Self);
- end;
-
- procedure TBasicMultipleAxes.RGAxisClick(Sender: TObject);
- begin
- ChartListBox1OtherItemsChange(Self);
- end;
-
- procedure TBasicMultipleAxes.Button2Click(Sender: TObject);
-
- Procedure MoveAxisRandom(Axis:TChartAxis);
- begin
- With Axis do
- Case Random(3) of
- 0: StartPosition:=Random(100);
- 1: EndPosition:=StartPosition+Random(100-Round(StartPosition));
- 2: PositionPercent:=Random(100)-15;
- end;
- end;
-
- var tmp:TChartSeries;
- begin
- tmp:=Chart1[Random(Chart1.SeriesCount)];
- if Random(100)<50 then MoveAxisRandom(tmp.GetHorizAxis)
- else MoveAxisRandom(tmp.GetVertAxis);
- end;
-
- Function AxisClicked(AChart:TChart; x,y:Integer):TChartAxis;
- var t:Integer;
- begin
- With AChart.AxesList do
- for t:=0 to Count-1 do
- if TChartAxis(Items[t]).Clicked(x,y) then
- begin
- result:=TChartAxis(Items[t]);
- exit;
- end;
- result:=nil;
- end;
-
- procedure TBasicMultipleAxes.CBGridClick(Sender: TObject);
- begin
- Chart1.LeftAxis.Grid.Visible:=CBGrid.Checked;
- Chart1.BottomAxis.Grid.Visible:=CBGrid.Checked;
- end;
-
- procedure TBasicMultipleAxes.TeeCommander1ChartMouseMove(Sender: TObject;
- Shift: TShiftState; X, Y: Integer);
- var tmp:Double;
- begin
- if Assigned(DragAxis) then
- With DragAxis do
- begin
- if Horizontal then
- begin
- if OtherSide then tmp:=(y-Chart1.ChartRect.Top)/Chart1.ChartHeight
- else tmp:=(Chart1.ChartRect.Bottom-y)/Chart1.ChartHeight;
- end
- else
- begin
- if OtherSide then tmp:=(Chart1.ChartRect.Right-x)/Chart1.ChartWidth
- else tmp:=(x-Chart1.ChartRect.Left)/Chart1.ChartWidth;
- end;
- PositionPercent:=100.0*tmp;
- Chart1.CancelMouse:=True;
- end
- else
- begin
- if AxisClicked(Chart1,x,y)<>nil then
- begin
- Chart1.Cursor:=crTeeHand;
- Chart1.OriginalCursor:=Chart1.Cursor;
- end
- else
- if Chart1.Cursor<>crDefault then
- begin
- Chart1.Cursor:=crDefault;
- Chart1.OriginalCursor:=Chart1.Cursor;
- end;
- end;
- end;
-
- procedure TBasicMultipleAxes.TeeCommander1ChartMouseDown(Sender: TObject;
- Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
- begin
- DragAxis:=AxisClicked(Chart1,x,y);
- Chart1.CancelMouse:=Assigned(DragAxis);
- OldX:=X-Chart1.ChartRect.Left;
- OldY:=Y-Chart1.ChartRect.Top;
- end;
-
- procedure TBasicMultipleAxes.TeeCommander1ChartMouseUp(Sender: TObject;
- Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
- begin
- DragAxis:=nil;
- end;
-
- end.
-