Просто подключите событие перемещения мыши Page Control и используйте свойство TabAtPos, чтобы определить, на какой вкладке находится мышь. Затем назначьте подсказку этой вкладки свойству подсказки Page Control.
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 позаботится об обновлении окна подсказки, когда мышь перемещается непосредственно с одной вкладки на другую.
Улучшенная, но уродливая версия ниже также временно меняет значение HintPause на 0, когда мышь перемещается непосредственно от вкладки к вкладке, так что подсказка отображается немедленно («Уродливая» часть решения переходит к вызову Application.ProcessMessages, который заставляет сообщения с подсказками обрабатываться до восстановления HintPause.)
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;
Чтобы скрыть подсказку в теле главной страницы, назначьте следующий метод для события OnMouseLeave элемента управления страницы.
procedure TForm.PageMouseLeave(Sender: TObject);
begin
PageControl.Hint := '';
PageControl.ShowHint := false;
end;