Назначьте обработчик события TApplication.OnShowHint
или TApplicationEvents.OnShowHint
или создайте подкласс TStringGrid
для перехвата сообщения CM_HINTSHOW
.Любой из них предоставит вам доступ к записи THintInfo
, которая используется для управления поведением окна подсказки.Вы можете настроить координаты члена THintInfo.CursorRect
по мере необходимости.Окно подсказок повторно активируется последним текстом свойства Hint
(который можно настроить с помощью элемента THintInfo.HintStr
до его отображения) всякий раз, когда мышь выходит за пределы этого прямоугольника.Чем меньше прямоугольник, тем чаще окно подсказки активируется.Эта функция позволяет элементу управления пользовательского интерфейса иметь несколько подразделов в своей клиентской области, которые отображают различные строки подсказок, когда мышь перемещается вокруг того же элемента управления пользовательского интерфейса.
Значение свойства TApplication.HintShortPause
(или от перехвата CM_HINTSHOWPAUSE
сообщение) определяет, исчезает ли окно подсказки перед повторной активацией.Если вы установите нулевое значение паузы, окно подсказки обновит свой текст немедленно, не исчезая.Если установить значение паузы в ненулевое значение, окно подсказки исчезнет, а затем снова появится после истечения указанного количества миллисекунд, пока мышь остается над тем же элементом управления пользовательского интерфейса.
Например:
procedure TTmMainForm.FormCreate(Sender: TObject);
begin
Application.OnShowHint := AppShowHint;
end;
procedure TTmMainForm.FormDestroy(Sender: TObject);
begin
Application.OnShowHint := nil;
end;
procedure TTmMainForm.AppShowHint(var HintStr: String; var CanShow: Boolean; var HintInfo: THintInfo);
var
R, C: Integer;
begin
if HintInfo.HintControl = SgScoutLink then
begin
R := 0;
C := 0;
SgScoutLink.MouseToCell(HintInfo.CursorPos.X, HintInfo.CursorPos.Y, C, R);
if (R = 0) and (C >= 3) and (C <= 20) then
begin
HintInfo.CursorRect := SgScoutLink.CellRect(C, R);
HintInfo.HintStr := FManager.ScoutLinkColumnTitles.stGetColumnTitleHint(C-3);
end;
end;
end;
Редактировать: Я только что заметил, что вы используете Lazarus.Я описал, как решить эту проблему в Delphi.Я понятия не имею, применимо ли это к Лазарю или нет.