Пользовательский интерфейс трудно представить
без ярлычков с оперативной подсказкой (Hints).
Если задержать курсор, например, над кнопкой или компонентом палитры самой среды
Delphi, появляется маленький прямоугольник яркого цвета (окно подсказки), в
котором одной строкой сказано о названии этого элемента или связанном с ним
действии. Delphi поддерживает механизмы создания и отображения таких ярлычков в
создаваемых программах.
Свойство, определяющее активность системы
подсказки у элемента управления:
property ShowHint: Boolean;
Если свойство
ShowHint установлено в True, и во
время выполнения курсор задержался над компонентом на некоторое время, в окне
подсказки высвечивается текстовая строка с подсказкой, которая задана свойством:
property Hint: string;
Подсказка компонента может быть пустой строкой
— в этом случае система ищет в цепочке первый родительский компонент с непустой
подсказкой.
Если в строке
Hint встречается специальный символ-разделитель "Г, то часть строки до
него ("короткая") передается в окно подсказки, а после ("длинная") —
присваивается свойству Hint объекта
Application. Ее можно использовать,
например, в строке состояния внизу главной формы приложения (см. пример ниже).
Система оперативных подсказок имеет свойства и
методы, общие для всех форм в приложении. Не удивительно, что они сосредоточены
в Application — глобальном объекте,
соответствующем работающему приложению. Все описанные ниже в этом разделе
свойства относятся не к компоненту, показывающему подсказку, а именно к
Application.
Фоновый цвет окна подсказки можно изменить
посредством свойства
property HintColor: TColor;
У объекта
Application значение свойства showHint
нужно устанавливать во время выполнения, например, в обработчике
OnCreate главной формы приложения. Оно
является главенствующим для всей системы подсказок: если оно установлено в
значение False, ярлычки не возникают.
Есть еще один способ получения подсказки. При
смене текущего элемента управления (т. е. при смене текста в свойстве
Hint) в объекте
Application возникает событие
property OnHint: TNotifyEvent;
Пример:
procedure TForml.AppHint(Sender: TObject);
begin
Panell.Caption:= Application.Hint;:
end;
procedure TForml.FormCreate(Sender: TObject);
begin
Application.OnHint := AppHint;
end;
В этом примере текст подсказки будет
отображаться в строке состояния Panell
независимо от значения showHint у любого
объекта — лишь бы этот текст был в наличии. Для этого разделяйте подсказку у
элементов управления вашего приложения на две части при помощи символа " |" —
краткая информация появится рядом с элементом, а более полная — в строке
состояния.
function GetLongHint(const Hint: string): string; function GetShortHint(const Hint: string): string;
У других компонентов свойство
ShowHint интерпретируется системой так:
когда курсор мыши останавливается над элементом управления или пунктом меню, и
приложение не занято обработкой сообщения, происходит проверка, и если свойство
showHint у элемента или у одного из его
родительских элементов в иерархии равно True,
то начинается ожидание.
Если в данный момент другие ярлычки не
показываются, то интервал времени задается свойством
HintPause:
property HintPause: Integer;
Интервал времени по умолчанию равен 500 мс.
Если в данный момент уже виден ярлычок другого компонента, то интервал времени
ожидания задается свойством:
property HintShortPause: Integer;
По истечении этого времени, если мышь осталась
над тем же элементом управления, наступает момент инициализации окна подсказки.
При этом программист может получить управление, предусмотрев обработчик события
объекта Application:
property OnShowHint: TShowHintEvent;
TShowHintEvent = procedure (var HintStr: string;
var CanShow: Boolean;
var Hintlnfo: THintlnfo) of object;
Рассмотрим параметры обработчика события
OnShowHint:
- Hintstr — отображаемый текст;
- CanShow — необходимость (возможность) появления подсказки. Если
в переменной CanShow обработчик вернет значение False, то окно
подсказки высвечиваться не будет;
- Hintinfo — структура, несущая всю информацию о том, какой
элемент управления, где и как собирается показать подсказку. Ее
описание:
THintlnfo = record
HintControl: TControl;
HintPos: TPoint;
HintMaxWidth: Integer;
HintColor: TColor;
CursorRect: TRect;
CursorPos: TPoint;
end;
Для показа окна подсказки необходимо еще, чтобы
у элемента управления или у его предков в цепочке строка
Hint была непустой. Впрочем, это можно
исправить в обработчике OnShowHint:
procedure TForml.AppShowHint(var HintStr: string;
var CanShow: Boolean;var Hintlnfo: THintlnfo);
begin if HintStr='' then
begin
HintStr := Hintlnfo.HintControl.Name; Hintlnfo.HintColor := clRed; CanShow := True;
end;
end;
Присвоив этот метод обработчику
Application.OnShowHint,
установив Form.showHint:=True и очистив все
строки Hint, получим в качестве подсказки
имя каждого элемента.
Длительность показа ярлычка задается свойством
property HintHidePause: Integer;
По умолчанию его значение равно 2500 мс.
Свойство
property HintShortCuts: Boolean;
отвечает за показ вместе с текстом ярлычка
описания "горячих" клавиш данного элемента управления.
Наконец, можно вручную "зажечь" и "потушить"
ярлычок. При помощи метода
procedure ActivateHint(CursorPos: TPoint);
ярлычок показывается в точке
CursorPos (система координат — экранная).
"Спрятать" окно подсказки можно с помощью метода:
procedure CancelHint;
Без повторного перемещения мыши на текущий
элемент оно более не возникнет.
|