I had problems with values returned by OnDrawReticule event. Always returns
values from last series defined on my object.
I explore this component and I found this:

procedure TReticuleTool.MouseMove(APoint: TPoint);
.
.
.

  for i := 0 to FChart.SeriesCount - 1 do
    if FChart.Series[i].GetNearestPoint(df, APoint, pointIndex, newRetPos,
value) and
      PtInRect(FChart.ClipRect, newRetPos)
    then begin
       d := df(APoint, newRetPos);
       if d < minDist then begin
         bestRetPos := newRetPos;
         bestSeries := i;
         minDist := d;
       end;
    end;
...

I think that would work something like this:

  for i := 0 to FChart.SeriesCount - 1 do
    if FChart.Series[i].GetNearestPoint(df, APoint, pointIndex, newRetPos,
value) and
      PtInRect(FChart.ClipRect, newRetPos)
    then begin
       d := df(APoint, newRetPos);
       if d < minDist then begin
         bestRetPos := newRetPos;
         bestSeries := i;
         bestPoint := pointIndex;
         bestValue := value;
         minDist := d;
       end;
    end;
  if (minDist < Infinity) and (bestRetPos <> FChart.ReticulePos) then begin
    FChart.ReticulePos := bestRetPos;
    if Assigned(FChart.OnDrawReticule) then
      FChart.OnDrawReticule(FChart, bestSeries, bestPoint, bestValue);
  end;

Is that correct?
--
_______________________________________________
Lazarus mailing list
Lazarus@lists.lazarus.freepascal.org
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus

Reply via email to