Simplemente enganche el evento Mover el mouse del control de página y use la propiedad TabAtPos para determinar en qué pestaña se está moviendo el mouse. A continuación, asigne la sugerencia de esa pestaña a la propiedad de sugerencia del control de página.
procedure TForm.PageMouseMove(Sender: TObject; Shift: TShiftState; X, Y: integer);
var
tabindex: integer;
begin
tabindex := PageControl.IndexOfTabAt(X, Y);
if (tabindex >= 0) and (PageControl.Hint <> PageControl.Pages[tabindex].Hint) then
begin
Application.CancelHint;
PageControl.Hint := PageControl.Pages[tabindex].Hint;
PageControl.ShowHint := true;
end;
end;
CancelHint/ShowHint se encargará de la actualización de la ventana de la pista cuando se mueve directamente de una pestaña a otra.
La versión mejorada pero fea a continuación también cambia temporalmente HintPause a 0 cuando el mouse se mueve directamente de una pestaña a otra para que la sugerencia se vuelva a mostrar inmediatamente. (La parte "fea" de la solución va a llamar los Application.ProcessMessages que las fuerzas insinúan mensajes para ser procesados antes de HintPause se restaura.)
procedure TForm.PagesMouseMove(Sender: TObject; Shift: TShiftState; X, Y: integer);
var
hintPause: integer;
tabindex: integer;
begin
tabindex := PageControl.IndexOfTabAt(X, Y);
if (tabindex >= 0) and (PageControl.Hint <> PageControl.Pages[tabindex].Hint) then
begin
hintPause := Application.HintPause;
try
if PageControl.Hint <> '' then
Application.HintPause := 0;
Application.CancelHint;
PageControl.Hint := PageControl.Pages[tabindex].Hint;
PageControl.ShowHint := true;
Application.ProcessMessages; // force hint to appear
finally Application.HintPause := hintPause; end;
end;
end;
Para ocultar la pista sobre el cuerpo principal de la página, asignar el siguiente método al evento OnMouseLeave del control de página.
procedure TForm.PageMouseLeave(Sender: TObject);
begin
PageControl.Hint := '';
PageControl.ShowHint := false;
end;
Firefox también hace esto –