Ярлычки и оперативная подсказка
Ярлычки и оперативная подсказка
С легкой руки Microsoft, признание получили ярлычки с оперативной подсказкой (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 TFormI.AppHint(Sender: TObject); begin Pane 11.Caption:= Application.Hint ; end; procedure TFormI.FormCreate(Sender: TObject); begin Application.OnHint := AppHint; end;
В этом примере текст подсказки будет отображаться в строке состояния Panel 1 независимо от значения ShowHint у любого объекта — лишь бы этот текст был в наличии. Для этого разделяйте подсказку у элементов управления вашего приложения на две части при помощи символа '|' — краткая информация появится рядом с элементом, а более полная — в строке состояния.
У других компонентов свойство ShowHint интерпретируется системой так:
когда курсор мыши останавливается над элементом управления или пунктом меню, и приложение не занято обработкой сообщения, происходит проверка, и если ShowHint у элемента или у одного из его родительских элементов в иерархии равно True, то запускается специальный таймер на интервал времени HintPause:
property HintPause: Integer;
Интервал времени по умолчанию равен 800 мс. После истечения времени таймера, если мышь осталась над тем же элементом, наступает момент инициализации окна подсказки. При этом программист может получить управление, предусмотрев обработчик события
property OnShowHint: TShowHintEvent ; TShowHintEvent = procedure (var HintStr: string; var CanShow: Boolean; var Hintlnfo: THintInfo) of object;
с параметрами:
HintStr — отображаемый текст;
CanShow — необходимость (возможность) появления подсказки. Если в переменной CanShow обработчик вернет False, то окно подсказки высвечиваться не будет;
Hintlnfo — структура, несущая всю информацию о том, какой элемент управления, где и как собирается показать подсказку. Ее тип:
THintInfo = record HintControl: TControl; HintPos: TPoint; HintMaxWidth: Integer; HintColor: TColor; CursorRect: TRect; CursorPos: TPoint; end;
Для показа окна подсказки необходимо еще, чтобы у элемента управления или у его предков в цепочке строка Hint была непустой. Впрочем, это можно исправить в обработчике OnShowHint, пример:
procedure TFormI.AppShowHint(var HintStr: string; var CanShow: Boolean; var Hintlnfo: THintInfo); begin if HintStr='' then begin HintStr := Hintlnfo.HintControl.Name; Hintlnfo.HintColor := ciRed; CanShow := True ; end; end;
Присвоив этот метод обработчику Application.OnShowHint, установив Forml.ShowHint:=True и очистив все строки Hint, получим в качестве подсказки имя каждого элемента.
"Спрятать" окно подсказки можно с помощью метода:
procedure CancelHint;
Без повторного перемещения мыши на текущий элемент оно более не возникнет.