Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Как сделать графический hint?

01.01.2007
{********************************************************* 
 
 With the following Code you can simply create custom hints. 
 You just have to change the procedur "Paint". 
 
 *********************************************************} 
 
type 
  TGraphicHintWindow = class(THintWindow) 
    constructor Create(AOwner: TComponent); override; 
  private 
    FActivating: Boolean; 
  public 
    procedure ActivateHint(Rect: TRect; const AHint: string); override; 
  protected 
    procedure Paint; override; 
  published 
    property Caption; 
  end; 
 
  {...} 
 
constructor TGraphicHintWindow.Create(AOwner: TComponent); 
begin 
  inherited Create(AOwner); 
  { 
   Here you can set custom Font Properties: 
   } 
 
  with Canvas.Font do 
  begin 
    Name := 'Arial'; 
    Style := Style + [fsBold]; 
    Color := clBlack; 
  end; 
end; 
 
procedure TGraphicHintWindow.Paint; 
var 
  R: TRect; 
  bmp: TBitmap; 
begin 
  R := ClientRect; 
  Inc(R.Left, 2); 
  Inc(R.Top, 2); 
 
  {******************************************************* 
   The folowing Code ist an example how to create a custom 
   Hint Object. : 
   } 
 
  bmp := TBitmap.Create; 
  bmp.LoadfromFile('D:\hint.bmp'); 
 
  with Canvas do 
  begin 
    Brush.Style := bsSolid; 
    Brush.Color := clsilver; 
    Pen.Color   := clgray; 
    Rectangle(0, 0, 18, R.Bottom + 1); 
    Draw(2,(R.Bottom div 2) - (bmp.Height div 2), bmp); 
  end; 
 
  bmp.Free; 
  //Beliebige HintFarbe 
  //custom Hint Color 
  Color := clWhite; 
 
  Canvas.Brush.Style := bsClear; 
  Canvas.TextOut(20, (R.Bottom div 2) - (Canvas.Textheight(Caption) div 2), Caption); 
  {********************************************************} 
end; 
 
procedure TGraphicHintWindow.ActivateHint(Rect: TRect; const AHint: string); 
begin 
  FActivating := True; 
  try 
    Caption := AHint; 
    //Hцhe des Hints setzen setzen 
    //Set the "Height" Property of the Hint 
    Inc(Rect.Bottom, 14); 
    //Breite des Hints setzen 
    //Set the "Width" Property of the Hint 
    Rect.Right := Rect.Right + 20; 
    UpdateBoundsRect(Rect); 
    if Rect.Top + Height > Screen.DesktopHeight then 
      Rect.Top := Screen.DesktopHeight - Height; 
    if Rect.Left + Width > Screen.DesktopWidth then 
      Rect.Left := Screen.DesktopWidth - Width; 
    if Rect.Left < Screen.DesktopLeft then Rect.Left := Screen.DesktopLeft; 
    if Rect.Bottom < Screen.DesktopTop then Rect.Bottom := Screen.DesktopTop; 
    SetWindowPos(Handle, HWND_TOPMOST, Rect.Left, Rect.Top, Width, Height, 
      SWP_SHOWWINDOW or SWP_NOACTIVATE); 
    Invalidate; 
  finally 
    FActivating := False; 
  end; 
end; 
 
procedure TForm1.FormCreate(Sender: TObject); 
begin 
  HintWindowClass := TGraphicHintWindow; 
  Application.ShowHint := False; 
  Application.ShowHint := True; 
end; 

Взято с сайта https://www.swissdelphicenter.ch/en/tipsindex.php