我有一个简单的图表,只使用带有单个Y轴的TLineSeries。当鼠标指针在图表上移动时,我想得到与指针位置相关的X和Y值,与任何系列无关。
我可以处理MouseMove事件并获取屏幕X和Y坐标,但我发现转换它们的唯一方法是通过Series-> XValues-> Locate和Series-> YValue->找到方法。
这有两个问题:
1 - 无论指针是否在系列行之上,从Series-> YValue-> Locate返回的值始终为-1。
2 - 从Series-> XValue-> Locate返回的值为-1,除非指针位于包含系列行的图表的一部分上。
为什么Series-> YValue-> Locate始终返回-1?
更重要的是,无论指针是否在带有系列线的图表的一部分上,我如何获取值?
我正在使用Rad Studio XE3附带的TeeChart版本。
答案 0 :(得分:2)
为什么Series-> YValue-> Locate始终返回-1?
那是因为Locate使用系列值并返回系列中的点索引。 OnMouseMove提供屏幕像素坐标,而不是系列值。
更重要的是,无论是否,我如何获得值 指针是否在图表的一部分上,是否有系列线?
您可以使用轴作为参考而不是系列,例如:
procedure TForm2.Chart1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
XVal: double;
YVal: double;
begin
XVal:=Chart1.Axes.Bottom.CalcPosPoint(X);
YVal:=Chart1.Axes.Left.CalcPosPoint(Y);
Chart1.Title.Text[0]:=FormatFloat('#.##', XVal) + ' - ' + FormatFloat('#.##', YVal);
end;