[Lazarus] TAChart DataPointCrossHairTool
werner.pamler at freenet.de
Sun Sep 21 21:54:39 CEST 2014
To convert image coordinates (pixels within the chart rectangle which
you, indeed, can obtain from the global mouse position converted to the
local chart pixels) to "graph" coordinates you call the chart methods
* "XImageToGraph(x:Integer): Double" for x coordinates,
* "YImageToGraph(y:Integer): Double" for y coordinates, or
* "ImageToGraph(P:TPoint): TDoublePoint" (for both).
(or XGraphToImage() etc for the other direction).
If you do not use axis transformations, then graph coordinates directly
refer to the units of your data. If, on the other hand, axis
transformations are involved (logarithmic axes, multiple axes etc) the
values on the axes may be different from the graph units used in an
internal coordinate system. In this case, you have to link the series to
the axis (by means of the AxisIndexX and AxisIndexY properties) and call
the GraphToAxis or AxisToGraph methods of the AxisTransformation which
is obtained from the method GetTransform of the axis. In your example of
y values the transformation chain would be
mouse point yi --> graph coords by yg := Chart.YImageToGraph(yi) -->
axis coords by ya := Chart.LeftAxis.GetTransform.GraphToAxis(yg).
Here, ya refers to your input data, yi to the pixel data.
But since you don't use transformations YImageToGraph is sufficient.
More information about the Lazarus