获取鼠标指针下的X和Y值



我有一个简单的图表,仅使用具有单个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;

相关内容

  • 没有找到相关文章

最新更新