<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=utf-8">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    Using the TDataPointHintTool is correct. It is just a little bit
    awkward to use... In particular you are not picking the correct
    event.<br>
    <br>
    Here's a step-by-step instruction. Code shown will be based on the
    "financial" demo which I added to TAChart recently:<br>
    <ul>
      <li>Add a TChartToolset to the form</li>
      <li>Set the chart's "Toolset" property to the toolset added.</li>
      <li>
        Add a TDatapointHintTool.</li>
      <li>Set "DistanceMode" to cdmOnlyX - this means that only the x
        coordinate of the mouse is evaluated to find the data point
        under the mouse; otherwise you'd have to move the move correctly
        to x and y. "GrabRadius" is the tolerance for point detection;
        you may want to increase the value a bit.</li>
      <li>Add code to the "OnHint" event of the DatapointHintTool, this
        is the code which generates the hint text. Adapt your code to
        the following which works with the "financial" demo (note that
        the hint string may contain line breaks!):</li>
    </ul>
    <blockquote>procedure
      TMainForm.ChartToolset1DataPointHintTool1Hint(ATool:
      TDataPointHintTool;<br>
        const APoint: TPoint; var AHint: String);<br>
      var<br>
        ser: TOpenHighLowCloseSeries;<br>
      begin<br>
        ser := ATool.Series as TOpenHighLowCloseSeries;<br>
        AHint := Format('Date: %s'#13'  Open: %.2f'#13'  High:
      %.2f'#13'  Low: %.2f'#13'  Close: %.2f', [<br>
          ser.ListSource[Atool.PointIndex]^.Text,                // In
      this example the date is not stored in "x", but in the "Text" of
      the data point<br>
          ser.ListSource[ATool.PointIndex]^.YList[0],<br>
          ser.ListSource[ATool.PointIndex]^.YList[2],<br>
          ser.ListSource[ATool.PointIndex]^.Y,<br>
          ser.ListSource[ATool.PointIndex]^.YList[1]<br>
        ]);<br>
      end; <br>
    </blockquote>
    <ul>
      <li>When you compile the hints should work already. However, they
        are not properly positioned. I'd prefer to move them above a
        data point and center them horizontally to the data points. The
        OnHintPosition event is responsible to determine the location of
        the upper/left corner of the hint window.</li>
    </ul>
    <blockquote>procedure
      TMainForm.ChartToolset1DataPointHintTool1HintPosition(ATool:
      TDataPointHintTool;<br>
        var APoint: TPoint);<br>
      var<br>
        ser: TOpenHighLowCloseSeries;<br>
        x, y: Integer;<br>
        w, h: Integer;<br>
        r: TRect;<br>
        hintwnd : THintWindow;<br>
        s: String;<br>
      begin<br>
        { Calculate screen coordinates of the "high" point }<br>
      <br>
        ser := ATool.Series as TOpenHighLowCloseSeries;<br>
        x :=
      FinancialChart.XGraphToImage(ser.ListSource[ATool.PointIndex]^.X);<br>
        y :=
FinancialChart.YGraphToImage(ser.ListSource[ATool.PointIndex]^.YList[2]);<br>
          // "High" value, i.e. max of data point<br>
      <br>
        { Calculate size of hint window }<br>
      <br>
        // Get hint text - just call the event handler of OnHint<br>
        ChartToolset1DataPointHintTool1Hint(ATool, APoint, s);<br>
      <br>
        // Calculation - borrowed from TATools<br>
        hintwnd := THintWindow.Create(nil);<br>
        try<br>
          r := hintwnd.CalcHintRect(FinancialChart.Width, s, nil);<br>
          w := r.Right - r.Left;  // Hint width<br>
          h := r.Bottom - r.Top;  // Hint height <br>
        finally<br>
          hintwnd.Free;<br>
        end;<br>
      <br>
        // Center hint horizontally relative to data point<br>
        APoint.x := x - w div 2;<br>
      <br>
        // Move hint 10 pixels above the "High" data point<br>
        APoint.y := y - h - 10;<br>
      <br>
        // Hint coordinates are relative to screen<br>
        APoint := FinancialChart.ClientToScreen(APoint);<br>
      end;<br>
    </blockquote>
             <br>
    Regarding your second question how to call "OnAfterPaint": Just call
    it like I call the OnHint event in above example. <br>
  </body>
</html>