最近接触得比较多C++Builder的Tchart和TDBchart这两个控件,也在网上搜索了很多资料,我就整理一下把常用的分享一下。
一、显示数据柱数据图表DBChart对象用于在报表中插入图表。双击数据图表对象,可以调出图表编辑器:
(1)Series类型:(a)Format页(数据柱的风格)在Color Each中打勾,就可使用多种颜色显示,color按钮用于设置颜色,Style用于设置图表的风格(Rectangle长方体,Pyramid三角体,Invert.PyramId倒三角体,Cylinder圆柱体,Ellipse圆形,Arrow箭头,Rect.Gradient立体长方体[推荐],Cone不显示),Border按钮设置数据柱的边线属性,Pattern按钮设置数据柱的显示类型,Bar Width设置数据柱间的距离,Bar Offset设置数据柱与纵刻度的距离,(b)General页(数据柱的一般设置)Show in Legend选项是否显示右上角的数据说明,Horizontal Axis设置横刻度的位置,Vertical Axis设置纵刻度的位置,Formats设置数据柱的格式,(c)Marks页(标记,数据内容显示设置)数据内容显示设置:在Style中选相关的选项,标记的类型:Value值、Percent百分率、Label字段内容、Label and Percet字段内容+百分率、Label and Value字段内容+值、Legend与右上角的数据说明一样、Percent Total百分率+值、Label&Percent Total字段内容+百分率+值。Visible选项是否显示标记;Transparent选项是否显示标记的颜色;Clipped选项是否让标记超过刻度;Arrows用于设置标记下垂线的属性。Back Color设置标记的颜色;Font设置标记的字体大小;Border设置标记的边线;(d)Data Source页:(数据连接)要连接图表到数据字段,通过SQL语句查询,取得两个字段的数据(如:品种名,吨数(各品种的合计数))。
(2)General页(图表的普通设置)其中'Print Preview'按钮是用于打印图表。'Zoom'为缩放设置。'Margins(%)'是设置整个图表的位置。
(3)Axis页(轴的相关设置)'Title'页用于设置竖轴的相关属性,Title设置要显示的竖轴的名称'Labels'页中的'Font'按钮用于设置左边刻度的字体大小,Size用于设置各轴的距离,Angle用于设置刻度的宽度,Min.Separation%用于设置刻度的比例。Valuse Format用于设置格式(一般不用改)'Position'页用于位置的设置,Position%是设置刻度位置,Start是设置刻度高度。
(4)Titles页(图表标题的设置)'Font'按钮用于设置字体大小,Back Color设置颜色,Alignment用于设置标题的位置。
(5)Legend页(右上角说明的设置)Visible选项是否显示说明;Back Color设置说明背景的颜色;Font设置说明的字体大小;Frame设置说明的边线;Resize Chart选项用于设置是否让图表覆盖说明;Inverted选项用于设置从左或从右显示字段颜色;Position选项用于设置说明在图表组件中的显示的位置;Margin设置图表的大小;Legend Style设置说明的风格;Text Style设置说明的内容(Plain字段内容、Left Value值+字段、Right Value字段+值、Left Percent百分率+字段、Right Percent字段+百分率、X Value从0开始);Dividing Lines设置说明中是否显示分格线;Shadow设置说明的背景属性。
(7)Walls页(设置刻度的其它属性)。
二、使用方法
静态使用:
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();
三、使用技巧
1、 TChart中如何实现只有Y轴的放大与缩小功能?
设置BottomAxis或者LeftAxis的Automatic:=false并同时设置Minimum,Maximum属性
2、 如何固定TChart中的坐标,不使TChart中的坐标跟随Series的变化而变化?
//设置底座标
with myChart.BottomAxis do
begin
Automatic:=false;
Minimum:=0;
LabelStyle := talText;
end;
//设置左坐标
with myChart.LeftAxis do
begin
Automatic:=false;
Minimum:=0;
Title.Angle:=270;
Title.Font:=Self.Font;
Title.Font.Charset:=ANSI_CHARSET;
Title.Font.Name:='@宋体';
Grid.Visible := False;
end;
//设置右坐标
with myChart.RightAxis do
begin
Automatic:=false;
Title.Font:=Self.Font;
Title.Font.Charset:=ANSI_CHARSET;
Title.Font.Name:='@宋体';
Title.Caption:='累计百分比(%)';
Maximum:=100;
Minimum:=0;
end;
3、 如何删除一个图形中的一个点?
使用Series的delete 方法
4 、 如何修改一个点的X或者Y 值?
LineSeries1.YValue[3] := 27.1 ;
{In Bubble Series}
BubbleSeries1.RadiusValues.Value[ 8 ] := 8.1 ;
{In Pie Series}
PieSeries1.PieValues.Value[ 3 ] := 111 ;
5 、如果横坐标是时间(日期),如何进行设置?
{First, you need to set the DateTime property to True in the desired X and/or Y values list.}
LineSeries1.XValues.DateTime := True ;
{Second, use the same above described methods, but give the values as Date, Time or DateTime values}
LineSeries1.AddXY( EncodeDate( 1996 , 1 , 23 ) , 25.4 , 'Barcelona' , clGreen );
6、如何在chart中画出的曲线某个点上标记出该点的值?
Series.Marks.Visible:=true;
Series.Marks.Style:=smsValue;
7、 如何设置横轴或者纵轴的增长率?
Chart.BottomAxis.Increment := DataTimeStep[ dtOneHour ] ;
Chart.RightAxis.Increment := 1000;