unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,Series, TeeProcs, TeEngine, Chart, DbChart, StdCtrls, ExtCtrls, DB, ADODB, XPMenu;type TForm1 = class(TForm) Panel1: TPanel; Button1: TButton; DBChart1: TDBChart; ADOConnection1: TADOConnection; ADOQuery1: TADOQuery; Series1: TBarSeries; DBChart2: TDBChart; Series2: TLineSeries; DBChart3: TDBChart; LineSeries1: TLineSeries; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject); var //SeriesOne,SeriesTwo,SeriesThree:TBarSeries; mSeries: array[1..20] of TBarSeries; begin DBChart1.RemoveAllSeries; DBChart1.BottomAxis.LabelStyle:=talText; DBChart1.BottomAxis.Maximum:=100; DBChart1.BottomAxis.Minimum:=20; DBChart1.Foot.Text.Add('foot text'); DBChart1.Canvas.MoveTo(100,200); DBChart1.Canvas.LineTo(184,20); mSeries[1]:=TBarSeries.Create(DBChart1); mSeries[1].Title:='光接点1'; //SeriesOne.ShowInLegend:=false; mSeries[1].Marks.ArrowLength:=8; mSeries[1].Marks.Arrow.Visible:=false; mSeries[1].Marks.Style:=smsValue; adoquery1.Close; adoquery1.Open; mSeries[1].Clear; adoquery1.First; mSeries[1].Add(0,'0',clRed); while not adoquery1.Eof do begin DBChart1.TopAxis.LabelValue(adoquery1.FieldByName('NUM').AsFloat); mSeries[1].Add(adoquery1.FieldByName('NUM').AsInteger,adoquery1.FieldByName('MON').AsString,clRed); adoquery1.Next; end; DBChart1.AddSeries(mSeries[1]); DBChart1.Series[0].HorizAxis:=aBothHorizAxis;// and aBottomAxis; DBChart1.Series[0].VertAxis:=aBothVertAxis; DBChart1.Canvas.EllipseWithZ(180,20,240,120,10); DBChart1.Canvas.TextOut(184,20,'DBChart1.Canvas.TextOut()'); DBChart1.Canvas.TextAlign; //DBChart1.Repaint; end; end.
我搞这个控件还要处理个问题:在DBChart缩放时 series的宽度不知道怎么改变
procedure TChartFrm.Button1Click(Sender: TObject); var myseries:array of TBarSeries; i:integer; begin setlength(myseries,Lanstart.DBGrid1.Columns.Count); DBChart1.View3D:=false; DBChart1.FreeAllSeries; For i:=0 to Lanstart.DBGrid1.Columns.Count-1 do begin myseries[i]:= TBarSeries.Create(self); With myseries[i] do begin ParentChart := DBChart1; s.Style:= smsvalue; DataSource := dataset.ADOQuery2; if i=0 then XLabelsSource := Lanstart.DBGrid1.Columns[i].FieldName else begin XLabelsSource := Lanstart.DBGrid1.Columns[0].FieldName; YValues.ValueSource := Lanstart.DBGrid1.Columns[i].FieldName; end; end; //CheckDatasource; end; end;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,Series, TeeProcs, TeEngine, Chart, DbChart, StdCtrls, ExtCtrls,
DB, ADODB, XPMenu;type
TForm1 = class(TForm)
Panel1: TPanel;
Button1: TButton;
DBChart1: TDBChart;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
Series1: TBarSeries;
DBChart2: TDBChart;
Series2: TLineSeries;
DBChart3: TDBChart;
LineSeries1: TLineSeries;
procedure Button1Click(Sender: TObject); private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
//SeriesOne,SeriesTwo,SeriesThree:TBarSeries;
mSeries: array[1..20] of TBarSeries;
begin
DBChart1.RemoveAllSeries; DBChart1.BottomAxis.LabelStyle:=talText;
DBChart1.BottomAxis.Maximum:=100;
DBChart1.BottomAxis.Minimum:=20;
DBChart1.Foot.Text.Add('foot text');
DBChart1.Canvas.MoveTo(100,200);
DBChart1.Canvas.LineTo(184,20);
mSeries[1]:=TBarSeries.Create(DBChart1);
mSeries[1].Title:='光接点1';
//SeriesOne.ShowInLegend:=false;
mSeries[1].Marks.ArrowLength:=8;
mSeries[1].Marks.Arrow.Visible:=false;
mSeries[1].Marks.Style:=smsValue;
adoquery1.Close;
adoquery1.Open;
mSeries[1].Clear;
adoquery1.First;
mSeries[1].Add(0,'0',clRed);
while not adoquery1.Eof do
begin
DBChart1.TopAxis.LabelValue(adoquery1.FieldByName('NUM').AsFloat);
mSeries[1].Add(adoquery1.FieldByName('NUM').AsInteger,adoquery1.FieldByName('MON').AsString,clRed);
adoquery1.Next;
end;
DBChart1.AddSeries(mSeries[1]);
DBChart1.Series[0].HorizAxis:=aBothHorizAxis;// and aBottomAxis;
DBChart1.Series[0].VertAxis:=aBothVertAxis; DBChart1.Canvas.EllipseWithZ(180,20,240,120,10);
DBChart1.Canvas.TextOut(184,20,'DBChart1.Canvas.TextOut()');
DBChart1.Canvas.TextAlign;
//DBChart1.Repaint;
end;
end.
var
myseries:array of TBarSeries;
i:integer;
begin
setlength(myseries,Lanstart.DBGrid1.Columns.Count);
DBChart1.View3D:=false;
DBChart1.FreeAllSeries;
For i:=0 to Lanstart.DBGrid1.Columns.Count-1 do
begin
myseries[i]:= TBarSeries.Create(self);
With myseries[i] do
begin
ParentChart := DBChart1;
s.Style:= smsvalue;
DataSource := dataset.ADOQuery2;
if i=0 then
XLabelsSource := Lanstart.DBGrid1.Columns[i].FieldName
else
begin
XLabelsSource := Lanstart.DBGrid1.Columns[0].FieldName;
YValues.ValueSource := Lanstart.DBGrid1.Columns[i].FieldName;
end;
end;
//CheckDatasource;
end;
end;