Меню в стиле XP
Автор: Profi
Очень часто в сети на форумах по программированию можно встретить вопросы типа: «как сделать меню в стиле XP» или «нужен компонент Menu в стиле Office 2003». Обычно предлагаются или сторонние компоненты, или вовсе экзотические решения вроде ручной прорисовки пунктов меню (знать это, конечно, надо, но лично мне данный метод применять не приходилось). Я же расскажу, как можно сделать это с помощью стандартных компонентов, входящих в Delphi 7 и выше (пример буду рассматривать, используя BDS 2006).
Итак, приступим. Запустим Delphi for Win32 и создадим новый проект. Открываем вкладку компонентов Additional и кидаем на форму три компонента: TActionManager, TActionMainMenuBar и TXPColorMap (заметим, что визуальный из них только один – TactionMainMenuBar).
 Рис.1
Теперь свяжем «Меню» с «Менеджером Действий» и «Цветовой Темой». На вкладке Structure нажимаем на плюсик левее ActionManager1 и видим там два пункта: ActionBars и LinkedActionList. ActionBars – содержит список bar’ов, с которыми работает TActionManager, а LinkedActionList – перечень дополнительных списков действий. Нам нужен именно ActionBars. Кликнем на нем правой кнопкой мыши и выберем AddItem (добавить элемент).
 Рис.2
Появится новый элемент – 0 – TActionBarItem. В Object Inspector’е нажимаем на стрелочку правее пункта ActionBar и выбираем ActionMainMenuBar1. Теперь в Structure выбираем ActionMainMenuBar1 и видим, что в пункте ActionManager уже стоит ActionManager1. Да, связь «Меню» и «Менеджера Действий» завершена, но вот «Цветовая Тема» в «Меню» еще не настроена. Находим в Object Inspector’е пункт ColorMap и указываем там XPColorMap1.
Теперь создадим первый пункт меню – Файл. Снова открываем в Structure ActionBars и видим, что 0 – TActionBarItem превратился в 0 – TActionBar -> ActionMainMenuBar1. Нажимаем на плюсик слева от пункта, кликаем на свойстве Items правой кнопкой и выбираем AddItem. У нас появился пункт 0 – ActionClientItem0, это и есть наш первый пункт меню. Меняем его Caption с ActionClientItem0 на Файл и компилируем проект. Но что мы видим! Пункт неактивен. Все верно, ведь у него нет дочерних пунктов, да и никакого действия мы на него не повесили. Сейчас мы это исправим.
В Structure находим 0 – Файл, кликаем правой кнопкой на его свойстве Items и снова AddItem. Этим действием мы добавили дочерний пункт ActionClientItem0 к пункту Файл. Меняем его Caption на Выход и вновь компилируем проект.
 Рис.3
Что ж, пункт Файл стал активным, но вот Выход – нет. Исправим это, «повесив» на пункт Выход действие. Выберем в Structure ActionManager1 и, кликнув правой кнопкой мыши, выберем пункт «Customize…». Откроется окно редактора «Действий».
 Рис.4
Кликнем на кнопку New Action и, тем самым, создадим новое действие Action1. Теперь посмотрим на Structure, у ActionManager1 появился новый пункт (No Category). Раскроем его, нажав на плюс, и увидим там только что созданный Action1. Изменим его Caption на Выход. Теперь перейдем на вкладку Events и дважды кликнем на пустом поле правее OnExecute. Delphi сама переключится на редактор кода, и мы увидим новую функцию Action1Execute. Напишем внутри функции всего одну строчку: Close;. Теперь вернемся в Structure к элементу 0 – Выход, и в свойстве Action укажем Action1. Компилируем, нажимаем Файл – Выход, радуемся.
 Рис.5
Как видно из рисунка 5, меню выглядит в стиле Office 2003.
Теперь добавим картинку. Идем на вкладку компонент Win32 и кидаем на форму TImageList. Дважды кликаем на нем и, нажав Add, добавляем какую-нибудь картинку.
 Рис.6
Снова идем в Structure и в свойстве Images ActionManager1 указываем ImageList1. Находим 0 – Выход и, нажав на стрелочку правее пункта ImageIndex в свойствах, выбираем только что добавленную картинку. Если кто-то поторопился и уже скомпилировал проект, то он будет разочарован, так как никакой картинки в пункте меню Выход не появилось. А все потому, что ту же самую картинку нужно повесить и на Действие, выполняемое этим пунктом. Находим в Structure Action1 и его свойству ImageIndex присваиваем индекс той же самой картинки. Компилируем, нажимаем Файл, радуемся.
 Рис.7
Но на этом останавливаться, ясное дело, не нужно. Можно создавать меню любой вложенности:
 Рис.8
А так же менять цвета. Либо сменив «Цветовую Тему», либо сами цвета в Теме:
 Рис.9
Чтобы сделать черту (как между пунктами «Открыть» и «Сохранить» на рисунке 9), свойству Caption нужно присвоить «-» (без кавычек).
Вот так мы, не написав ни строчки кода и не пользуясь сторонними компонентами (что обеспечивает максимальную переносимость кода), создали меню в стиле MS Office 2003.
 Рис.10
Еще очень советую обратить внимания на компоненты TPopupActionBar и TActionToolBar, находящиеся все на той же вкладке компонентов Additional.
Надеюсь, данная статья принесет кому-то пользу.
Успехов в программировании.
С уважением, Profi!
Если у Вас возникли проблемы, вопросы или пожелания к статье – милости просим в тему поддержки этой статьи.
|