function RevealHint(Control: TControl): THintWindow;
{----------------------------------------------------------------}{ Демонстрирует всплывающую подсказку для определенного элемента }{ управления (Control), возвращает ссылку на hint-объект, }{ поэтому в дальнейшем подсказка может быть спрятана вызовом }{ RemoveHint (смотри ниже). }{----------------------------------------------------------------}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; {RevealHint}procedure RemoveHint(var Hint: THintWindow);
{----------------------------------------------------------------}{ Освобождаем дескриптор окна всплывающей подсказки, выведенной }{ предыдущим RevealHint. }{----------------------------------------------------------------}begin
Hint.ReleaseHandle;
Hint.Free;
Hint := nil;
end; {RemoveHint}
Строка с комментарием <<<< позиционирует подсказку ниже элемента управления. Это может быть изменено, если по какой-то причине вам необходима другая позиция окна с подсказкой.
Программный код на Delphi, который реализует всплывающую подсказку для контрола. Функция RevealHint создает и отображает всплывающую подсказку, а процедура RemoveHint освобождает ресурсы, зарезервированные для всплывающей подсказки.
В функции RevealHint происходит следующее:
Создается экземпляр класса THintWindow с помощью метода Create.
Получается краткое описание контрола с помощью функции GetShortHint.
Вычисляется позиция и размер всплывающей подсказки на основе клиентского происхождения, высоты и ширины экрана.
Рисуется текст всплывающей подсказки с использованием метода DrawText, с форматированными параметрами для обрезания текста, если необходимо.
Устанавливается граница всплывающей подсказки в соответствии с вычисленными значениями и активируется.
Комментарий на строке 14 является примечанием о том, что позиция всплывающей подсказки может быть изменена, изменяя расчет HintPos.
В альтернативном решении с использованием встроенного класса TNotifyEvent создается новый экземпляр класса THintWindow, а его событие OnActivate задается на процедуру ControlHintActivated. Это позволяет централизованно обрабатывать активацию подсказок.
Процедура RemoveHint просто освобождает ресурсы, зарезервированные для всплывающей подсказки, используя методы ReleaseHandle и Free, а также устанавливает ссылку на всплывающую подсказку в значение nil.
В статье описывается демонстрация всплывающей подсказки для определенного элемента управления в Delphi, которая создается методом RevealHint и может быть спрятана вызовом RemoveHint.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.