TeeChart 线系列 XY 值与系列双击时的光标值不同



我使用的是Delphi 10.1附带的基本TeeChart版本。 双击"线系列"可切换该系列的点和标记。 我还显示了游标值。 但是,两者之间存在转变,它们并不相同。

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;

如何解决?

不可能解决这个问题。从实值空间映射到整数屏幕空间,然后再映射回来时,信息会丢失。

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

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

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

希望这个例子能说明你试图做的事情是不可能的。也许您能达到的最好结果是搜索XValue[]YValue[]中的原始坐标以查找接近(tmpX1, tmpY1)的坐标,并报告那些最接近的原始坐标值。

相关内容

  • 没有找到相关文章

最新更新