Как определить отправитель Hint в обработчике событий OnHint? - PullRequest
2 голосов
/ 11 апреля 2020

В приложении Delphi 10.3.3 Windows VCL, в обработчике событий OnHint компонента TApplicationEvents, я показываю текущую подсказку в строке состояния:

procedure TForm1.ApplicationEvents1Hint(Sender: TObject);
begin
  statMain.SimpleText := Application.Hint;
end;

Однако я хотел бы добавить определенный c текст, содержащий определенные c данные времени выполнения, в зависимости от того, какой элемент управления отправляет подсказку.

К сожалению, параметр Sender не предоставляет эту информацию .

Итак, как я могу определить, какой элемент управления отправил подсказку?

1 Ответ

5 голосов
/ 11 апреля 2020

Событие OnHint не предоставляет доступа к какой-либо информации об элементе управления, отображающем подсказку.

Однако событие OnShowHint делает и вы можете полностью настроить подсказку так, как хотите в этом случае:

procedure TForm1.ApplicationEvents1ShowHint(var HintStr: string;
  var CanShow: boolean; var HintInfo: THintInfo);
begin
  if HintInfo.HintControl = DesiredControl then
  begin
    // customize HintStr, and/or HintInfo fields, as needed...
  end;
end;

procedure TForm1.ApplicationEvents1Hint(Sender: TObject);
begin
  statMain.SimpleText := Application.Hint;
end;

HintInfo предоставляет все виды информации о подсказке, которую можно настроить:

HintControl
Имя элемента управления, для которого выполняется обработка подсказки.

HintWindowClass
Класс элемента управления окна подсказки. По умолчанию используется THintWindow, но вы можете указать любой класс, производный от THintWindow. Используйте это поле, если хотите заменить пользовательское окно подсказки на THintWindow.

HintPos
Положение по умолчанию в экранных координатах левого верхнего угла окна подсказки. Измените местоположение окна, изменив это значение.

HintMaxWidth
Максимальная ширина окна подсказки перед началом переноса слов. По умолчанию значением является ширина экрана (свойство Width глобальной переменной Screen).

HintColor
Цвет фона окна подсказки.

CursorRect
Прямоугольник, на котором должен находиться указатель мыши, должен появиться окно подсказки. Значением по умолчанию для CursorRect является клиентский прямоугольник элемента управления. Измените это значение, чтобы один элемент управления можно было разделить на несколько областей подсказок. Когда пользователь перемещает указатель мыши за пределы прямоугольника, окно подсказки исчезает.

CursorPos
Расположение указателя мыши в элементе управления.

ReshowTimeout
Как долго подсказка Система должна подождать, прежде чем снова спрашивать о статусе подсказки. По умолчанию это поле равно нулю, что указывает на то, что статус подсказки не изменится. Установка его в ненулевое значение приведет к тому, что подсказка будет действовать после истечения запрошенных миллисекунд, как если бы пользователь переместил мышь за пределы прямоугольника подсказки и вернулся обратно. Это можно использовать, чтобы отложить обработку подсказки на период или разрешить периодически обновлять подсказку.

HideTimeout
Количество миллисекунд, на которое отображается подсказка. По умолчанию для него установлено значение свойства HintHidePause переменной приложения.

HintStr
Строка, отображаемая в окне подсказок. Это позволяет обработчику события OnHint изменять содержимое подсказки перед ее отображением. По умолчанию он содержит значение, возвращаемое функцией GetShortHint при передаче значения свойства Hint переменной приложения.

HintData
Дополнительные данные, передаваемые элементу управления окна подсказки. Используйте это поле вместе с HintWindowClass.

Кроме того, к вашему сведению, вам не нужно использовать событие TApplication(Event).OnHint только для отображения текста TApplication.Hint в TStatusBar. Если для свойства StatusBar AutoHint установлено значение true, то StatusBar может автоматически отображать TApplication.Hint обновлений. Вам просто нужно убедиться, что у вас нет назначенного обработчика OnHint, иначе AutoHint не будет работать (хотя OnShowHint хорошо).

...