Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
_Delphi_1курс лекции / Тема 10 ImageList ActionList.doc
Скачиваний:
65
Добавлен:
23.03.2015
Размер:
157.7 Кб
Скачать

ImageList, ActionList 12 Технология разработки приложений

Грамотная разработка серьезного приложения должна начинаться не с создания красивого и удобного пользовательского интерфейса, а с составления списка действий, которые пользователь сможет выполнять с помощью данного приложения. Конечно, по мере проектирования этот первоначальный список будет расширяться и уточняться. Но хотя бы начальный вариант такого списка должен являться отправной точкой проектирования. Без этого вряд ли можно создать что-нибудь стоящее.

Когда список действий составлен, можно начать размышлять над исполнительными элементами интерфейса, с помощью которых пользователь сможет инициировать действия. И здесь могут возникнуть определенные сложности. Обычно для одного и того же действия предусматривается несколько инициаторов. Например, как правило, некоторые разделы главного меню дублируются быстрыми кнопками инструментальных панелей, разделами контекстных меню, горячими клавишами, иногда обычными кнопками. Такое дублирование удобно пользователю. Но независимая разработка всех этих управляющих элементов часто приводит к неоправданному дублированию кодов, а главное — снижает возможности модернизации и сопровождения приложения. Действительно, если вы надумаете что-то изменить в одном из действий, вы должны будете вносить изменения сразу в нескольких местах программы. И не дай бог что-то пропустить: согласованная работа управляющих элементов нарушится.

Чтобы избежать подобных сложностей, в Delphi предусмотрены компоненты, осуществляющие централизованное управление действиями, ихдиспетчеризацию. Составленный вами список действий вы заносите в специальный компонент — диспетчер. Для каждого действия при этом вы можете задать множество свойств: надписи на соответствующих элементах управления, пиктограммы, тексты ярлычков подсказок, горячие клавиши и многое другое. Вы можете также написать обработчик, обеспечивающий выполнение задуманного действия. Впрочем, как вы увидите далее, для стандартных действий это даже обычно не нужно делать. Разработчики Delphi создали множество классов таких стандартных действий, в которых необходимые функции реализуются автоматически. Так что, не ознакомившись в деталях с этими возможностями, вы рискуетеォизобретать велосипедサ. Вы потратите время и силы на их реализацию, а потом окажется, что то же самое можно было сделать несколькими движениями мыши, причем много лучше, чем вы это придумали сами.

Если вы сформировали подобный список действий, то последующее проектирование управляющих элементов существенно упрощается. В большинстве элементов имеется свойство Action. Достаточно сослаться в этом свойстве на одно из действий, как все свойства этого действия и обработчик, реализующий его, перенесутся в данный управляющий элемент. И вам не придется для каждого элемента задавать все это заново. Представляете, сколько времени вы сэкономите? А если вы в дальнейшем что-то измените в реализации действия или в его свойствах (например, смените горячие клавиши или пиктограмму), то вам даже не надо будет вспоминать, какие элементы в различных формах вашего приложения инициируют это действие. Все эти элементы автоматически воспримут внесенные изменения.

В Delphi предусмотрена подобная централизация управления приложением на нескольких уровнях. Для диспетчеризации действий, начиная с Delphi 4, имеется компонент ActionList, Он упростил создание меню и инструментальных панелей, позволил делать программы более понятные и структурированные. Уже в Delphi 5 число стандартных действий, к которым можно обращаться изActionList, было свыше двадцати. А в Delphi 7 их число достигло 66. Представляете, сколько стандартных операций реализовали за вас создатели Delphi?

Кроме того, начиная с Delphi 6, в библиотеке появилась группа гораздо более мощных компонентов, предназначенных для управления событиями: ActionManager, ActionMainMenuBar,ActionToolBar, CustomizeDlg. Они не только обеспечивают новые возможности визуального проектирования, но и решают, например, такую задачу, как настройка меню и инструментальных панелей пользователем.

Пока мы рассматривали только диспетчеризацию действий. Но централизация управления приложением имеет еще несколько уровней. Во-первых, надо упомянуть список изображений ImageList, который может централизованно снабжать изображениями и пиктограммами различные элементы приложения

Прежде, чем переходить к конкретным вопросам, надо договориться о том, что мы будем понимать под действиями.

Действие (action) — реализация некоторого поведения, являющегося реакцией на поступок пользователя, такой, как щелчок на кнопке или на разделе меню — инициаторедействия илиинтерфейсном компоненте действия. Примерами действий являются открытие файла и его загрузка в какой-то приемник, сохранение информации в файле на диске, установка атрибутов шрифта и выравнивание текстов в окнах редактирования, поиск и замена фрагментов текста, навигация по набору данных, выполнение какого-то внешнего приложения, вызов справки и многое другое.

