在您的TeeChart的安装文件夹下的Examples文件夹中,可以看到TeeChart的图例示例,这是本教程中介绍的一些技术的例子。
目录 | |
5.1 图例控制 (1). Style(样式)选项卡 (2). 定位图例 (3). 水平图例中的行数 (4). 颜色盒修改 | 5.2 在运行时定制图例内容 (1). OnGetLegendRect 事件 (2). OnGetLegendText事件 (3). OnGetLegendText事件 (4). OnClickLegend 事件 |
5.1.1 Style(样式)选项卡
图例参数可通过Chart Editor(图表编辑器)、Chart(图表)选项卡、Legend(图例)页访问。
关于图例参数的更多信息,参看图例组件的帮助
(1) Legend Style(图例样式)
当图表中只有一个序列时,Legend的默认样式“Automatic(自动)”将会在图例中放置序列点的值。当图表包含多个序列时,“Automatic(自动)”将在图例中添加序列的名称。在编辑器中,使用下拉式组合框来获得除默认值以外的其他值。如果您更改Legend Style(图例样式)来显示值,并且在您的图表中有不止一个序列,那么TeeChart Pro将显示第一个序列的值。您可以使用自定义选项修改显示。参看在运行时定制图例内容
Chart1.Legend.LegendStyle := lsLastValues; //将每个系列的最后一个值放在图例中
(2) Text Style(文本样式)
为了获得可能的图例文本样式列表,参看TextStyle属性。文本样式格式化了图例中的序列条目 (例如,显示值占总数的百分比,等等)。
5.1.2 定位图例 (Position(位置)选项卡选项)
(1) Position(位置)
使用Position(位置)属性有4个缺省位置,顶部、底部、左和右。右是默认位置。图例的默认位置总是在图表之外。为了解更多关于定位图例的信息,请参阅有关customising Legends(定制图例)的章节,
(2) Resize Chart(调整图表大小)
Resize Chart(调整图表大小)属性, 当不启用时,将在图表框区域内绘制图例。这对于一些图例的定位要求来说可能是令人满意的,利用图例的HorizMargin(水平边距)和VertMargin(垂直边距)属性,可以更好地控制与图表框有关的的图例定位。
(3) HorizMargin &VertMargin(水平边距和垂直边距)
Horizmargin 适用于左和右对齐的图例。VertMargin适用于顶和底对齐的图例。改变Horizmargin(水平边距)属性值将会移动与图例相关的图表框,反过来不成立。因此,使一个Horizmargin值为负将会把图表移到图例上(增加图表矩形区域的大小)。然而,这些属性并不是为了重新定位图表上的图例,为了达到这个目标,最好使用 “在运行时定制图例内容”概述的技术
(4) Custom position(定制位置)
将图例Custom:(定制)属性设置为true,然后将图例的Top(顶部)和Left(左侧)像素坐标设置为自定义位置。可选择Percent(百分比)选项,变为百分比。
示例:
With Chart1.Legend do
Begin
CustomPosition:=True;
Top:=100;
Left:=100;
end;
5.1.3 水平图例中的行数
当图例是水平对齐的(顶部或底部)时,可以指定行数: Chart1.Legend.MaxNumRows:=3;
在默认情况下,MaxNumRows是0(zero),这意味着这个图例将显示所有的值,并使用尽可能多的行。
5.1.4 颜色盒修改【编辑器Symbols(符号)选项卡】
在图例中使用Colorwidth属性设置颜色盒的宽度。
示例
With Chart1.Legend do
Begin
//将颜色框移到值列表的右边
Symbol.Position:=spRight;
//将盒子设置为连续的
Symbol.Continuous:=True;
//设置盒子的宽
Colorwidth:=40;
end;
//Hide the Pen of the line between the boxes把行的铅笔隐藏在盒子之间
//这一行取决于序列本身 【这是一个Line Series(行序列)】
Series1.LinePen.Visible:=False;
5.2 在运行时定制图例内容
图例事件提供了完全控制图例的外观和内容的选项
5.2.1 OnGetLegendRect事件
图例外矩形,允许改变图例盒的整体大小和位置。结合OnGetLegendPos一起使用,重新定位图表的图例和内容。
例如,您可以使用CustomPosition来更完美地实现以下步骤(参见上面的部分):
procedure TForm1.Chart1GetLegendRect(Sender: TCustomChart; var Rect: TRect);
begin
//这就把图例盒移到了左边(保留了它们的内容!)
//设置Chart1.Legend.ResizeChart := False; 为了禁止调整图表大小
//因此,将图例放在图表矩形中
Rect.Left := Rect.Left - 100;
Rect.Right := Rect.Right - 100;
end;
5.2.2 OnGetLegendPos 事件
修改图例内容的位置。下面的示例可以使用上面的代码将图例内容移动到新的图例矩形中。
procedure TForm1.Chart1GetLegendPos(Sender: TCustomChart; Index: Integer;
var X, Y, XColor: Integer);
begin
//将图例内容向左移动100个像素,使用OnGetLegendRect
//不要移动颜色盒
X := X - 100;
end;
5.2.3 OnGetLegendText 事件
修改图例内容的文本。
procedure TForm1.Chart1GetLegendText(Sender: TCustomAxisPanel;
LegendStyle: TLegendStyle; Index: Integer; var LegendText: String);
begin
//修改图例文本
LegendText := LegendText + IntToStr(Index);
end;
当将图例放置在图表矩形区域内时,请记住,图例是在序列和轴之前绘制的,并将出现在任何交叉点的下面。
5.2.4 OnClickLegend 事件
当在图例上点击时,获得一个图例项。
procedure TForm1.Chart1ClickLegend(Sender: TCustomChart;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
Var tmp:Integer;
begin
tmp:=Chart1.Legend.Clicked( x,y ) ;
if tmp<>-1 then
ShowMessage( 'Clicked legend item: '+ Chart1.FormattedLegend( tmp ) );
end;
第五章完