1

我有一个简单的图表,仅使用带有单个 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 版本。

4

1 回答 1

3

为什么 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;
于 2013-03-18T12:33:53.777 回答