Подсказки в строке состояния

Как вы хорошо знаете, строка состояния - это еще стандартное место отображения подсказок к пунктам меню. Сейчас самое время заняться этим вопросом. Вспомните, как работает строка состояния вашего любимого текстового процессора. Когда вы активизируете меню, строка состояния, состоящая из нескольких панелей, превращается в простую длинную панель и на ней отображается подсказка текущего пункта меню. Когда вы завершаете работу с меню (например, выбираете команду), строка состояния восстанавливает свой первоначальный вид.

Для того чтобы вы могли получить строку состояния с описанной выше логикой работы, в компоненте StatusBar предусмотрен режим отображения простого текста. Его обеспечивает булевское свойство SimplePanel. По умолчанию оно равно значению False и в строке состояния отображаются панели объекта Panels. Если установить свойство SimplePanel в значение True, то в строке состояния будет отображаться текст, хранящийся в свойстве SimpleText. Итак, задача состоит в том, чтобы при активизации меню записывать подсказку выбранного пункта в свойстве SimpleText и, в том случае если подсказка содержит текст, устанавливать свойство SimplePanel в значение True. Для решения этой задачи вы должны представлять механизм работы подсказок. Его суть состоит в следующем.

Каждый пункт меню имеет свойство Hint для хранения подсказки. Когда вы выделяете пункт меню с помощью мыши или клавиатуры, текст подсказки переписывается из пункта меню в объект Application, у которого тоже есть свойство Hint. При этом в объекте Application возникает событие OnHint. Все, что нам нужно - написать обработчик этого события, который отобразит значение свойства Hint объекта Application в строке состояния.

Объект Application не виден в окне свойств, но вы можете получить доступ к его событиям на этапе проектирования. Для этого в форму помещается специальный компонент ApplicationEvents, который вы найдете в палитре компонентов на вкладке Additional (рисунок 8.42).


Рисунок 8.42. Компонент ApplicationEvents

Шаг 46. Поместите на форму компонент ApplicationEvents. Дайте ему имя ApplicationEvents. Обратите внимание, что у этого компонента всего два свойства: Name и Tag. Это не удивительно, так как основное назначение компонента - представить события объекта Application (таблица 8.11).

Событие Описание
OnActionExecute Происходит при выполнении любой команды в компоненте ActionList (см. параграф 8.6).
OnActionUpdate Происходит во время простоя программы для обновления состояния команд в компоненте ActionList (см. параграф 8.6).
OnActivate Происходит, когда приложение получает активность, т.е. когда пользователь переключается на него с другого приложения.
OnDeactivate Происходит, когда приложение теряет активность, т.е. когда пользователь переключается с него на другое приложения.
OnException Происходит, когда в приложении возникает необработанная исключительная ситуация. По умолчанию обработчик этого события вызывает метод ShowException для отображения окна сообщений с пояснением причины ошибки. Вы можете изменить реакцию на событиеOnException, переписав его обработчик.
OnHelp Происходит, когда пользователь вызывает справку.
OnHint Происходит, когда курсор мыши наводится на компонент, содержащий всплывающую подсказку.
OnIdle Периодически происходит во время простоя программы.
OnMessage Происходит при получении программой сообщения операционной системы Windows.
OnMinimize Происходит, когда пользователь сворачивает приложение.
OnRestore Происходит, когда пользователь восстанавливает свернутое приложение.
OnSettingChange Происходит при изменении настроек операционной системы, например, настроек экрана или региональных настроек.
OnShortCut Происходит при нажатии клавиш на клавиатуре (еще до того, как в форме происходит событие OnKeyDown).
OnShowHint Происходит непосредственно перед появлением любой всплывающей подсказки.

Таблица 8.11. События компонента ApplicationEvents

Шаг 47. В окне свойств переключитесь на вкладку Events, найдите событие OnHint и создайте следующий обработчик:

procedure TPictureForm.ApplicationEventsHint(Sender: TObject); begin with StatusBar do begin SimpleText:= Application.Hint; SimplePanel:= SimpleText <> ''; end; end;

Шаг 48. Теперь в свойстве Hint каждого пункта меню впишите угодную вам строку-подсказку (рисунок 8.43).


Рисунок 8.43. Подсказка для пункта меню

Шаг 49. Выполните компиляцию и запустите программу. Проверьте работу механизма подсказок в строке состояния (рисунок 8.44).


Рисунок 8.44. Программа для просмотра графических файлов теперь показывает подсказки для пунктов меню в строке состояния

Если критически взглянуть на нынешний вариант программы, то среди прочих мелких замечаний выделяется существенный недостаток: форма неправильно прокручивает свое содержимое, когда размеры рисунка превышают размеры формы. Дело в том, что в прокрутке участвует и строка состояния, а этого быть не должно. Строка состояния должна оставаться на своем месте, прижимаясь к нижнему краю формы. Чтобы разобраться с этой проблемой, читайте следующий параграф.

Прокрутка


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: