Диспетчер действий ActionManager, появившийся в C++Builder 6, создает список стандартных и нестандартных действий и в этом отношении подобен ActionList. Но возможности ActionManager несравненно шире. Он не только хранит набор действий, но и управляет также полосами действий визуальными компонентами, на которых располагаются элементы пользовательского интерфейса. К таким компонентам относятся ActionMainMenuBar полоса главного меню, и ActionToolBar инструментальная панель. Эти компоненты могут вводиться в приложение непосредственно из палитры компонентов, а могут создаваться Редактором Действий ActionManager. Из окна Редактора Действий можно формировать полосы действий простым перетаскиванием на них необходимых действий.
Компонент ActionManager запоминает информацию о составе набора действий и конфигурации полос действий в текстовом или двоичном файле на диске. При этом можно предоставить пользователю возможность настройки меню и инструментальных полос во время выполнения. Эта настройка сохранится в файле и в следующем сеансе работы автоматически загрузится в приложение.
Настройка во время выполнения может осуществляться или вызовом соответствующего стандартного действия, или обращением к специальному компоненту CustomizeDlg, перенесенному на форму. В обоих случаях во время выполнения открывается то же диалоговое окно Редактора Действий, которое используется во время проектирования, но в несколько упрощенном варианте. Это окно позволяет пользователю в процессе выполнения приложения настраивать меню и инструментальные панели, перенося на них новые действия, убирая прежние, делая те или иные инструментальные панели видимыми или невидимыми. Компонент ActionManager обеспечивает сохранение в файле на диске этих пользовательских настроек и загрузку их в следующем сеансе работы с приложением.
Свойство State определяет реакцию на действия пользователя. Значение asNormal соответствует нормальной рабочей реакции: при щелчке пользователя на доступных интерфейсных компонентах действий выполняются соответствующие действия. Два других возможных значения asSuspended и asSuspendedEnabled отключают возможность выполнения действий. Щелчок пользователя не приводит ни к каким результатам. Эти значения State используются при настройке пользователем меню и инструментальных панелей. Различие этих двух значений в том, что первое не изменяет свойства Enabled действий, а второе переводит во всех действиях Enabled в true.
Таким образом, если вы в некоторый момент хотите, чтобы полосы действий, управляемые компонентом ActionManager1, перешли в состояние настройки, надо выполнить оператор:
ActionManager1->State = asSuspended;
Тогда нажатие пользователем кнопки инструментальной панели или раздела меню не будет вызывать выполнение соответствующего действия и может интерпретироваться программой как-то иначе.
Свойство FileName задает имя файла, в котором ActionManager хранит информацию о составе связанных с ним полос действий. В начале выполнения приложения ActionManager читает информацию из этого файла и в соответствии с ней формирует полосы действий. А при любых изменениях настройки в процессе выполнения компонент записывает в этот файл проведенные изменения. Так что при следующем сеансе работы состав полос действий будет таким, каким сделал его пользователь в предыдущем сеансе.
Пока вы ведете проектирование и что-то изменяете в полосах действий, не устанавливайте значение свойства FileName. В противном случае в файле запомнится состояние полос предыдущего сеанса выполнения приложения, и введенные после этого изменения не будут видны в полосах действий при очередном тестировании приложения. Задавать значение FileName имеет смысл в конце проектирования. Если же после этого вам все-таки потребуется изменить полосы действий, удалите с диска файл, в котором запоминается состояние. В этом случае при очередном выполнении приложения этот файл создается заново.
Если вы в процессе проектирования впервые задаете значение FileName, вам надо просто записать в этом свойстве имя файла с путем к нему. При отсутствии пути файл будет создан в том каталоге, в котором расположен ваш проект. В случае если вы хотите задать в качестве значения FileName имя уже существующего файла, можете воспользоваться для его выбора кнопкой с многоточием около свойства FileName в окне Инспектора Объектов.
Свойство Images компонента ActionManager указывает на компонент ImageList, содержащий пиктограммы, используемые для обозначения действий.
Перенесите на форму ActionManager и сделайте на нем двойной щелчок. Вы попадете в окно Редактора Действий на страницу Actions. Только сначала панели Category (категории) и Actions (действия) будут пустыми. Щелкнув правой кнопкой мыши, вы можете ввести новое нестандартное или стандартное действий, выбрав из контекстного меню соответственно команду New Action или New Standard Action.
После того как вы выбрали некоторые действия, в панели Actions появятся имена объектов этих действий, а в панели Category их категории. Если вы выделите какое-то действие, в Инспекторе Объектов вы можете увидеть и изменить его свойства: Caption, Hint, Shortcut и другие. Вторая часть строки свойства Hint отображается в окне Редактора Действий в панели Description (Описание).
Можно изменить категории действий их свойства Category. В отличие от компонента ActionList, в ActionManager понятие категории имеет вполне определенный смысл. При создании меню названия категорий станут надписями головных разделов меню. Так что имеет смысл оформить их сразу так, как положено в меню, переведя на русский язык.
Страница Toolbars (инструментальные панели) окна Редактора Действий компонента ActionManager содержится список управляемых диспетчером ActionManager инструментальных панелей (компонентов ActionToolBar) и меню (компонентов ActionMainMenuBar). Компонент ActionMainMenuBar (полосу главного меню) надо добавлять в приложение обычным способом, перенося его из палитры компонентов. А добавить на форму компонент ActionToolBar можно, просто нажав кнопку New. Нажатие кнопки Delete удаляет выделенную панель действий из списка и вообще из приложения.
После того как вы добавили кнопкой New новую инструментальную панель или перенесли на форму меню ActionMainMenuBar, можно вернуться на страницу Actions и перетащить с нее мышью на панель или в полосу меню требуемые действия или целиком категории. Если в меню перетаскивается категория, ее надпись становится головным разделом меню.
Индикаторы на странице Toolbars около названий полос действий управляют их видимостью. Если выключить такой индикатор, то во время выполнения соответствующая панель будет невидимой.
Если выделить на странице Toolbars одну из полос действий, то можно увидеть в Инспекторе Объектов ее свойства. Большинство из них обычны для любых панелей. В частности, имеет смысл изменить задаваемую по умолчанию надпись (Caption) на что-то более понятное пользователю, так как далее будет показано, что при настройках во время выполнения пользователь будет видеть эти надписи. Стоит также обратить внимание на свойство AllowHiding. Оно разрешает (при значении true) или запрещает делать полосу невидимой в процессе выполнения. Если задать AllowHiding = false, то в Редакторе Действий такая полоса отображается серой. Для такой полосы ни во время проектирования, ни во время выполнения невозможно переключить индикатор видимости. Полоса всегда будет видна.
Выпадающий список Caption Options управляет способом отображения надписей (Caption) действий в выделенной в окне Toolbars инструментальной панели. Значение None соответствует отсутствию надписей. Отображаются только пиктограммы. Впрочем, если действие не имеет пиктограммы, то надпись все равно отображается. Значение позволяет для каждого действия задать видимость надписи индивидуально. Значение All обеспечивает отображение надписей для всех действий. Индикатор Apply caption options to all toolbars распространяет выбранную опцию на все инструментальные панели.
Если вы задали в списке Caption Options значение Selective, то, выделив на панели то или иное действие, можете в Инспекторе Объектов установить значение свойства ShowCaption, определяющего видимость надписи. Если действие не имеет пиктограммы, то для такого действия вы просто не сможете установить ShowCaption в false, ведь в этом случае для действия вообще ничего не отобразилось бы и пользователь не смог бы им воспользоваться.
Если в списке Caption Options вы задали значение All или None, то установка значений свойств ShowCaption отдельных действий ни на что не влияет. Все определяется заданным вами свойством инструментальной панели.
Страница Options Редактора Действий позволяет задать некоторые опции отображения. Индикатор Menus show recently used items first делает меню перестраиваемым, как это предусмотрено в Windows 2000/ХР, причем первыми располагаются разделы, которые недавно использовались. Если этот индикатор включен, то диспетчер действий при каждом очередном выполнении приложение проверяет, давно ли пользователь обращался к тому или иному разделу меню. Если на протяжении нескольких сеансов работы какие-то разделы не использовались, они делаются невидимыми. Точнее, их можно увидеть, только развернув меню полностью. Таким образом, меню перестраивается от сеанса к сеансу, делая видимыми и легко доступными те разделы, к которым пользователь обращается чаще всего.
Кнопка Reset Usage Data восстанавливает первоначальные установки полос действий. Индикатор Large icons приводит к отображению в полосах действий больших пиктограмм. Индикатор Show tips on toolbars управляет появлением всплывающих ярлычков у элементов инструментальных панелей. А индикатор Show shortcut keys in tips определяет включение в тексты этих ярлычков обозначений «горячих» клавиш. Выпадающий список Menu animation определяет анимацию при отображении меню.