Справочник по компонентам Delphi. Часть 1
Страница 17. Ярлычки и оперативная подсказка


 

Ярлычки и оперативная подсказка

Совсем недавно, с легкой руки Microsoft, признание получили ярлычки с оперативной подсказкой (Hints). Если задержать курсор, например, над кноп­кой или компонентом палитры самой среды Delphi, появляется маленький прямоугольник яркого цвета (окно подсказки), в котором одной строкой ска­зано о названии этого элемента или связанном с ним действии. Delphi под­держивает механизмы создания и отображения таких ярлычков в создаваемых программах.

Свойство, определяющее активность системы подсказки у элемента управления:

(Pb) property ShowHint: Boolean;

Если свойство ShowHint установлено в True, и во время выполнения курсор задержался над компонентом на некоторое время, в окне подсказки высвечива­ется текстовая строка с подсказкой:

(Pb) property Hint: string;

Подсказка компонента может быть пустой строкой — в этом случае система ищет в цепочке первый родительский компонент с непустой подсказкой. Если в строке Hint встречается специальный символ-разделитель '|', то часть строки до него ("короткая") передается в окно подсказки, а после ("длинная") — присваивается свойству Hint объекта Application. Ее можно использовать, например, в строке состояния внизу главной формы приложения (см. пример ниже).

Система оперативных подсказок имеет свойства и методы, общие для всех форм в приложении. Неудивительно, что они сосредоточены в Application — глобальном объекте, соответствующем работающему приложению. Все описан­ные ниже в этом разделе свойства относятся не к компоненту, показывающему подсказку, а именно к Application.

Цвет окна подсказки можно изменить посредством свойства:

(Pb) 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:

(Pb) property HintPause: Integer;

Интервал времени по умолчанию равен 800 мс. После истечения времени таймера, если мышь осталась над тем же элементом, наступает момент

инициализации окна подсказки. При этом программист может получить уп­равление, предусмотрев обработчик события

(Pl) 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;

Без повторного перемещения мыши на текущий элемент оно более не возникнет.

 

 
« Предыдущая статья   Следующая статья »