Ярлыки
Пользовательский интерфейс трудно представить без ярлычков с оперативной подсказкой (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 — структура, несущая всю информацию о том, какой элемент управления, где и как собирается показать подсказку. Ее описание:
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;
Без повторного перемещения мыши на текущий элемент оно более не возникнет.