我有一个简单的图表,仅使用具有单个Y轴的TLineSeries。当鼠标指针在图表上移动时,我希望获得与指针位置相关的X和Y值,而不受任何序列的影响。
我可以处理MouseMove事件并获得屏幕X和Y坐标,但我发现转换它们的唯一方法是通过Series->XValues->Locate和Series->YValue->Locate方法。
这里有两个问题:
1 -无论指针是否在序列行上,从Series->YValue->Locate返回的值始终是-1。
2 -从Series->XValue->Locate返回的值为-1,除非指针位于包含序列线的图表部分上。
为什么Series->YValue->Locate总是返回-1?
更重要的是,无论指针是否在具有系列线的图表的一部分上,我如何获得值?
我使用的是Rad Studio XE3附带的TeeChart版本
为什么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;