Лекция 4.6. Панели инструментов
Панель инструментов является альтернативой меню, обеспечивая более быстрый доступ к командам. Панели инструментов обычно создаются на основе компонента класса TToolBar. Каждая кнопка панели инструментов является представителем класса TToolButton.
Класс TToolBar
Класс TToolBar объединяет в одном объекте сами кнопки и контейнер для них. В контейнере компонента TToolBar допускается размещать и другие элементы управления, такие как TEdit, TComboBox и т.д. Основные свойства класса TToolBar:
· ButtonWidth: Integer – ширина кнопок панели инструментов;
· ButtonHeight: Integer – высота кнопок панели инструментов;
· Images: TCustomImageList – коллекция картинок отображаемых на активных кнопках;
· DisabledImages: TCustomImageList – коллекция картинок отображаемых на неактивных кнопках;
· Flat: Boolean – внешний вид кнопок, плоские (true) или обычные (false);
· HotImages: TCustomImageList – коллекция картинок отображаемых на кнопках при нахождении над ними указателя мыши;
· Indent: Integer – интервал между левой границей панели и левой границей элемента управления, расположенного на ней;
· List: Boolean – способ расположения изображения и надписи на кнопке относительно друг друга: если true, то текст располагается справа от картинки, если false – то над картинкой;
· ShowCaptions: Boolean – определяет, отображать (true) или нет (false) надписи на кнопках;
· Transparent: Boolean – определяет прозрачность панели инструментов;
· Wrapable: Boolean – если значение данного свойства равно true, то элементы управления на панели инструментов могут автоматически распределяться по нескольким строкам;
Методы, инкапсулированные в классе TToolBar, используются довольно редко, поэтому рассматриваться не будут.
В классе TToolBar определено довольно большое количество событий, среди которых наиболее важными являются события, генерируемые при перемещении панели с помощью мыши: OnStartDrag, OnStartDock, OnEndDrag, OnEndDock, OnDragDrop, OnDockDrop, OnDragOver и OnDockOver.
Класс TToolButton
Каждая кнопка, расположенная на панели инструментов, является экземпляром класса TToolButton. Основные свойства класса TToolButton:
· Caption: TCaption – надпись на кнопке (отображается в том случае, если значение свойства ShowCaptions равное true);
· AllowAllUp: Boolean – определяет, могут (true) или нет (false) все кнопки, входящие в группу с зависимым нажатием, быть «отжаты» одновременно;
· AutoSize:Boolean – автоматическое изменение размеров кнопки по содержимому;
· Down: Boolean – определяет, нажата кнопка (true) или нет (false);
· DropdownMenu: TPopupMenu – указывает на контекстное меню, связанное с кнопкой;
· Grouped: Boolean – используется для организации группы кнопок с зависимым нажатием;
· ImageIndex: TImageIndex – определяет номер картинки из списка Images панели инструментов, отображаемую на кнопке;
· Marked: Boolean – если значение данного свойства равно true, то кнопка выделяется цветом;
· MenuItem: TMenuItem – пункт меню, соответствующий кнопке;
· Style: TToolButtonStyle = (tbsButton, tbsCheck, tbsDropDown, tbsSeparator, tbsDivider) – cтиль кнопки:
ü tbsButton – обычная кнопка;
ü tbsCheck – кнопка с двумя состояниями;
ü tbsDropDown – кнопка с выпадающим меню;
ü tbsSeparator, tbsDivider – разделители (линяя разделитель и разделитель интервалом).
Для создания кнопки на панели инструментов во время разработки программы, используется команда контекстного меню New Button компонента TToolBar. Кнопки можно группировать, разделителями (Separator или Divider), которые создаются командой контекстного меню New Separator. Кнопки и разделители на панели инструментов можно перемещать с помощью мыши.
Наиболее часто используется метод Click, генерирующий событие OnClick кнопки, т.е. имитирующий ее нажатие.
Кнопки на панели инструментов могут использоваться как флажки или переключатели. В первом случае достаточно присвоить свойству Style кнопки значение tbsCheck. После этого кнопка сможет находиться в двух состояниях: нажатом и отжатом.
О состоянии кнопки сигнализирует свойство Down.Для использования кнопок в качестве переключателей, их группируют, присвоением свойству Grouped каждой кнопке группы значение true. Свойство Style для всех кнопок группы следует установить в значение tbsCheck. После этого находиться в нажатом состоянии сможет только одна кнопка из группы. Если же свойству AllowAllUp кнопки, входящей группу, присвоить значение true, то ее можно будет «отжать», даже если все остальные кнопки группы «отжаты».
Реакция на нажатие кнопки панели инструментов может задаваться тремя способами:
· с помощью обработчика события OnClick;
· путем указания действия в свойстве Action;
· путем указания пункта меню, соответствующего кнопке, через свойство MenuItem.
Контейнеры для панелей инструментов
В некоторых случаях возникает необходимость использовать несколько панелей инструментов как, например, это реализовано в MS Word. Для этих целей используются специальные контейнеры классов TCoolBar и TControlBar. Первый из них является разработкой фирмы Microsoft и содержится в библиотеке comctl32.dll. Второй разработан фирмой Inprise и входит в состав VCL. С точки зрения функциональных возможностей между двумя этими компонентами нет существенных различий.
Компонент TCoolBar
Компонент TCoolBar фактически является коллекцией объектов TCoolBand, каждый из них может содержать компонент TToolBar. Для размещения панели инструментов в контейнере TCoolBar необходимо сначала создать в нем элемент TCoolBand, для чего используется редактор, вызываемый двойным щелчком мыши на компоненте TCoolBar, помещенном на форму, или на кнопке с многоточием в инспекторе объектов, свойства Bands. Панель инструментов связывается с элементом TCoolBands через свойство Control класса TCoolBand.
Панели инструментов, размещенные в TCoolBar, можно сделать «плавающими», для этого свойству DockSite контейнера TCoolВаr и главной формы присваивается значение true, а свойству DragMode панели – значение dmAutomatic.
В результате, во время работы программы, появится возможность перемещения панели инструментов из контейнера на форму, и наоборот.Настройкой свойств DockSite и DragMode можно реализовать механизм «drag-and-dock», без написания кода.
Компонент TControlBar
Использование компонента TControlBar не требует создания дополнительных объектов. Достаточно просто поместить панель инструментов (или любой элемент управления) в контейнер TControlBar. В остальном работа с этим компонентом практически ничем не отличается от работы с контейнером TCoolBar. Все настройки для создания возможности переноса панелей инструментов, размещенных в контейнере, аналогичны предыдущему случаю.
Использование свойства Action
Для больших программ, в которых одно и тоже действие может выполняться разными способами, например через панель инструментов и команду меню, удобно использовать список действий класса TActionList, его использование позволяет:
· синхронизировать элементы управления;
· снизить затраты времени на разработку меню и панелей инструментов;
· снизить количество ошибок, связанных описанием одинаковых действий.
Основное свойство компонента TActionList – Images служит для подключения к коллекции изображений TImageList.
Для определения действий используется специальный редактор действий, который открывается двойным щелчком мыши на компоненте, размещенном на форме.
Для добавления нового действия используется команда New Action контекстного меню редактора действий. Каждое заданное действие является экземпляром класса TAction, причем все основные опубликованные свойства этого класса дублируют ряд свойств класса TMenuItem: Caption, Checked, Enabled, ImageIndex и Shortcut. Свойство Category используется для логического разделения действий на категории и ни на что не влияет. Функция, связанная с действием, задается с помощью метода-обработчика события OnExecute класса TAction. Если для пустого пункта меню или кнопки панелей инструментов определить свойство Action, то они унаследуют все его свойства такие как: Caption, Checked, Enabled, ImageIndex и т.д.
При выборе этой команды будет выполняться функция, заданная в обработчике события OnExecute указанного действия.Модифицируем пример приложения «Блокнот» рассмотренный в теме «Стандартные окна диалога», путем замены кнопок на меню и панели инструментов, синхронизированные компонентом TActionList:
1. Удалите компонент Panel1. Компонент удалится вместе со всеми кнопками, останутся только обработчики событий кнопок с написанным кодом.
2. Разместите на форме главное меню (TMainMenu), компонент TActionList, панель инструментов (TToolBar) и коллекцию изображений класса TImageList.
Рисунок 4.6.1 - Коллекция изображений
3. Подключите через свойства Images меню, панель инструментов и список действий к коллекции изображений.
4. Щелкните дважды по компоненту TImageList, размещенному на форме, и загрузите картинки подходящие для отображения действий (рисунок 4.6.1).
5. Кликните дважды по компоненту TActionList, расположенному на форме. В результате откроется редактор действий.
6. В панели инструментов редактора действий нажмите на кнопку New Action. В результате будет создано первое действие.
7. Выделите созданное действие, и в инспекторе объектов присвойте его свойствам следующие значения:
ü Name – значение «OpenFile»;
ü Caption – значение «Открыть»;
ü ImageIndex – значение 0.
8. Перейдите на вкладку Event и выберите из раскрывающегося списка события OnExecute имя процедуры обработчика Button1Click (обработчик бывшей кнопки «Открыть»)
9. Создайте новое действие и отредактируйте его свойства и события следующим образом:
ü Name – значение «SaveFile»;
ü Caption – значение «Сохранить»;
ü ImageIndex – значение 1;
ü OnExecute – Button2Click (обработчик бывшей кнопки «Сохранить»).
10. По аналогии создайте действие для выбора шрифта и отредактируйте его свойства:
ü Name – значение «Font»;
ü Caption – значение «Шрифт»;
ü ImageIndex – значение 2;
ü OnExecute – Button3Click (обработчик бывшей кнопки «Шрифт»)
11.
Создайте действие для выбора цвета фона и отредактируйте его свойства:ü Name – значение «Color»;
ü Caption – значение «Фон»;
ü OnExecute – Button4Click (обработчик бывшей кнопки «Фон»)
12. Создайте действие для закрытия программы и отредактируйте его свойства:
ü Name – значение «Exit»;
ü Caption – значение «Выход»;
ü OnExecute – Button5Click (обработчик бывшей кнопки «Закрыть»)
Рисунок 4.6.2 - Редактор действий
13. Создайте главное меню. Для этого щелкните дважды по компоненту MainMenu1 и в редакторе меню создайте разделы «Файл», «Формат» и «Вид»
14. Выделите пустой пункт в разделе меню «Файл» и установите в инспекторе объектов свойству Action значение OpenFile. По аналогии создайте все остальные пункты меню.
15. Создайте три кнопки на панели инструментов, командой контекстного меню New Button и свойствам Action кнопок присвойте действия OpenFile, SaveFile, Font.
16. Установите свойство Flat панели инструментов в значение true.
17. Выполните компиляцию и тестирование программы. Обратите внимание на то, что команды панели инструментов и соответствующие команды меню работают одинаково, т.к. обрабатываются одними и теми же процедурами-обработчиками событий. Результат представлен на рисунке 3.
Рисунок 4.6.3 - Пример использования меню и панелей инструментов.
Задания для самостоятельной работы:
1. Завершите создание вашей программы «Блокнот» добавив в него функции поиска, замены, дополнив его новым разделом меню «Правка» и соответствующими пунктами меню и командами панели инструментов.
2. Посмотрите возможности стандартного приложения ОС Windows «Блокнот» и дополните программу собственными возможностями.
3. Реализуйте плавающую панель инструментов на основе TControlBar или TCoolBar.
Вопросы для самоконтроля:
1. Назовите основные свойства компонентов класса TToolBar?
2. Назовите основные свойства компонентов класса TToolButton?
3. Каким образом к кнопкам панели инструментов подключаются изображения?
4. Как выполняется разделение кнопок панели инструментов на группы?
5. Как функции флажка использовать на кнопках панели инструментов?
6. Как реализовать функции переключателей для группы кнопок панели инструментов?
7. Какими средствами создаются плавающие панели инструментов?
8. Назовите назначение компонента класса TActionList?
9. Как кнопкам панели инструментов и командам меню назначаются действия?
10. Какие свойства передаются кнопкам меню и панелям инструментов при назначении им действия?