8.5.8. Подсказки к кнопкам
Все визуальные компоненты в среде Delphi, в том числе и кнопки панели инструментов, могут иметь подсказки. Подсказки бывают двух видов: всплывающие подсказки и подсказки в строке состояния (рисунок 8.72).
Рисунок 8.72. Всплывающая подсказка и подсказка в строке состояния
Обе подсказки хранятся в свойстве Hint, которое имеет следующий формат: <всплывающая подсказка>|<подсказка в строке состояния>
Всплывающая подсказка отделяется вертикальной чертой от подсказки для строки состояния.
Если в программе есть строка состояния, то при попадании указателя мыши на визуальный компонент в ней автоматически отображается поясняющий текст, записанный справа от символа вертикальной черты. Это легко проверить. Впишите в свойстве Hint кнопки Open
текст "Open an existing file...|Open an existing file...". После запуска программы вы обнаружите, что подсказка для кнопки работает точно так же, как и подсказка к пункту меню.
Наиболее удобный вид подсказок — это всплывающие подсказки. Всплывающая подсказка появляется спустя секунду после того, как пользователь задерживает указатель мыши над компонентом. Приятная особенность всплывающих подсказок состоит в том, что они вообще не требуют программирования — достаточно просто разрешить компоненту отображать всплывающую подсказку, и подсказка начнет работать.
Шаг 69. В каждом визуальном компоненте существует булевское свойство ShowHint, определяющее, появляется подсказка, или нет (рисунок 8.73). Его значение может устанавливаться напрямую, а может копироваться из содержащего компонента (например, из формы). Копирование значения происходит тогда, когда вспомогательное свойство ParentShowHint установлено в True. Таким образом, появлением подсказок можно управлять из содержащего компонента. Этой возможностью мы воспользуемся в нашей
321
задаче. Принимая во внимание, что во всех компонентах свойство ParentShowHint изначально равно True, просто установите в компоненте ToolBar (владелец кнопок) свойство ShowHint в значение True. В результате во всех кнопках свойство ShowHint тоже получит значение True и это заставит их отображать свои подсказки.
Рисунок 8.73. Свойство ShowHint управляет отображением всплывающих подсказок
Шаг 70. Впишите для каждой кнопки текст подсказки (свойство Hint). Как вы знаете, свойство Hint может содержать сразу две подсказки: всплывающую подсказку и подсказку в строке состояния (они разделяются символом вертикальной черты). Если вторая кажется вам лишней, просто не набирайте ее, но символ вертикальной черты поставьте (рисунок 8.74).
322
Рисунок 8.74. Символ вертикальной черты в тексте подсказки оставлен, чтобы подсказка не отображалась в строке состояния
Выполните компиляцию и запустите программу. Убедитесь, что панель инструментов работает правильно.
Давайте придадим приложению завершенность и доработаем обработчики команд меню
View | Toolbar и View | Status bar.
8.5.9. Управление видимостью панели кнопок
Шаг 71. Обработка команд View | Toolbar и View | Status bar выполняется на удивление просто — у соответствующей панели изменяется значение булевского свойства Visible на противоположное. При этом панель исчезает или появляется в окне вместе с изменением значения свойства. Проще не придумаешь! Окончательный вариант обработчиков будет следующим:
procedure TPictureForm.ToolBarMenuItemClick(Sender: TObject); begin
ToolBar.Visible := not ToolBar.Visible; ToolBarMenuItem.Checked := not ToolBarMenuItem.Checked;
end;
procedure TPictureForm.StatusBarMenuItemClick(Sender: TObject); begin
StatusBar.Visible := not StatusBar.Visible; StatusBarMenuItem.Checked := not StatusBarMenuItem.Checked;
end;
Итак, приложение для просмотра графических файлов обладает полным набором функциональных возможностей. Выполните его компиляцию и посмотрите, как исчезают и появляются панель инструментов и строка состояния при выборе в меню View соответствующих команд.
8.6. Список команд
Часто одна и та же команда дублируется в разных местах пользовательского интерфейса: и в главном меню, и в контекстном меню, и на панели инструментов. Например, команды управления масштабом рисунка присутствуют во всех перечисленных местах программы Picture Viewer. Это очень удобно для пользователя, но добавляет работы программисту, поскольку изменение команды в одном месте требует таких же изменений во всех других местах. На помощь приходит компонент ActionList, который централизованно управляет всеми командами пользовательского интерфейса. Рассмотрим его использование.
8.6.1. Создание списка команд
Отыщите в палитре компонентов на вкладке Standart компонент ActionList и добавьте его в форму (рисунок 8.75).
Рисунок 8.75. Компонент ActionList
Дайте компоненту имя ActionList (рисунок 8.76).
323
Рисунок 8.76. Компонент ActionList на форме
Ознакомьтесь со свойствами компонента ActionList в таблице 8.17.
Свойство Описание
Images Список значков, отображаемых в компонентах, использующих команды. Свойство Images используется совместно со свойством ImageIndex компонентов Action.
State |
Позволяет временно запретить выполнение всех команд |
||
|
списка. |
Возможные |
значения: |
asNormal — команды работают в обычном режиме и доступность каждой команды определяется значением свойства Enabled в соответствующем компоненте Action; asSuspended — все команды недоступны, но при этом не затрагиваются свойства Enabled в компонентах Action; asSuspendedEnabled — все команды недоступны, но имеют обычный вид благодаря тому, что свойство Enabled каждого компонента Action устанавливается в значение True.
OnChange Происходит при модификации команд в списке. Однако не происходит при создании и уничтожении команд.
OnExecute Происходит при выполнении команды.
OnStateChang Происходит при изменении свойства State. Следует
eучитывать, что из-за ошибки в библиотеке VCL событие не происходит при переводе свойства State в значение asSuspended.
OnUpdate Происходит при выполнении команды и периодически во время простоя программы. Позволяет отслеживать и
324
изменять состояния команд.
Таблица 8.17. Важнейшие свойства и события компонента ActionList
Шаг 72. Создание списка команд начнем с команды Open. В контекстном меню компонента
ActionList выберите команду Action List Editor… (рисунок 8.77).
Рисунок 8.77. Вызов списка команд из контекстного меню компонента ActionList
Перед вами откроется окно команд (рисунок 8.78).
325
Рисунок 8.78. Окно команд компонента ActionList
Окно команд работает в паре с окном свойств. Создание и удаление команд осуществляется в окне команд, а свойства отдельно взятой команды устанавливаются в окне свойств
(рисунок 8.78).
Шаг 73. Щелчком на первой кнопке добавьте в список новую команду. Свойства команды немедленно появятся в окне свойств.
8.6.2. Команды
Когда вы создаете очередную команду в компоненте ActionList, среда Delphi добавляет в описание формы компонент Action. Компонент Action не существует отдельно от компонента ActionList и поэтому отсутствует в палитре компонентов. В остальном это обычный компонент, его важнейшие свойства приведены в таблице 8.18.
Свойство |
Описание |
|
|
|
|
|
|
||||
AutoCheck |
Если равно значению True, то выполнение команды |
||||
|
(вызов метода Execute) автоматически приводит к |
||||
|
изменению |
значения |
свойства |
Checked |
на |
|
противоположное. Если равно значению False, то |
||||
|
изменением состояния свойства Checked управляет |
||||
|
сам программист. |
|
|
|
|
|
|
|
|
|
|
Caption |
Заголовок команды. |
|
|
|
|
Category |
Категория команды. |
|
|
|
|
Checked |
Если равно значению True, то команда считается |
||||
|
выбранной. |
В этом случае связанные с командой |
пунткы меню содержат метку, а кнопки имеют вдавленный вид.
326
Enabled |
Определяет, доступна ли команда пользователю. |
GroupIndex Команды с одинаковым положительным значением GroupIndex согласовано переключают свойство Checked — установка у одной команды свойства Checked в значение True приводит к устновке его в значение False в других командах.
ImageIndex Номер значка в списке Images компонента ActionList. Значок отображается рядом с текстом пункта меню (см. параграф 8.1.12). Отрицательное значение свойства ImageIndex говорит о том, что для пункта меню значок не задан. Свойство ImageIndex имеет приоритет над свойством Bitmap.
SecondaryShortCut Дополнительные комбинации клавиш. s
ShortCut |
Комбинация клавиш для выполнения команды. |
|
|||
Visible |
Определяет, видна ли пользователю команда. |
|
|||
OnExecute |
Происходит при выполнении команды. |
|
|
||
OnHint |
Происходит в момент появления всплывающей |
||||
|
подсказки. |
|
|
|
|
OnUpdate |
Происходит |
при |
выполнении |
команды |
и |
|
периодически во время простоя программы. |
||||
|
Позволяет отслеживать и изменять состояние |
||||
|
команды. |
|
|
|
|
Таблица 8.18. Важнейшие свойства и события компонента Action
Шаг 74. Перейдем к настройке команды, созданной на предыдущем шаге. Дайте команде имя OpenAction, в свойстве Caption впишите текст Open... и в свойстве ShortCut выберите значение Ctrl+O (рисунок 8.79).
327
Рисунок 8.79. Для команды Open задана комбинация клавиш Ctrl+O
Команда может иметь значок. Он определяется значением свойства ImageIndex (номер значка в списке Images компонента ActionList). Прежде чем выбрать значение для свойства ImageIndex, нужно указать список значков компоненту ActionList.
Шаг 75. Выделите на форме компонент ActionList и перейдите к окну свойств. Выберите в свойстве Images значение ImageList (рисунок 8.80).
Рисунок 8.80. Для компонента ActionList задается компонент ImageList со списком значков
Шаг 76. А теперь установим компоненту OpenAction соответствующий значок. Перейдите к окну команд и выделите команду OpenAction. Затем в окне свойств отыщите свойство ImageIndex и выберите значок с номером 0 (рисунок 8.81).
328
Рисунок 8.81. Для команды Open задан значок с индексом 0
Шаг 77. С командой OpenAction мы разобрались, теперь самостоятельно создайте команды
SaveAsAction, CloseAction, ExitAction, ToolBarAction, StatusBarAction, HalfSizeAction,
NormalSizeAction, DoubleSizeAction (рисунок 8.82) с соответствующими заголовками
(свойство Caption).
Рисунок 8.82. Полный список команд для программы
Самая ответственная часть работы завершена, список команд сформирован. Теперь привяжем команды к визуальным компонентам: кнопкам и пунктам меню.
8.6.3. Привязка команд
Кнопки, пункты меню и некоторые другие визуальные компоненты имеют свойство Action, с помощью которого к ним привязываются команды. В результате установки свойства Action визуальный компонент копирует к себе значения свойств команды (надпись, значок, подсказку и др.). Кроме того, команда запоминает, к каким компонентам она привязана с
329
тем, чтобы изменение свойств команды вызывало изменение соответствующих свойств во всех связанных с ней компонентах.
Шаг 78. Привязку команд начнем с кнопки Open на панели инструментов. Выделите ее и в раскрывающемся списке свойства Action выберите значение OpenAction (рисунок 8.83).
Рисунок 8.83. К кнопке OpenToolButton привязывается команда OpenAction
Обратите внимание, что надпись на кнопке изменилась. Это результат копирования значения свойства Caption из компонента OpenAction в компонент OpenToolButton.
Шаг 79. Аналогичным образом привяжите команду OpenAction к пункту Open… главного меню (рисунок 8.84).
Рисунок 8.84. К пункту меню OpenMenuItem привязывается команда OpenAction
Проверим, что у нас получилось. Выполните компиляцию и запустите программу
(рисунок 8.85).
330