На этом шаге мы рассмотрим компонент TActionManager.
Вместе с тремя другими компонентами страницы Additional - TActionMainMenuBar, TActionToolBar и TCustomDIg (все перечисленные компоненты впервые введены в версии 6) позволяет создавать настраиваемый пользовательский интерфейс. Таким интерфейсом обладает, например, среда Delphi: вы можете добавить/удалить любую инструментальную кнопку, запретить/разрешить выбор кнопок и опций меню и т. п.
Компонент TActionManager централизует однотипные действия, производимые схожими в функциональном отношении элементами интерфейса. Каждое такое действие компонент сохраняет в дисковом файле, что позволяет программе 'запоминать' последние настройки, произведенные пользователем. Таким образом, компонент значительно расширяет функциональность компонента TActionList и по существу делает его ненужным.
Компонент оперирует категориями однотипных действий (Edit, File, Format и т. п.) и может размещать категории в контейнере TActionMainMenuBar (в виде опций меню), а входящие в них действия - в контейнере TActionToolBar (в виде инструментальных кнопок). В Delphi предусмотрены 12 стандартных категорий, многие действия которых уже заранее предопределены. Например, в категорию File входит предопределенное действие TFileExit. Выбор этого действия в меню или инструментальной кнопкой приводит к завершению работы программы.
Свойства компонента:
Свойство | Описание |
---|---|
Property ActionBars: TActionBars; | Содержит коллекцию всех инструментальных полос, определенных в приложении. Коллекция автоматически пополняется, когда на очередную полосу впервые кладется элемент меню (категория) или кнопка (действие). |
Property ActionCount: Integer; | Содержит общее количество определенных в программе действий. |
Property Actions[Index: Integer]: TContainedAction; | Открывает индексированный доступ к конкретному действию. |
Property FileName: TFileName; | Имя файла, в котором компонент сохраняет текущую конфигурацию действий. |
Property LinkedActionLists: TActionListCollection; | Содержит коллекцию всех связанных с компонентом действий. |
Property Images: TCustomImageList; | Ссылка на связанное с компонентом хранилище изображений. |
Property PrioritySchedule: TStringList; | Содержит для каждого действия номера сессий (запусков программы), когда связанная с действием кнопка или опция меню меняла свою видимость. Если какой-то элемент интерфейса должен постоянно присутствовать на экране, его строка PrioritySchedule должна хранить (-1). |
type TactionListState = (asNormal, asSuspended, asSuspendedEnabled); Property State: TActionListState; |
Включает или отключает действия:
|
Если свойство FileName не определено, компонент не сможет запоминать изменения, сделанные пользователем в интерфейсе программы, и представит элементы интерфейса так, как они были определены при создании программы. Для файла нет умалчиваемого расширения, но сама среда Delphi запоминает сделанные вами изменения в файле BIN\DELPHI32.DMT.
Методы компонента:
Метод | Описание |
---|---|
Procedure LoadFromFile(const FileName: String); | Читает файл, указанный в параметре FileName и загружает информацию, необходимую для восстановления полос действий. |
Procedure LoadFromStream(Stream: TStream); | Загружает информацию, необходимую для восстановления полос действий, из потока Stream восстанавливает вид полосы таким, как сохраняет ее свойство DefaultActionBar, уничтожает файл, указанный в свойстве FileName. |
Procedure ResetActionBar(Index: Integer); Procedure ResetUseageData; |
Сохраняет текущие настройки интерфейса в файле FileName. |
Procedure SaveToFile(const FileName: String); Procedure SaveToStream(Stream: TStream); |
Сохраняет текущие настройки интерфейса в потоке Stream. |
Function ExecuteAction (Action: TBasicAction): Boolean; override; | Создает событие OnExecute для выполнения действия Action. |
Познакомимся с методикой использования компонента на следующем примере:
Выполним задание: Создадим приложение с меню File и кнопкой Exit на панели инструментов с помощью компонента TActionManager.
Поместим на форму компоненты TActionManager, TActionMainMenuBar, TActionToolBar и TCustomDIg (рис.1.).
Рис.1.Windows-окно примера при проектировании
Для компонента TActionManager откроем окно редактора компонента (рис.2.). Для этого дважды щелкните на компоненте или вызовете его контекстное меню и выберете команду Customize.
Рис.2.Редактор компонента TActionManager
Откроем дополнительное окно с перечнем всех определенных в Delphi стандартных классов действий (рис.3.). Для этого на вкладке Actions щелкнем правой кнопкой мыши и выберем в контекстном меню команду New Standard Action.
Рис.3.Окно со списком стандартных действий
Выберем в списке все классы, связанные с категорией File, после чего закроем окно
(щелчком на кнопке Ok). Заметим, что для выбора нескольких классов одновременно
щелкайте на каждом, удерживая клавишу
"Схватим" мышью категорию File в поле Categories и перетащим ее на компонент TActionMainMenuBar. Из окна Action перетащим на компонент TActionToolBar элемент Exit.
Поместим в свойство/событие ActionManager компонента TCustomDIg ссылку на компонент ActionManager1.
Для формы напишем следующий обработчик события OnDblClick:
procedure TForm1.FormDblClick(Sender: TObject); begin CustomizeDlg1.Show; end;
Рис.4.Windows-окно приложения при запуске
При запуске программы появляется пустое окно с меню File и кнопкой Exit на панели инструментов, причем команды меню (кроме недоступной команды Run) и кнопки на панели инструментов выполняют ожидаемые от них действия. Двойной щелчок на форме активизирует окно редактора ActionManager1 (рис.2.), и т.о. можно изменять состав команд меню и кнопок панели инструментов.
На следующем шаге мы рассмотрим компонент TActionMainMenuBar.