TeeChart用法(网络收集)
默认分类 2010-03-05 21:46:05 阅读788 评论0 字号:大中小
1、TChart Hello world
放一个控件到窗体上,然后写代码加入一个折线数据序列: var Series: TLineSeries; begin Series := TLineSeries.Create(Chart1); Series.Add(100, '头部', clRed); Series.Add(200, '颈部', clGreen); Chart1.AddSeries(Series); end; 这样就会生成一个简单的折线图表,要生成其它类型的数据图表,可以添加不同的数据序列(各种图表的序列类型可以参考帮助文档)。
2.如何设置图表的标题?
TChart组件提供了Title属性可以这是图表的标题,包括标题的内容、字体、对齐方式等都可以通过Title属性设置。 最简单的设置方式: Chart1.Title.Text.Text := '图表的标题';
3.如何修改图表的背景颜色和整个图表的颜色?
TChart是一个窗体控件,可以通过修改Color属性设置图表颜色,这是一种最简单的方式: Chart1.Color := clWhite; 修改图表部分的背景色可以通过BackColor属性来实现: Chart1.BackColor := clGreen; 此外,TChart还提供了渐变的背景支持,通过Gradient控制: Chart1.Gradient.Visible := True; Chart1.Gradient.Direction := gdFromTopLeft; Chart1.Gradient.StartColor := clGreen; Chart1.Gradient.EndColor := clYellow;
4.TChart的3D效果如何控制?
TChart提供了View3D属性,控制是否使用3D效果,View3dWalls属性控制是否显示左侧的3D墙效果
5.如何不显示图表控件生成图表?
很遗憾,TChart是一个Windows窗体控件,必须依附一个窗体或Windows控件才能使用。如果要不显示TChart的话,可以将TChart的Visible属性设为False来使用。下面的例子创建了一个隐藏的TChart来生成图表: var Chart: TChart; S: TChartSeries; TmpFile: string; begin Chart := TChart.Create(nil); try Chart.Parent := Application.MainForm; Chart.Visible := False; Chart.Title.Text.Text := '测试图表'; S := TBarSeries.Create(Chart); Chart.AddSeries(S); S.Title := '嘿嘿'; S.AddXY(1, 56, '一月', clGreen); S.AddXY(2, 67, '二月', clYellow); S.AddXY(3, 34, '三月', clBlue); S.AddXY(4, 78, '四月', clRed); Chart.View3D := False; Chart.BackColor := clWhite; Chart.Gradient.StartColor := clWhite; Chart.Gradient.EndColor := clWhite; Chart.Gradient.Visible := True; TmpFile := Application.ExeName + '.bmp'; Chart.SaveToBitmapFile(TmpFile); Image1.Picture.LoadFromFile(TmpFile); finally Chart.Free; end; end;
TChart
使用经验小结
1、问题:通过Addxy方法给TChart添加标记(Mark)时,发现在TChart的横坐标会随着Mark而变化,后来发现通过以下方法可避免这种情况:双击TChart,点击Axis-> top or bottom ->labels,在styles中将labels的形式改为Value即可!
2、几个有用的属性:
图表上的每个点都是有索引的,就象一个数组一样,在OnClickSeries事件中有个ValueIndex属性,该属性可以得到鼠标所点击的点的索引值(必须将Series的Point设置为可见,鼠标点击到那个点时才可以触发该事件)。
图表上的每个点都是有索引的,就象一个数组一样,在OnClickSeries事件中有个ValueIndex属性,该属性可以得到鼠标所点击的点的索引值(必须将Series的Point设置为可见,鼠标点击到那个点时才可以触发该事件)。
xValue[index]、yValue[index]分别表示图表的索引为index的横纵坐标值,用这两个属性可以读取和设置索引为index的点的值,注意:不要用xValues和yValues,这两个属性也可以达到同样的目的,但是速度非常的慢。因为后两个在进行操作的时候可能要遍历整个图表上的值(个人观点)
在MouseDown,MouseMove,Mouseup中,可以利用xScreentoValue(x),yScreentoValue(y)得到鼠标当时所在点对应在图表上的横纵坐标值。
e.g......
private
Nowindex:Integer;
Cantuo:boolean;
Nowindex:Integer;
Cantuo:boolean;
........
procedure TfrmMain.Chart1ClickSeries(Sender: TCustomChart;
Series: TChartSeries; ValueIndex: Integer; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
NowIndex:=ValueIndex;
end;
Series: TChartSeries; ValueIndex: Integer; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
NowIndex:=ValueIndex;
end;
procedure TfrmMain.Chart1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Cantuo:=true;
Shift: TShiftState; X, Y: Integer);
begin
Cantuo:=true;
end;
procedure TfrmMain.Chart1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Cantuo:=false;
end;
Shift: TShiftState; X, Y: Integer);
begin
Cantuo:=false;
end;
procedure TfrmMain.Chart1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if Cantuo then
begin
Series1.yValue[NowIndex]:= Series1.yScreenToValue(y) ;
end;
end;
Y: Integer);
begin
if Cantuo then
begin
Series1.yValue[NowIndex]:= Series1.yScreenToValue(y) ;
end;
end;
这里即实现了可以在图表中拖动某一个点使其在纵轴上变化位置
1.4 [
问题极其使用技巧
]
1.4.1
TChart
中如何实现只有
Y
轴的放大与缩小功能?
设置BottomAxis或者LeftAxis的Automatic:=false并同时设置Minimum,Maximum属性
1.4.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;
1.4.3
如何删除一个图形中的一个点?
使用Series的delete 方法
1.4.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 ;
1.4.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 );
1.4.6
如何在
chart
中画出的曲线某个点上标记出该点的值?
Series.Marks.Visible:=true;
Series.Marks.Style:=smsValue;
1.4.7
如何设置横轴或者纵轴的增长率?
Chart.BottomAxis.Increment := DataTimeStep[ dtOneHour ] ;
Chart.RightAxis.Increment := 1000;
1.4.8
如何对图象进行缩放?
TChart的ZoomRect或者ZoomPercent方法 (Pie图可能不支持缩放)
1.5 [TChart
可以绘制的图形
]
1.5.1
Line ( TLineSeries)
1.5.2
FastLine (TFastLineSeries)
相对
Line
来说,它损耗了某些属性从而来实现快速绘制
1.5.3
Bar (TBarSeries)
1.5.4
Horizontal bar (THorizBarSeries)
1.5.5
Area (TAreaSeries)
1.5.6
Point (TPointSeries)
1.5.7
Pie (TPieSeries)
1.5.8
Arrow (TArrowSeries)
1.5.9
Bubble (TBubbleSeries)
1.5.10
Gantt (TGanttSeries)
1.5.11
Sharp (TChartShape)
1.6 [TChart
的实时绘制
]
实时绘制对机器性能要求比较高,因此我们在编程的时候要注意下面几个方面:
ü 使用2D图形
ü 是Chart尽可能包含少的点
ü 如果需要,可以移除(remove)chart的legend(?????)和Title
ü 使用默认的
字体和字体大小
ü 使用FastLineSeries
ü 使用实体(solid)画笔和画刷格式
ü 尽量避免使用圆形和环行bar样式
ü 不要使用背景图片和渐变效果样式
ü 把Chart的BevelInner和BevelOUter属性设置为bcNone
ü 如果需要,把TChart的AxisVisible属性设置为False
ü 把BufferedDisplay设置为false可以加速chart的重绘
1.7 [Scrolling]
TChart有4中scroll选择(AllowPanning属性),分别是 不允许Scroll ( pmNone) ; 水平Scroll (pmHorizontal) ; 垂直Scroll (pmVertical) ; 水平和垂直Scroll (pmBoth)
Procedure Scroll(Const Offset:Double; CheckLimits:Boolean);
例子如下:
Chart1.BottomAxis.Scroll( 1000, True );这段代码也等同于
With Chart1.BottomAxis do
Begin
Automatic:=false;
SetMinMax( Minimum+1000, Maximum+1000 );
End;
1.8
[TChart
中的全局变量
]
1.9 ü TeeScrollMouseButton := mbRight;设置鼠标右键为TChart滚动键(默认)
ü TeeScrollKeyShift := [ ssCtrl ]; 要按住Control键才可以使Scroll滚动
1.9 [TChartSerries
使用技巧
]
1.9.1
运行时候创建一个
Serries,
三种方法:
1.Var MySeries : TBarSeries ;
MySeries := TBarSeries.Create( Self );
MySeries.ParentChart := Chart1 ;
2.Chart1.AddSeries( TBarSeries.Create( Self ) );
3.Var MyClass : TChartSeriesClass;
MyClass := TBarSeries ;
Chart1.AddSeries( MyClass.Create( Self ) );
1.9.2
获得
TChart
中的
Serries
数组,也有三种方法
1.MySeries := Chart1.SeriesList [ 0 ]
2.MySeries := Chart1.Series [ 0 ]
3.MySeries := Chart1 [ 0 ]
1.9.3
SerriesCount
属性获得
SeriesList
中
Series
的个数
1.9.4
隐藏
TChart
中的
Series
有三种方法,但是效果不等价
1. Series1.Active:=False; 仅仅隐藏,当设置为true的时候还可以显示出来
2. Series1.ParentChart:=nil ; 隐藏,重新设置ParentChart为TChart时候可以显示
3. Series1.Free; 删除了Series. 不可以恢复
1.9.5
TChart
中的数据排序
With Series1 do
begin
YValues.Order:=loAscending;
YValues.Sort;
Repaint;
end;
? 定位一个点(Loacate a point)
Series1.XValues.Locate(123);
? XValue和YValue都拥有的属性Total , TotalABS , MaxValue , MinValue
delphi
中
TeeChart
的各种属性
TeeChart使用指南
TeeChart控件介绍
TeeChart Pro ActiveX是西班牙Steema SL公司开发的图表类控件,主要用来生成各种复杂的图表。熟悉Delphi和C++ Builder的编程人员对它不会陌生,因为在Delphi和C++ Builder里包括了TeeChart的VCL版本。
TeeChart使用目的
如果你需要在程序中制作曲线图、条状图、饼状图等等,使用这个控件都将是你的明智选择。它因为是已经被封装好的产品,所以使用方便,可控性强,不过有的时候会有点小BUG。最好能找到源码,并自己打几个补丁。
TeeChart名词解释
Series
Axis
Scales
Line
Bar
Pie
TeeChart配置说明
Chart?Series(序列) : 在一个图表中可以有一个或多个序列,每个序列可以有不同的显示类型,如Line、Bar、Pie等等。
Add… 添加新的序列
Fast Line(TFastLineSeries简单曲线图)、
Line(TLineSeries 3D曲线图)、
Bar(TBarSeries竖条状图)、
Horiz. Bar(THorizBarSeries横条状图)
Area(TAreaSeries 区域图)、
Point(TPointSeries 点状图)、
Pie(TPieSeries 饼状图)、
Shape(TChartShape 实体图)、
Gantt(TGanttSeries 甘特图)、
Arrow(TArrowSeries 箭头图)、
Bubble(TBubbleSeries 泡泡图)
Series?Format:修改序列的格式
Series?Point:修改序列中点的样子
Series?General:对序列的配置,包括Axis,Legend,Formats,Cursor。
Series?Marks:是否显示序列中每个点的值。
Series?Data Source:数据源。可以采用No Data,Random Values,Function。
Title… 修改序列的名称。
Change… 修改序列的类型,可以从Line改变成Bar或者Pie。
Chart?General:一些基本的参数设置。
Print Priview…:打印及打印预览
Export…:输出
Margins:页边空白
Allow Zoom:允许缩放
Animated Zoom:缩放过程是否是动态的,还是一次成功。(如果图的点太多时,可以打开这个功能)
Allow Scroll:滚动条
Chart?Axis : 控制图表坐标轴(上、下、左、右、深)的属性
Show Axis:是否显示坐标轴
Chart?Axis?Scales:调整坐标轴的比例
Automatic:可以自动处理最大与最小值,也可以手工设置。
Change…:可以自动处理增量,也可以手工设置。
Logarithmic:对数的
Inverted:反向的
Chart?Axis?Title:设置坐标轴的标题
Title:标题
Angle:标题的角度
Size:标题的宽度
Font…:标题的字体
Chart?Axis?Labels:设置坐标轴的标签
Titles :
Chart?Legend(图例):图表中的一个长方形的用来显示图例标注的区域。可以标注Series的名称或者Series中的项目和数值。
Visible
Back Color
Font
Frame
Position
Margin
Legend Style
Text Style
Resize Chart
Inverted
%Top Pos
%Color Width
Dividing Lines…
Shadow
Chart?Panel (面板):Panel可以设置图表的背景。可以使用渐变的颜色或者图像文件作为整个图表的背景
Bevel Inner? (Bevel Innner ) Width
Bevel Outer ?(Bevel Outer) Width
Back Image:图表的背景图
Style:(Stretch伸展, Tile瓦片, Center居中)
Inside:只显示在背后壁上
Panel Color:Panel的Inner的颜色
Border:给控件加边界
Gradient(梯度):梯度显示颜色
Visible、Start Color…、End Color…、
Direction(方向):上下、左右、从中间
Chart?Paging :图表有几页组成
Points Per Page(每页显示几个点):0为所有的点显示在一页,其他按数字处理。
Scale Last Page:最后一页按比例显示,使之充满整个图表。
Chart?Walls(壁)
Left Walls:Y轴的平面
Bottom Walls:X轴的平面
Back Walls:背后的平面
Pattern…(模式):=(Solid实心,None无,Horizontal竖条纹,Vertical横条纹,
Diagonal对角线,Back.Diagonal反向对角线,Cross十字线,DiagonalCross对角十字线);
Border…(边线):=(Solid实线, Dash划线, Dot点,
Dash Dot线点, Dash Dot Dot线点点, Small Dots小点)
Transparent (透明)
Chart?3D
3Dimensions(维):是否3维显示
Orthogonal(直角的):3维显示为直角显示,则Elevation,Rotaion,Perspective被屏蔽
ZoomText:坐标数字与图形一起缩放
Zoom:图形的缩放
Rotaion(旋转):关闭Orthogonal后,可以在Y轴上旋转
Elevation(正视图) :关闭Orthogonal后,可以在X轴上旋
Horiz. Offset:在X轴移动图形
Vert. Offset:在Y轴移动图形
Perspective(透视) :关闭Orthogonal后,将焦点沿Z轴移动。
TeeChart使用实例
// AddPages
NewTabSheet := TTabSheet.Create(pgMain);
with NewTabSheet do
begin
Parent := pgMain;
PageControl := pgMain;
Tag := Ord(CountTypeIndex);
Caption := arrCountType[CountTypeIndex];
end;
// AddCharts
NewChart := TChart.Create(NewTabSheet);
with NewChart do
begin
Parent := NewTabSheet;
Title.Text.Add('网间结算' + arrCountType[CountTypeIndex] + '/天分布图');
LeftAxis.Title.Caption := arrCountType[CountTypeIndex];
BottomAxis.Title.Caption := '话单日期';
Legend.Visible := sbLegend.Down;
Legend.Alignment := laBottom;
Legend.LegendStyle := lsSeries;
View3D := sb3D.Down;
Width := NewTabSheet.Width;
Height := NewTabSheet.Height;
end;
// ClearSeries
AChart.Series[SeriesIndex].Free;
// AddSeries
NewSeries := TLineSeries.Create(AChart);
NewSeries.Title := ANameList.Strings[SeriesIndex];
NewSeries.Marks.Visible :=True;
AChart.AddSeries(NewSeries);
// AddNameForSeries
AChart.SeriesList[SeriesIndex].Title:= NewName;
// ShowSeries
AChart.Series[SeriesIndex].Active := True;
// EmptySeries
AChart.Series[SeriesIndex].Clear;
// FillSeries
AChart.Series[SeriesIndex].AddXY();
TeeChart控件介绍
TeeChart Pro ActiveX是西班牙Steema SL公司开发的图表类控件,主要用来生成各种复杂的图表。熟悉Delphi和C++ Builder的编程人员对它不会陌生,因为在Delphi和C++ Builder里包括了TeeChart的VCL版本。
TeeChart使用目的
如果你需要在程序中制作曲线图、条状图、饼状图等等,使用这个控件都将是你的明智选择。它因为是已经被封装好的产品,所以使用方便,可控性强,不过有的时候会有点小BUG。最好能找到源码,并自己打几个补丁。
TeeChart名词解释
Series
Axis
Scales
Line
Bar
Pie
TeeChart配置说明
Chart?Series(序列) : 在一个图表中可以有一个或多个序列,每个序列可以有不同的显示类型,如Line、Bar、Pie等等。
Add… 添加新的序列
Fast Line(TFastLineSeries简单曲线图)、
Line(TLineSeries 3D曲线图)、
Bar(TBarSeries竖条状图)、
Horiz. Bar(THorizBarSeries横条状图)
Area(TAreaSeries 区域图)、
Point(TPointSeries 点状图)、
Pie(TPieSeries 饼状图)、
Shape(TChartShape 实体图)、
Gantt(TGanttSeries 甘特图)、
Arrow(TArrowSeries 箭头图)、
Bubble(TBubbleSeries 泡泡图)
Series?Format:修改序列的格式
Series?Point:修改序列中点的样子
Series?General:对序列的配置,包括Axis,Legend,Formats,Cursor。
Series?Marks:是否显示序列中每个点的值。
Series?Data Source:数据源。可以采用No Data,Random Values,Function。
Title… 修改序列的名称。
Change… 修改序列的类型,可以从Line改变成Bar或者Pie。
Chart?General:一些基本的参数设置。
Print Priview…:打印及打印预览
Export…:输出
Margins:页边空白
Allow Zoom:允许缩放
Animated Zoom:缩放过程是否是动态的,还是一次成功。(如果图的点太多时,可以打开这个功能)
Allow Scroll:滚动条
Chart?Axis : 控制图表坐标轴(上、下、左、右、深)的属性
Show Axis:是否显示坐标轴
Chart?Axis?Scales:调整坐标轴的比例
Automatic:可以自动处理最大与最小值,也可以手工设置。
Change…:可以自动处理增量,也可以手工设置。
Logarithmic:对数的
Inverted:反向的
Chart?Axis?Title:设置坐标轴的标题
Title:标题
Angle:标题的角度
Size:标题的宽度
Font…:标题的字体
Chart?Axis?Labels:设置坐标轴的标签
Titles :
Chart?Legend(图例):图表中的一个长方形的用来显示图例标注的区域。可以标注Series的名称或者Series中的项目和数值。
Visible
Back Color
Font
Frame
Position
Margin
Legend Style
Text Style
Resize Chart
Inverted
%Top Pos
%Color Width
Dividing Lines…
Shadow
Chart?Panel (面板):Panel可以设置图表的背景。可以使用渐变的颜色或者图像文件作为整个图表的背景
Bevel Inner? (Bevel Innner ) Width
Bevel Outer ?(Bevel Outer) Width
Back Image:图表的背景图
Style:(Stretch伸展, Tile瓦片, Center居中)
Inside:只显示在背后壁上
Panel Color:Panel的Inner的颜色
Border:给控件加边界
Gradient(梯度):梯度显示颜色
Visible、Start Color…、End Color…、
Direction(方向):上下、左右、从中间
Chart?Paging :图表有几页组成
Points Per Page(每页显示几个点):0为所有的点显示在一页,其他按数字处理。
Scale Last Page:最后一页按比例显示,使之充满整个图表。
Chart?Walls(壁)
Left Walls:Y轴的平面
Bottom Walls:X轴的平面
Back Walls:背后的平面
Pattern…(模式):=(Solid实心,None无,Horizontal竖条纹,Vertical横条纹,
Diagonal对角线,Back.Diagonal反向对角线,Cross十字线,DiagonalCross对角十字线);
Border…(边线):=(Solid实线, Dash划线, Dot点,
Dash Dot线点, Dash Dot Dot线点点, Small Dots小点)
Transparent (透明)
Chart?3D
3Dimensions(维):是否3维显示
Orthogonal(直角的):3维显示为直角显示,则Elevation,Rotaion,Perspective被屏蔽
ZoomText:坐标数字与图形一起缩放
Zoom:图形的缩放
Rotaion(旋转):关闭Orthogonal后,可以在Y轴上旋转
Elevation(正视图) :关闭Orthogonal后,可以在X轴上旋
Horiz. Offset:在X轴移动图形
Vert. Offset:在Y轴移动图形
Perspective(透视) :关闭Orthogonal后,将焦点沿Z轴移动。
TeeChart使用实例
// AddPages
NewTabSheet := TTabSheet.Create(pgMain);
with NewTabSheet do
begin
Parent := pgMain;
PageControl := pgMain;
Tag := Ord(CountTypeIndex);
Caption := arrCountType[CountTypeIndex];
end;
// AddCharts
NewChart := TChart.Create(NewTabSheet);
with NewChart do
begin
Parent := NewTabSheet;
Title.Text.Add('网间结算' + arrCountType[CountTypeIndex] + '/天分布图');
LeftAxis.Title.Caption := arrCountType[CountTypeIndex];
BottomAxis.Title.Caption := '话单日期';
Legend.Visible := sbLegend.Down;
Legend.Alignment := laBottom;
Legend.LegendStyle := lsSeries;
View3D := sb3D.Down;
Width := NewTabSheet.Width;
Height := NewTabSheet.Height;
end;
// ClearSeries
AChart.Series[SeriesIndex].Free;
// AddSeries
NewSeries := TLineSeries.Create(AChart);
NewSeries.Title := ANameList.Strings[SeriesIndex];
NewSeries.Marks.Visible :=True;
AChart.AddSeries(NewSeries);
// AddNameForSeries
AChart.SeriesList[SeriesIndex].Title:= NewName;
// ShowSeries
AChart.Series[SeriesIndex].Active := True;
// EmptySeries
AChart.Series[SeriesIndex].Clear;
// FillSeries
AChart.Series[SeriesIndex].AddXY();