最近开发的软件要做个曲线图,从网上搜索后知道了BCB中自带的TeeChart std中有TChart和TDBChart空间可以实现此功能,然而添加控件后即被长长地属性列表和右键菜单吓晕了,几经尝试总算可以画出一个小小的曲线图,赶紧记下来,为以后用。
静态使用:
1. 添加控件:TeeChart std中选择TDBChart;
2.右键选择EditChart...
3.从Chart选项卡Series子页面中点击ADD按钮添加Series
4.切换到Series选项卡的DataSource子页面,从下拉菜单中选择DataSet;
5.然后从dataset下拉框中选择用作数据源的adoquery;
6.然后为adoquery建立连接,输入查询语句,激活获取数据,
7.好了曲线图画出来了,如果只想要2d的曲线则选择Chart选项卡的3D子页面,将3D Dimension的勾选去掉即可;
动态调用:
TADOQuery *ado = new TADOQuery(NULL);
ado->conn;
ado->SQL->Clear();
ado->SQL->Text = "select * from "+IntToStr(id);
cht->Title->Text->SetText("曲线图") ; //cht为TDBChart控件,为控件设置标题
cht->Series[0]->DataSource = ado; //设置数据源
cht->Series[0]->ValueFormat= "#.#"; //设置数据格式
cht->Series[0]->XLabelsSource ="id"; //绑定x轴与数据源的字段“id”
cht->Series[0]->XValues->Name = "时间"; //设置x轴名称
cht->Series[0]->XValues->ValueSource = "id";//绑定x轴数据与数据源的字段“id”
cht->Series[0]->YValues->Name = "值";//设置y轴名称
cht->Series[0]->YValues->ValueSource = "zhi"; //绑定y轴数据与数据源的字段“zhi”
cht->Series[0]->ShowInLegend = false; //设置不显示图例,只显示曲线图
ado->Open();
Decision控件
1,Delphi中提供了大量的决策图表控件
Decision->决策,决断
Cube->立方体
Chart->图表
Series->系列
TeeChart->T型图表
Gallery->图库
Axis->轴线
Gradient->渐变
Legend->图例 传奇
Delphi7中
TChart组件---------->Additional
TDBChart组件----------->Data Controls
Decision Cube组件组里有一整套
TVTChart->ActiveX
ChartFx->ActiveX
图表(Chart)组件的属性绝大多数一样,用法也一样
1,去掉Chart的3D效果 View3D->False
2,标题文字 Title->Text 有字体属性
3,底部文字 Foot->Text 有字体属性
4,去掉轴线->AxisVisible->false
5,BottomAxis RightAxis LeftAxis TopAxis->上下左右的坐标线
6,Frame->Mode->区域色与底色的模式
7,Frame->Style->边框样式
8,Gradient->渐变设置
9,很多属都可在双击Chart进行设置
10,MaxPointsPerPage->每页中容纳的最大数据量->如果为0则表示全部数据都装在一页中,当显示的数据较多时,要设这个属性,只有设了这个属性,才能把数据分页显示!
---------------------------------------------
设置这些就可以得到一个带渐变的Panel
------------------------------------------------------
如何动态增加一个图表?
注意:TChart, TDBChart只是一个图表的容器控件,继承自Panel,而真正的图表是一个不可视的类
-----------------------------------------------------------------------------------------
定义条型(反映不同数据的变化情况,如,每月,每天销售的各大类情况,哪类销售最多,那类销售最少)
var a:TBarSeries;
定义饼型(主要用于不同数据所占的比例,如销售中,各大类的销售情况)
var a:TPieSeries;
定义折线型(反映同一数据的变化,如每天,每月的销售变化, 这样可以看出,哪天,哪月的销售情况最好,最不好)
var a:TLineSeries
注意必须引用Series
如何给一个图表赋值并显示在Chart中???
procedure TForm1.Button2Click(Sender: TObject);
var
a:TLineSeries;
begin
a:=TLineSeries.Create(a);
Chart1.AddSeries(a);
a.AddArray([1,3,5,9,4,2])
end;
如何在已显示出来的图表中增加数据?
方法1
procedure TForm1.Button1Click(Sender: TObject);
begin
Chart1.Series[0].AddXY(12,20,'新加的',clLime);
//12->X轴的坐标 20->Y轴的坐标 Clime是颜色
end;
方法2
procedure TForm1.Button3Click(Sender: TObject);
begin
Chart1.Series[0].Add(14,'打印机',clTeeColor);
Chart1.Series[0].Add(18,'主板',clTeeColor);
Chart1.Series[0].Add(23,'显示器',clTeeColor);
end;
如何动态改变图表背景的渐变
procedure TForm1.Button4Click(Sender: TObject);
begin
Chart1.Gradient.Visible:=True;
Chart1.Gradient.EndColor:=clTeal;
Chart1.Gradient.StartColor:=clWhite;
end;
如何让数据块以不同颜色显示(除了TPieSeries是以不同颜色显示数据块外,其它的默认都是红色),并动态改变标题与页角及Y坐标的标题
procedure TForm1.Button5Click(Sender: TObject);
begin
Chart1.Series[0].ColorEachPoint:=True; //数据块不同色
Chart1.LeftAxis.Title.Caption:='产品销售表';//Y坐标标题
Chart1.Title.Text.Clear;
Chart1.Title.Text.Add('哪个月份的销售记录');//图表标题
Chart1.Foot.Text.Add('图表的说明文字'); //页脚内容
end;
效果如下:
数据太多了,想翻页显示怎么做?
1,设置Chart->MaxPointsPerPage(每页的最大数据量)->只有设置了这个置才可能分页,如果是0表示,全部数据都在一页上
2,可以使用点击左右坐标进行上下翻页也可以点击鼠标的左右键进行翻页
-----------------
procedure TForm1.Chart1ClickBackground(Sender: TCustomChart;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if Button=mbLeft then Chart1.NextPage;
if Button=mbRight then Chart1.PreviousPage;
end;
如何标显特殊数据(当点特殊数据时以不同颜色进行显示)
procedure TForm1.Chart1ClickSeries(Sender: TCustomChart;
Series: TChartSeries; ValueIndex: Integer; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Series.ValueColor[ValueIndex]:=clRed;
end;
动态图表分析技术
DBChart
-------------------------------
动态图表的连接方式分2种
①手工方式连接数据库
②运用DBChart属性,在动行时动态连接数据库
---------------------------------------
1,DBChart对于数据是只图的,所以他连接数据库表,关不是直接挂连ACCESS组件,而是直接连接DataSet,Table,Query,ClientDataSet这样的数据集组件
2,首先要设好数据据组件的连接,再设置DBChart与数据组件连接
方法如下:
①双击DBChart->Series->设置标题,X的数据,Y(Bar)的数据
②,如果是在动行时设置是设置是设置DBChart的如下属性
DBChart->DataSet
DBChart->XLabelSource
DBChart->XValues
DBChart->YValues
----------------------------
procedure TForm1.Button3Click(Sender: TObject);
begin
DBChart1.Series[0].DataSource:=ADODataSet1;
DBChart1.Series[0].XLabelsSource:='酒水名称';
DBChart1.Series[0].XValues.ValueSource:='单价';//写的都是字段名称
DBChart1.Series[0].YValues.ValueSource:='单价';
end;
----------------------------------------
如何让DBChart自动更新数据显示
1,手动更新需设置DBChart->AutoRefresh->Rrue或False
2,自动更新设置DBChart->RefreshInterval的值,以秒为单位,每隔多少秒更新一次数据
如何刷新当前图表?
如果要刷新当前图表而不是所有图表,可以用DBChart->RefreshDataSet过程
如:
DBChart1.RefreshDataSet(ADOQuery1,DBChart.Series[0]);