TsAlphaHints
Управляет рисованием всплывающих подсказок в приложении как с активными скинами, так и без скинов. Для работы компонент достаточно положить на основную форму приложения. В нём уже есть один основной стиль, который настроен и используется по умолчанию. Меняя настройки компонента, можно создавать самые разнообразные стили подсказок. Для управления стилями в design-time существует специальный редактор свойства Templates.
Отличие от компонента TsHintManager заключается в том, что при помощи TsAlphaHints можно рисовать подсказки практически любой формы. TsHintManager устарел и остаётся в пакете для совместимости. Компонент TsAlphaHints более перспективен и предпочтительнее в использовании.
Благодаря TsAlphaHints в подсказках возможно форматирование текста с помощью тегов Html, вывод изображений и графиков. Также возможен вывод анимированных подсказок. Пример использования можно увидеть в этой демо-программе.
Вместе с пользовательскими стилями, компонент может применять стили, заданные в текущем скине, если он активен. Для этого свойство UseSkinData должно быть включено. Каждый скин содержит секцию 'HINT', в которой находятся данные для отрисовки окна подсказки.
Процедуры ShowHint и HideHint предназначены для принудительного показа и закрытия окна подсказки.
Процедура RepaintHint обновляет открытое окно подсказки. Используется при изменении данных и позволяет создать эффект анимации в подсказе.
Свойство DefaultMousePos задаёт расположение стрелки в baloon-подобных подсказках, которое будет использоваться по умолчанию.
ReadOnly свойство IsHintShowing указывает, когда окно подсказки открыто.
Событие OnShowHint
Позволяет управлять процессом показа подсказки с помощью набора параметров :
-
HintStr задаёт выводимый текст
-
CanShow разрешает или запрещает вывод подсказки. Позволяет запретить вывод в процессе выполнения программы в зависимости от определённых условий.
-
HintInfo содержит стандартный набор параметров THintInfo, в частности позволяет задавать расположение окна подсказки
-
Frame позволяет выводить TGraphicControls в окне подсказки. Подробнее об этом свойстве будет рассказано ниже
Гипертекст в подсказках
Форматирование текста возможно при помощи стандартных тэгов Html, таких как FONT, B, I, U. Тэги добавляются прямо в текст подсказки и не видны при её выводе, если включено свойство HTMLMode.
Принудительный перенос строки задаётся тэгом BR
Поддерживаются специальные символы, такие как ©, ™ и другие.
Использование фреймов в хинтах
В событии OnShowHint присутствует параметр Frame: TFrame. Если мы создадим фрейм, содержащий TGraphicControl`s, то эти контролы будут скопированы на окно подсказки. Это свойство позволяет отображать в подсказках кроме текста еще изображения, графики и т.п.
Frame уничтожается автоматически сразу после закрытия подсказки.
Попробуем создать подсказку с фреймом:
- Создадим приложение с компонентом TsAlphaHints на форме, а также фрейм, с расположенными на нём компонентами, наследованными от TGraphicControl. На фрейме располагаем компоненты так, как необходимо будет показывать их в подсказке. Можно располагать их как угодно, но мы возьмём пока самый простой вариант. На форме расположим две кнопки для теста и зададим в них текст в свойстве Hint.
-
Добавляем обработчик в событие OnShowHint. Создаём в нём фрейм, который не будет видим (Parent = nil). Меняем текст у Label взяв его из параметра HintStr.
uses Unit1;
procedure TForm2.sAlphaHints1ShowHint(var HintStr: string; var CanShow: Boolean; var HintInfo: THintInfo; var Frame: TFrame);
begin
Frame := TFrame1.Create(Application);
TFrame1(Frame).Label1.Caption := HintStr;
end;
- Всё готово, можно запустить приложение и посмотреть на результат.
-
Как видим, есть одна проблема. Она заключается в том, что независимо от ширины текста ширина окна остаётся неизменной. Решается этот вопрос добавлением одной строки в обработчик OnShowHint. Ориентируемся здесь на ширину Label, так как её свойство AutoSize равно True.
Frame := TFrame1.Create(Application);
TFrame1(Frame).Label1.Caption := HintStr;
Frame.Width := TFrame1(Frame).Label1.BoundsRect.Right + 4;
end;
Теперь ширина окна подсказки будет меняться в зависимости от размера выводимого текста.
Конфигурирование шаблона Png
Использование изображений Png в качестве шаблонов позволяет создавать окна подсказок практически любой формы. Для задания шаблона используется специальный редактор свойства Template, который может быть вызван в design-time.
В предыдущем примере используется шаблон, который задан по умолчанию и находится в ресурсах приложения.
Попробуем задать свой шаблон и применить его в этом примере.
-
Создаём рисунок в формате Png, который будет использоваться в качестве шаблона.
-
Создаём новый шаблон (кнопка New) в редакторе и называем его "Blue hint".
-
Добавляем созданный рисунок
-
Задаём размеры рамок вместе с тенью
-
Задаём расстояние от краёв окна подсказки до его содержимого
-
Если бы мы не использовали Frame с Label, то могли бы задать и шрифт для этого шаблона. Но в нашем случае шрифт настраивается непосредственно в Label, я просто добавил свойство fsBold. Теперь мы можем нажать OK и шаблон будет добавлен в компонент. Чтобы этот шаблон был применён в приложении, необходимо выбрать его в свойстве TemplateName.
-
После запуска приложения можем посмотреть на то, что получилось.
Вроде неплохо для первого раза :) Но что, если окно с подсказкой будет показано над элементом управления? Такое бывает если элемент управления расположен слишком близко к нижнему краю экрана. Стрелка будет рисоваться сверху, а это конечно не хорошо.
Для таких случаев предусмотрены три дополнительных закладки в редакторе шаблонов. Они включаются если установлен флаг "Use additional images". Закладки "Right-top", "Left-Bottom", "Right-Bottom" позволяют задать изображение для случаев, когда стрелка должна рисоваться в соответствующем углу.
Дополнительные изображения рисуются и конфигурируются точно так же как и основное.
Перенести компонент TsAlphaHints с настроенными стилями из одного проекта в другой можно простым Copy/Paste в design-time.
Проект с примером можно скачать здесь (~7Kb)