Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LAB_TP_2013.doc
Скачиваний:
82
Добавлен:
02.06.2015
Размер:
15.36 Mб
Скачать

Диспетчеризация действий на основе компонентов 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,ShortCatCtrl+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,ShortCatCtrl+T. ДляAction3:CaptionУдалить элемент,Hintудалить элемент из списка,Name-Del,ShortCat-Ctrl+B. ДляAction4:CaptionУдалить подсписок,Hintудалить подсписок из списка,Name -Clear_down,ShortCat-Ctrl+C. ДляAction5:CaptionУничтожить список,Hintуничтожить список,Name-Clear,ShortCatCtrl+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, вShowHinttrue.

Перейдите на страницу ДействияокнаРедактора Действий. Перетащите изРедактора Действийна панель категориюФайл. При этом все действия категории перенесутся на панель. Действия также можно перетаскивать на панель поодиночке и там изменять порядок их следования.

Описанным выше образом добавьте на форму вторую инструментальную панель 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 – меню

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]