Updated: 29.11.2016
Rus

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 уничтожается автоматически сразу после закрытия подсказки.

Попробуем создать подсказку с фреймом:

  1. Создадим приложение с компонентом TsAlphaHints на форме, а также фрейм, с расположенными на нём компонентами, наследованными от TGraphicControl. На фрейме располагаем компоненты так, как необходимо будет показывать их в подсказке. Можно располагать их как угодно, но мы возьмём пока самый простой вариант. На форме расположим две кнопки для теста и зададим в них текст в свойстве Hint.
  2. Добавляем обработчик в событие 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;
  3. Всё готово, можно запустить приложение и посмотреть на результат.
  4. Как видим, есть одна проблема. Она заключается в том, что независимо от ширины текста ширина окна остаётся неизменной. Решается этот вопрос добавлением одной строки в обработчик 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.

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

  1. Создаём рисунок в формате Png, который будет использоваться в качестве шаблона.
  2. Создаём новый шаблон (кнопка New) в редакторе и называем его "Blue hint".
  3. Добавляем созданный рисунок
  4. Задаём размеры рамок вместе с тенью
  5. Задаём расстояние от краёв окна подсказки до его содержимого
  6. Если бы мы не использовали Frame с Label, то могли бы задать и шрифт для этого шаблона. Но в нашем случае шрифт настраивается непосредственно в Label, я просто добавил свойство fsBold. Теперь мы можем нажать OK и шаблон будет добавлен в компонент. Чтобы этот шаблон был применён в приложении, необходимо выбрать его в свойстве TemplateName.
  7. После запуска приложения можем посмотреть на то, что получилось.
    Вроде неплохо для первого раза :) Но что, если окно с подсказкой будет показано над элементом управления? Такое бывает если элемент управления расположен слишком близко к нижнему краю экрана. Стрелка будет рисоваться сверху, а это конечно не хорошо.

    Для таких случаев предусмотрены три дополнительных закладки в редакторе шаблонов. Они включаются если установлен флаг "Use additional images". Закладки "Right-top", "Left-Bottom", "Right-Bottom" позволяют задать изображение для случаев, когда стрелка должна рисоваться в соответствующем углу.

    Дополнительные изображения рисуются и конфигурируются точно так же как и основное.

    Перенести компонент TsAlphaHints с настроенными стилями из одного проекта в другой можно простым Copy/Paste в design-time.

    Проект с примером можно скачать здесь (~7Kb)