Диспетчеризация действий на основе компонентов ActionManager, ActionMainMenuBar, ActionToolBar
Диспетчер действий ActionManager не только создает и хранит набор действий, как и ActionList, но и управляет полосами действий – визуальными компонентами, на которых располагаются элементы пользовательского интерфейса. К таким компонентам относятся ActionMainMenuBar – полоса главного меню и ActionToolBar – инструментальная панель. Во время проектирования эти компоненты могут вводиться в приложение непосредственно из палитры компонентов, или создаваться простым перетаскиванием на них необходимых действий из окна Редактора Действий ActionManager. Компонент ActionManager запоминает информацию о составе набора действий и конфигурации полос действий в текстовом или двоичном файле на диске.
Рассмотрим основной компонент всей этой системы – ActionManager. Свойство Images компонента ActionManager указывает на компонент ImageList, содержащий пиктограммы, используемые для обозначения действий.
Загрузим в компонент ImageList1 пиктограммы из файлов fldropen, filesave, floppy, insert, show, delete, arrow1u, erase, dooropen. В компоненте ActionManager1 установим свойство Images равным ImageList1, связав тем самым диспетчер действий со списком изображений.
Свойство State определяет реакцию на действия пользователя. Значение asNormal соответствует нормальной рабочей реакции: при щелчке пользователя на доступных интерфейсных компонентах действий выполняются соответствующие действия.
Свойство FileName задает имя файла, в котором ActionManager хранит информацию о составе связанных с ним полос действий. В начале выполнения приложения ActionManager читает информацию из этого файла и в соответствии с ней формирует полосы действий. А при любых изменениях настройки в процессе выполнения ActionManager записывает в этот файл проведенные изменения. Так что при следующем сеансе работы состав полос действий будет таким, каким сделал его пользователь в предыдущем сеансе.
Примечание. При изменении полос действий в процессе проектирования нужно задавать значение FileName по окончании проектирования, так как в противном случае в файле будет сохранено состояние полос действий предыдущего сеанса. Если же потребовалось изменить полосы действий после того, как было задано значение FileName, то нужно предварительно удалить с диска файл, в котором запоминается состояние. В этом случае при очередном выполнении приложения этот файл создастся заново.
Если в процессе проектирования впервые задается значение FileName, надо просто записать в этом свойстве имя файла с путем к нему. При отсутствии пути файл будет создан в том каталоге, в котором расположен проект. Если же нужно задать в качестве значения FileName имя уже существующего файла, то можно воспользоваться для его выбора кнопкой с многоточием около свойства FileName в окне Инспектора Объектов.
Перейдем к рассмотрению и использованию основного инструмента проектирования – Редактора Действий компонента ActionManager1. Двойным щелчком на компоненте вызывается окно Редактора Действий (Редактирование Form1->ActionManager1) на странице Действия с пустыми панелями Категории: и Действия:. Щелкнем правой кнопкой мыши и в появившемся контекстном меню выберем команду Новое действие. Повторим команду Новое действие еще два раза. После этого в панели Действия: появятся имена Action1, Action2, Action3 объектов этих действий, а в панели Категории: – их категории. Выделим Action1. В Инспекторе Объектов будут видны свойства, которые можно изменить: Caption, Hint, ShortCut и другие. Строка свойства Hint отображается в окне Редактора Действий в панели Описание. Можно изменить также категории действий – их свойства Category. Если в компоненте ActionList понятия категорий лишены определенного смысла, то здесь – при создании меню названия категорий станут надписями головных разделов меню.
Зададим свойства объектов действий. Для Action1: Caption – Сохранить, Category - Файл, Hint – сохранить список в файле, Name - FileSave1, ShortCat - F2. Для Action2: Caption – Сохранить как, Category - Файл, Hint – сохранить список в файле как…, Name - FileSaveAs1, ShortCat – Ctrl+K. Для Action3: Caption – Открыть, Category - Файл, Hint – вывести список из файла, Name - FileOpen1, ShortCat - Ctrl+O. В свойство ImageIndex заносим соответствующие значения.
В дальнейшем действия будут связаны с соответствующими компонентами, например, разделами меню. Щелчок пользователя на разделе будущего меню инициализирует соответствующее действие, что вызывает событие OnExecute. Для перехода в обработчик этого события действия Сохранить сделайте на нем двойной щелчок. Занесите в обработчик соответствующий код (см. файл реализации модуля LR_7). Подобным же образом заполните обработчики для действий Сохранить как и Открыть. Затем для всех действий задайте свойство Enabled = true.
Описанным выше образом командой Новое действие создайте действия Action1, Action2, Action3, Action4, Action5, Action6. Для всех этих действий в свойство Category внесите Действия. Задайте остальные свойства новых объектов действий. Для Action1: Caption – Добавить элемент, Hint – добавить элемент в список, Name - Add, ShortCat - Ctrl+A. Для Action2: Caption – Вывести список, Hint – вывести список в таблицу, Name - Out, ShortCat – Ctrl+T. Для Action3: Caption – Удалить элемент, Hint – удалить элемент из списка, Name - Del, ShortCat - Ctrl+B. Для Action4: Caption – Удалить подсписок, Hint – удалить подсписок из списка, Name- Clear_down, ShortCat - Ctrl+C. Для Action5: Caption – Уничтожить список, Hint – уничтожить список, Name - Clear, ShortCat – Ctrl+D. Для Action6: Caption – Выход, Hint – Выход/Завершение работы, Name - A_exit, ShortCat - Ctrl+E. В свойство ImageIndex заносите соответствующие значения.
В обработчики события OnExecute этих шести действий внесите коды из файла реализации модуля LR_7. Убедитесь, что для всех шести действий свойство Enabled = true.
Теперь выбор категории (Файл, Действия) означает выбор соответствующего списка действий. Порядок действий можно изменить перетаскиванием мышью.
Поочередно перетащите мышью категории на полосу главного меню. При этом все действия перенесутся в меню, а названия категорий станут надписями головных разделов меню (см. рис.7.4). Действия также можно перетаскивать в меню поодиночке и там изменять порядок их следования.
Перейдите на страницу Панели окна Редактора Действий. Кнопкой Новый…добавьте на форму первую инструментальную панель ActionToolBar1. (Отметим, что компонент ActionToolBar можно также добавлять на форму переносом из палитры компонентов.) По умолчанию панель расположится вверху, на всю ширину формы. Задайте её свойство Align = alNone, чтобы придать ей нужные размеры и расположить в нужном месте. Здесь и в дальнейшем может оказаться полезным задание свойству Orientation значения boTopToBottom или boBottomToTop. Полезно также воспользоваться свойством Constraints. В свойство Hint занесите инструментальная панель 1, в ShowHint – true.
Перейдите на страницу Действия окна Редактора Действий. Перетащите из Редактора Действий на панель категорию Файл. При этом все действия категории перенесутся на панель. Действия также можно перетаскивать на панель поодиночке и там изменять порядок их следования.
Описанным выше образом добавьте на форму вторую инструментальную панель ActionToolBar2, задайте в ней свойства и перетащите на неё категорию Действия.
Выделите одну из полос действий на странице Панели окна Редактора Действий и просмотрите в Инспекторе Объектов ее свойства. В свойствах Caption (надпись) измените значения полос действий соответственно на Главное меню, Инструментальная панель 1, Инструментальная панель 2.
Выделите компонент ActionManager1 и задайте значение свойства FileName в окне Инспектора Объектов, т.е. имя файла, в котором ActionManager1 хранит информацию о составе связанных с ним полос действий.
Выделите кнопку Добавить элемент и в её свойство Action занесите Add, чтобы связать кнопку с одноименным действием.
Дополните файл реализации модуля LR_7 обработчиками событий: создания формы, где размещается код для создания заголовка таблицы, и щелчков на компонентах RadioButton1 и RadioButton2, в которых реализуется подготовка компонентов для ввода данных элементов списка.
Удаление элемента и подсписка из списка осуществляется по ячейке, выделенной в таблице вывода списка. При этом используется событие OnSelectCell компонента StringGrid1. В обработчик этого события передаются целые параметры ACol и ARow – столбец и строка выделенной ячейки и булев параметр CanSelect – допустимость выбора.
int r; //переменная для номера строки выделенной ячейки в таблице
bool flag=true; //флаг - нет выделенной ячейки в таблице
void __fastcall TForm1::StringGrid1SelectCell(TObject *Sender, int ACol,
int ARow, bool &CanSelect)
{
r=ARow; //номер строки выделенной ячейки сохранен в переменной r
flag=false; //ячейка в таблице выделена
}
Для удаления элемента и подсписка из списка используется параметр ARow– номер строки выделенной ячейки.
На этом проектирование приложения завершается.
Рис.7.4 – меню
Дата добавления: 2020-10-14; просмотров: 433;