TeeChart系列双击时LineSeries XY值和光标值之间的差异

时间:2017-11-16 15:52:52

标签: delphi teechart

我使用的是带有Delphi 10.1的基本TeeChart版本。 双击LineSeries可以切换点和此系列的标记。 我也出现了光标值。 但是,两者之间存在转变,它们并不相同。

procedure TfrmMain.SeriesDblClick(Sender: TChartSeries; ValueIndex: Integer;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
  tmpX1,tmpY1,tmpX2,tmpY2:Double;
begin
  // First values
  tmpX1:=Chart.Axes.Bottom.CalcPosPoint(X);
  tmpY1:=Chart.Axes.Left.CalcPosPoint(Y);

  // The prevous values are not identical to:
  tmpX2:=(Sender as tLineSeries).XValue[ValueIndex];
  tmpY2:=(Sender as tLineSeries).YValue[ValueIndex];
end;

如何解决?

1 个答案:

答案 0 :(得分:2)

无法解决这个问题。当您从实值空间映射到整数屏幕空间时,信息会丢失,然后再返回。

CalcPosPoint获取整数屏幕坐标并将其映射到实值轴空间。另一方面,XValue[]YValue[]会返回原始数据。

图表代码以XValue[]YValue[]中的实际值开头。它们映射到整数值。在转换为实轴值之后,该映射必然会舍入到最接近的整数。此时信息丢失,无法检索。

作为一个思想实验,考虑两个非常接近的真实X值。为了论证,我们假设XValue[0] = 0.0XValue[1] = 1e-6。 X轴的范围从01。现在,在这种情况下,屏幕上需要1e6像素才能使这两个点在映射到屏幕时具有不同的整数坐标。您的屏幕没有那么多像素,所以这两个点(具有不同的实际X值)映射到屏幕上的相同X坐标。

希望这个例子显示你想要做的事情是不可能的。您可以实现的最佳效果是搜索XValue[]YValue[]中的原始坐标以查找(tmpX1, tmpY1)的关闭,并报告最接近的原始坐标值。