delphi中,如何对CHART图表进行单点添加注释?

liuhuan992 2009-06-24 08:15:55

如图,
我所说的不是给所有点都添加注释,只是想把给定的几个点,或一个点添加上注释!
不是如下代码所得出的结果:
Series.Marks.Visible:=true;
Series.Marks.Style:=smsValue;
...全文
397 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
火龙岛主 2009-06-24
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 liuhuan992 的回复:]
SmallHand 请看图片,我不是想添加label项,是添加注释项,是图中的黄色标释44!
[/Quote]
我做的就是图上的效果,你的图实际上就是添加了点啊,设置了三角形Diamand的形状并显示Mark.
告诉你的方法是动态添加的,你也可以手工尝试达到你的效果!
xinxinshou2009 2009-06-24
  • 打赏
  • 举报
回复
用这种方法添加series,有很多好处。在不影响外观的前提下,可以更方便的进行操作,不光是添加注释,而且可以很方便的计算数量:series2.count。另外添加新的series,也可以随意改变某些series的边框颜色
xinxinshou2009 2009-06-24
  • 打赏
  • 举报
回复
给你一个很简单的思路,代码我就不写了。

再添加一个series2,所有取值都跟series1相同,这样的话,在图上series2就完全覆盖住series1了,表面上看起来,还是只有一个series。然后对series2的取值进行筛选,只留下几个你所需的点,这样操作,一点都不影响外观,反而你可以在筛选出来的series2上可以进行全部的marks操作
liuhuan992 2009-06-24
  • 打赏
  • 举报
回复
SmallHand 请看图片,我不是想添加label项,是添加注释项,是图中的黄色标释44!
火龙岛主 2009-06-24
  • 打赏
  • 举报
回复
var
vPoint: TPointSeries;
begin
vPoint := TPointSeries.Create(chart1);
vPoint.ParentChart := chart1;
vPoint.Title := 'xxxx';
vPoint.Marks.Visible := true;
vPoint.AddXY( XValues.Last+1,
(YValues.Last/YValues.Multiplier)+(Random(ChartSamplesMax)-(ChartSamplesMax/2)),
'',clTeeColor);

...
end;
liuhuan992 2009-06-24
  • 打赏
  • 举报
回复
Series1.Marks.Draw;//语句是没有后面的参数项的(i,clWhite,'',Series1.Marks.Positions.Position[i]);
bdmh 2009-06-24
  • 打赏
  • 举报
回复
使用Series1.Marks.Draw,必须将marks的visible设为true才行
liuhuan992 2009-06-24
  • 打赏
  • 举报
回复
很感谢楼上bdmh 的热心,也很想说你是正确的,
首先,
Chart1.Canvas.TextOut(x,y,'字符串');//x,y就是你要取得的点的坐标的,x,y值
是可以使用的,但,chart上点的座标不好把握,
其次,
Series1.Marks.Draw(i,clWhite,'',Series1.Marks.Positions.Position[i]);
该语句为病句,无法执行,
在delphi中,series1.marks.draw;只有该方法,所以后续的参数无法使用!
还望各位前辈写出正解,谢谢!
bdmh 2009-06-24
  • 打赏
  • 举报
回复

var
i:Integer;
begin
for i :=0 to Series1.XValues.Count - 1 do
begin
Chart1.Canvas.TextOut(x,y,'字符串');//x,y就是你要取得的点的坐标的,x,y值
end;
end;


或者,如果可以的话,你可以替换marks的文字,换成你的文字

var
i:Integer;
begin
for i :=0 to Series1.XValues.Count - 1 do
begin
Series1.Marks.Draw(i,clWhite,'',Series1.Marks.Positions.Position[i]);
end;
end;
liuhuan992 2009-06-24
  • 打赏
  • 举报
回复
能否写出相应代码?
小弟不胜感激!
bdmh 2009-06-24
  • 打赏
  • 举报
回复
不能

可以根据点的坐标,在Chart1.Canvas上 画出你的提示
火龙岛主 2009-06-24
  • 打赏
  • 举报
回复
原理是在需要添加注释的地方添加点,使点的Mark.Visible := True;
这样就可以实现你想要的结果了。
换一个角度,可能会有意想不到的效果。
liuhuan992 2009-06-24
  • 打赏
  • 举报
回复
xinxinshou2009 你所说的方法,也是一种恩路,但如果如我图中所示的那样,我只显示一个点的注释,我就要进行多次的点删除工作,如此就会进行大量的操作,
而对于smallhand所述操作倒是一个简单的算法.

5,927

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