Ativar um hint ao digitar em um Edit

 

Gostaria que o Hint do Edit, aparecesse quando o usuário está digitando alguma coisa e não só quando o mouse passa por cima. É possível fazer isto? Teremos que fazer isto manualmente. Deveremos usar o canvas para desenhar o hint. Criamos uma variável pública para controlar o estado do hint:

 

var

  Myhint: THintWindow;

 

Agora, colocamos no formulário a seguinte função para ativar o hint:

 

function TForm1.RevealHint (Control: TControl): THintWindow;

var
  ShortHint: string;

  AShortHint: array[0..255] of Char;

  HintPos: TPoint;

  HintBox: TRect;

begin
  Result := THintWindow.Create(Control);

  ShortHint := GetShortHint(Control.Hint);

  HintPos := Control.ClientOrigin;

  Inc(HintPos.Y, Control.Height + 6);

  HintBox := Bounds(0, 0, Screen.Width, 0);

  DrawText(Result.Canvas.Handle, StrPCopy(AShortHint, ShortHint), -1, HintBox, DT_CALCRECT or DT_LEFT or DT_WORDBREAK or DT_NOPREFIX);

  OffsetRect(HintBox, HintPos.X, HintPos.Y);

  Inc(HintBox.Right, 6);

  Inc(HintBox.Bottom, 2);

  Result.ActivateHint(HintBox, ShortHint);

end;

E inserimos este procedimento para desativar o hint:

 

procedure TForm1.RemoveHint (var Hint: THintWindow);

begin
  Hint.ReleaseHandle;

  Hint.Free;

  Hint := nil;

end;

Para ativar o hint (coloque no evento OnChange):

 

// mudar o name do edit1 para o nome do componente para o qual desejamos que o hint apareça

Myhint := RevealHint(edit1);

 

Para desativar o hint:

 

RemoveHint(Myhint)

 

Walter Alves Chagas Junior