Как вы хорошо знаете, строка состояния - это еще стандартное место отображения подсказок к пунктам меню. Сейчас самое время заняться этим вопросом. Вспомните, как работает строка состояния вашего любимого текстового процессора. Когда вы активизируете меню, строка состояния, состоящая из нескольких панелей, превращается в простую длинную панель и на ней отображается подсказка текущего пункта меню. Когда вы завершаете работу с меню (например, выбираете команду), строка состояния восстанавливает свой первоначальный вид.
Для того чтобы вы могли получить строку состояния с описанной выше логикой работы, в компоненте 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. Программа для просмотра графических файлов теперь показывает подсказки для пунктов меню в строке состояния
Если критически взглянуть на нынешний вариант программы, то среди прочих мелких замечаний выделяется существенный недостаток: форма неправильно прокручивает свое содержимое, когда размеры рисунка превышают размеры формы. Дело в том, что в прокрутке участвует и строка состояния, а этого быть не должно. Строка состояния должна оставаться на своем месте, прижимаясь к нижнему краю формы. Чтобы разобраться с этой проблемой, читайте следующий параграф.
Прокрутка