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

ОГЛАВЛЕНИЕ

 

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

Совсем недавно, с легкой руки 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 возникает событие:

 (Рb) 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; 

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