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