Just grabbed my code from cvs, I do the following.  The variable hwin is
defined as a THintWindow and created in my constructor.

If the Hint is to be displayed (ie. ShowHint is true, and it differs from
the previous hint), I call hwin.ActivateHint() with the required rect
structure.

I then enable a TTimer which simple releases the THintWindow after 3
seconds (and disables itself).

Mark

procedure TMapField.HandleHint(X,Y: Integer);
var
  ml: TMapLabel;
  p: TPoint;
  s: string;
  sWidth: integer;
  sHeight: integer;
  i, iWidth: integer;
begin
  ml := FindItemAtXY(X,Y);
  if Assigned(ml) then
  begin
    GetCursorPos(P);
    s := ml.Name;
    if Assigned(fOnHint) then fOnHint(Self, s);
    // Provide an event to modify s
    if (ShowHint) and (hwin.Caption <> s) then
    begin
      TimerHwin.Enabled := False;
      sList.Text := s;
      // find longest string
      sWidth := 0;
      for i := 0 to sList.Count - 1 do
      begin
        iWidth := hwin.Canvas.TextWidth(sList.Strings[i]);
        if iWidth > sWidth then sWidth := iWidth;
      end;

      sHeight := hwin.Canvas.TextHeight(s)*sList.Count;
      hwin.ActivateHint(Rect(P.X,P.Y, P.x + sWidth + 6, P.Y + sHeight),s);
      TimerHwin.Enabled := True;
    end;
  end;
end;

procedure TMapField.TimerHWinEvent(Sender: TObject);
begin
  hwin.ReleaseHandle;
  TimerHWin.Enabled := False;
end;

---------------------------------------------------------------------------
    New Zealand Delphi Users group - Delphi List - [EMAIL PROTECTED]
                  Website: http://www.delphi.org.nz

Reply via email to