TChart的一个问题!200分!UP有分......

hanly2008 2004-06-23 08:38:23
本人看了Delphi5的Demos下面的TChart的例子,研究后有个问题不能解决,如下:
统计某商店的某个商品每个月销售金额,横坐标显示12个月(即一月份、二月份...等等);纵坐标显示销售金额(从0开始)。统计生成图示后,一共有12个柱状。
我现在想实现这个效果:当鼠标移动到某个月的柱子上面后,用Label1来显示出:
“X月份的销售金额为Y元”。X、Y是随着鼠标在12条柱子上移动而改变。该如何做?

我现在只能在Series的OnClick事件中只能得到正确的金额,但是月份得到的始终是坐标值,而不是显示的“X月份”,我的代码如下:
procedure TFrmDKHXX.Series1Click(Sender: TChartSeries; ValueIndex: Integer;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
tmpX,tmpY : Double;
RQ,JE: String;//月份、金额
begin
if Button = mbLeft then
begin
Series1.GetCursorValues(tmpX,tmpY);
RQ := Series1.GetHorizAxis.LabelValue(tmpX);//得到X坐标值
JE := FloatToStr(Series1.GetMarkValue(ValueIndex));//得到Y坐标值

Label1.Caption := RQ+'销售金额为'+JE+'元';
end;
end;
怎么实现“当鼠标移动到某个月的柱子上后,显示正确的月份和销售金额”???
大虾们,帮帮小弟。分不够再加!!!
...全文
205 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
fw0011 2004-06-24
  • 打赏
  • 举报
回复
副乡长...

真是没话说又厉害有裤
lijinghe1 2004-06-24
  • 打赏
  • 举报
回复
procedure TForm1.Chart1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
p : TChartClickedPart;
begin
Chart1.CalcClickedPart(Point(x,y),p);
if p.PointIndex <> -1 then
Series1Click(nil,p.PointIndex,mbLeft,[],x,y);//调用你那个函数,也可以直接写在这
end;
longtusoft 2004-06-24
  • 打赏
  • 举报
回复
这还不简单吗? 多翻翻TCHART的帮助就知道了.我用过这个功能,好像有个SERIES,具体什么函数记不清了,但帮助中有,很简单的.
注意:有个MARK属性,指的就是在一个点上显示标签(数值的).
lzy6204 2004-06-24
  • 打赏
  • 举报
回复
up`
fim 2004-06-24
  • 打赏
  • 举报
回复
up
飞天揽月 2004-06-24
  • 打赏
  • 举报
回复
ip
msfmegryvc 2004-06-24
  • 打赏
  • 举报
回复
up
militant 2004-06-24
  • 打赏
  • 举报
回复
具体没有研究过,不过感觉应该容易的啊,呵呵,先UP再说
hanly2008 2004-06-24
  • 打赏
  • 举报
回复
哎~~~~~~~~~~~~~~~
hanly2008 2004-06-24
  • 打赏
  • 举报
回复
longtusoft(开泰):
送你一句话:千万别把简单的事情不当回事!

今天早上,有个自认为很牛的人到我公司来应聘,问他某某问题,他说:“这个还不简单嘛,翻翻资料就知道了!10分钟就搞定!”老板立马就把他给请走了,呵呵~~~
hanly2008 2004-06-24
  • 打赏
  • 举报
回复
这是本人查看帮助后找到的方法,觉得还是很简单的:
procedure TForm1.Chart1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
Var
aIndex: Integer;
RQ,JE: String;
begin
//首先判断鼠标是否在柱窗图内
if PtInRect( Chart1.ChartRect, Point(X-Chart1.Width3D,Y+Chart1.Height3D) ) then
begin
aIndex:= Series1.Clicked(X,Y);//得到当前鼠标在哪个柱子上,如果不在,aIndex:=-1
if aIndex <> -1 then
begin
RQ:= Series1.XLabel[aIndex];
JE:= FloatToStr(Series1.GetMarkValue(aIndex));
Label1.Caption:='日期:'+RQ+#13+'金额'+JE;
Label1.Left:= X;
Label1.Top := Y-Label1.Height-2;
Label1.Visible:= True;
end
else
begin
Label1.Visible:= False;
end;
end
else
begin
Label1.Visible:= False;
end;
end;

非常感谢大家!
lijinghe1(副乡长)(立党为公,执政为民)的方法原理是一样的,关键还是得到鼠标所在的柱子序号,即Series的OnClick事件中的ValueIndex!
xyfox 2004-06-23
  • 打赏
  • 举报
回复
不好意思,也不会
关注问题的解决
muleo 2004-06-23
  • 打赏
  • 举报
回复
UP
youhuiyun 2004-06-23
  • 打赏
  • 举报
回复
学习。
older 2004-06-23
  • 打赏
  • 举报
回复
关注,up
aiirii 2004-06-23
  • 打赏
  • 举报
回复
关注
SaKura2003 2004-06-23
  • 打赏
  • 举报
回复
小弟用TChart做过电站系统,但没有用到你的方法,帮你顶。

5,388

社区成员

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

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