Перечисленные примеры относились к стандартным действиям. В действительности таких действий много больше, чем перечислено выше. Все стандартные действия реализованы в Delphi классами, наследующими базовому классу действий TAction. Обработчики подобных действий в ряде случаев вам писать вообще не надо, так как они реализованы в соответствующих классах.

Помимо стандартных действий в реальных приложениях имеются, конечно, и нестандартные, связанные с какими-то расчетами, обработкой данных и т.п. Объекты таких действий вам надо создать самим (делается это очень просто методами визуального программирования) и для них надо написать обработчики, реализующие данные действия.

Таким образом, как уже говорилось, прежде чем начинать программирование приложения, вам надо составить для себя список действий, которые должны быть доступны будущему пользователю через разделы меню, инструментальные панели, кнопки и другие элементы управления. При программировании этот список реализуется специальными компонентами, обеспечивающими диспетчеризацию действий, В Delphi 4 и 5 был только один такой диспетчер действий — компонентActionList. Редактор этого компонента позволял сформировать список действий, написать обработчики, выполняющие задуманные действия, задать основные свойства будущих интерфейсных компонентов — пиктограммы, надписи, быстрые кнопки, тексты подсказок и т.п. Начиная с Delphi 6, появился еще один диспетчер действий — компонентActionManager, который намного мощнееActionList.

После того как список действий создан, надо сформировать полосы действий, Это компоненты, на которых располагаются интерфейсные компоненты действий. Такими полосами действий являются полоса главного меню и инструментальные панели. При использованииActionList эти полосы действий надо добавлять на форму в виде отдельных компонентов, создавать на них инициаторы действий (разделы меню, быстрые кнопки), а затем связывать инициаторы с соответствующими действиями из спискаActionList. При таком связывании свойства, заложенные в действия, автоматически передаются интерфейсным компонентам. В АсtionManager создание полос действий упрощается. Они создаются и формируются непосредственно из редактораActionManager простым перетаскиванием мышью.

Интерфейсные компоненты действий обычно должны содержать поясняющие их изображения. Эти изображения собираются в списке изображений — компоненте ImageList. Для нестандартных действий эти изображения вы должны загрузить в ImageList сами. А изображения для стандартных действий загружаются в него автоматически по мере формирования списка в диспетчере действий.

Таким образом, последовательность формирования списка действий и проектирования меню и инструментальных панелей сводится к следующим шагам:

1. Продумывается и составляется список действий, которые должны быть доступны будущему пользователю через разделы меню, инструментальные панели, кнопки и другие элементы управления.

2. Для тех нестандартных действий, которые должны быть доступны из быстрых кнопок инструментальной панели, готовится список пиктограмм на кнопках в компоненте ImageList.

3. На главную форму приложения переносится компонент диспетчеризации действий: ActionListилиActionManager. Компонент связывается с ImageList. Формируется список стандартных и нестандартных действий.

4. Каждому действию задается набор характеристик: Name (имя)Caption (надпись, в которой выделяется символ быстрого доступа),Shortcut (горячие клавиши),Imagelndex (номер изображения вImageList), Hint (тексты подсказок),HelpContext или HelpKeyword (ссылка на тему справки) и др. Для нестандартных действий все эти характеристики вы записываете сами. Для стандартных действий они заносятся автоматически. Вам надо только перевести надписи и подсказки на русский язык и, может быть, исправить ссылки на не устраивающие вас стандартные изображения и комбинации горячих клавиш. А если у вас предусмотрена в приложении контекстная справка, то надо задать ссылки на соответствующие темы. Впрочем, в начале проектирования справки, конечно, еще нет. Так что свойстваHelpContext и HelpKeyword вы можете задать позднее.

5. Записываются обработчики событий выполнения для всех нестандартных действий. Стандартные действия обрабатываются автоматически и для многих из них достаточно задать некоторые свойства обработки. Впрочем, как будет видно позднее, иногда надо писать обработчики и для стандартных действий.

Дальнейшие шаги зависят от того, используете ли вы компонент ActionList, или ActionManager. Для ActionList далее надо сделать следующее:

6. На форму переносится компонент MainMenu — главное меню, связывается с ImageList, в компоненте формируется меню и в его разделах даются ссылки на действия, описанныев ActionList.

7. На форме создается инструментальная панель (обычно, компонент ТооllBaг). Панель связывается сImageList, а в ее кнопках даются ссылки на действия, описанныев Action List.

Если вы используете компонент ActionManager, то эти шаги выглядят иначе: в. На форму переносится компонентActionMainMenuBar — полоса главного меню. Она связывается с диспетчеромActionManager. Затем из редактораActionManager перетаскиваются мышью на полосу меню категории разделов, которые должны входить в меню как головные разделы, или отдельные действия.

7. В редакторе ActionManager создается новая инструментальная панель, или несколько панелей. На них перетаскиваются мышью необходимые действия.

Вот в общих чертах последовательность операций при проектировании списка

действий, меню и инструментальных панелей.