本人看了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;
怎么实现“当鼠标移动到某个月的柱子上后,显示正确的月份和销售金额”???
大虾们,帮帮小弟。分不够再加!!!
统计某商店的某个商品每个月销售金额,横坐标显示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;
怎么实现“当鼠标移动到某个月的柱子上后,显示正确的月份和销售金额”???
大虾们,帮帮小弟。分不够再加!!!
注意:有个MARK属性,指的就是在一个点上显示标签(数值的).
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;
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!
送你一句话:千万别把简单的事情不当回事!今天早上,有个自认为很牛的人到我公司来应聘,问他某某问题,他说:“这个还不简单嘛,翻翻资料就知道了!10分钟就搞定!”老板立马就把他给请走了,呵呵~~~