Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

DiVM / OOP / 12_116608_1_51491

.pdf
Скачиваний:
19
Добавлен:
11.05.2015
Размер:
6.45 Mб
Скачать

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