Шаг 20.
Вкладка Additional. Компонент TActionManager

    На этом шаге мы рассмотрим компонент TActionManager.

    Вместе с тремя другими компонентами страницы Additional - TActionMainMenuBar, TActionToolBar и TCustomDIg (все перечисленные компоненты впервые введены в версии 6) позволяет создавать настраиваемый пользовательский интерфейс. Таким интерфейсом обладает, например, среда Delphi: вы можете добавить/удалить любую инструментальную кнопку, запретить/разрешить выбор кнопок и опций меню и т. п.

    Компонент TActionManager централизует однотипные действия, производимые схожими в функциональном отношении элементами интерфейса. Каждое такое действие компонент сохраняет в дисковом файле, что позволяет программе 'запоминать' последние настройки, произведенные пользователем. Таким образом, компонент значительно расширяет функциональность компонента TActionList и по существу делает его ненужным.

    Компонент оперирует категориями однотипных действий (Edit, File, Format и т. п.) и может размещать категории в контейнере TActionMainMenuBar (в виде опций меню), а входящие в них действия - в контейнере TActionToolBar (в виде инструментальных кнопок). В Delphi предусмотрены 12 стандартных категорий, многие действия которых уже заранее предопределены. Например, в категорию File входит предопределенное действие TFileExit. Выбор этого действия в меню или инструментальной кнопкой приводит к завершению работы программы.

    Свойства компонента:

Таблица 1. Свойства компонента TActionManager
Свойство Описание
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;
Включает или отключает действия:
  • asNormal - все действия включены;
  • asSuspended - все действия выключены, их свойства Enabled не изменяются;
  • asSuspendedEnabled - все действия выключены, их свойства Enabled получают значения True.

    Если свойство FileName не определено, компонент не сможет запоминать изменения, сделанные пользователем в интерфейсе программы, и представит элементы интерфейса так, как они были определены при создании программы. Для файла нет умалчиваемого расширения, но сама среда Delphi запоминает сделанные вами изменения в файле BIN\DELPHI32.DMT.

    Методы компонента:

Таблица 2. Методы компонента TActionManager
Метод Описание
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.




Предыдущий шаг Содержание Следующий шаг