Sources.RU Magazine Поиск по журналу
 

TopList

Меню в стиле XP

Автор: Profi

Очень часто в сети на форумах по программированию можно встретить вопросы типа: «как сделать меню в стиле XP» или «нужен компонент Menu в стиле Office 2003». Обычно предлагаются или сторонние компоненты, или вовсе экзотические решения вроде ручной прорисовки пунктов меню (знать это, конечно, надо, но лично мне данный метод применять не приходилось). Я же расскажу, как можно сделать это с помощью стандартных компонентов, входящих в Delphi 7 и выше (пример буду рассматривать, используя BDS 2006).

Итак, приступим. Запустим Delphi for Win32 и создадим новый проект. Открываем вкладку компонентов Additional и кидаем на форму три компонента: TActionManager, TActionMainMenuBar и TXPColorMap (заметим, что визуальный из них только один – TactionMainMenuBar).


Меню в стиле XP

Рис.1

Теперь свяжем «Меню» с «Менеджером Действий» и «Цветовой Темой». На вкладке Structure нажимаем на плюсик левее ActionManager1 и видим там два пункта: ActionBars и LinkedActionList. ActionBars – содержит список bar’ов, с которыми работает TActionManager, а LinkedActionList – перечень дополнительных списков действий. Нам нужен именно ActionBars. Кликнем на нем правой кнопкой мыши и выберем AddItem (добавить элемент).


Меню в стиле XP

Рис.2

Появится новый элемент – 0TActionBarItem. В Object Inspector’е нажимаем на стрелочку правее пункта ActionBar и выбираем ActionMainMenuBar1. Теперь в Structure выбираем ActionMainMenuBar1 и видим, что в пункте ActionManager уже стоит ActionManager1. Да, связь «Меню» и «Менеджера Действий» завершена, но вот «Цветовая Тема» в «Меню» еще не настроена. Находим в Object Inspector’е пункт ColorMap и указываем там XPColorMap1.

Теперь создадим первый пункт меню – Файл. Снова открываем в Structure ActionBars и видим, что 0TActionBarItem превратился в 0TActionBar -> ActionMainMenuBar1. Нажимаем на плюсик слева от пункта, кликаем на свойстве Items правой кнопкой и выбираем AddItem. У нас появился пункт 0 – ActionClientItem0, это и есть наш первый пункт меню. Меняем его Caption с ActionClientItem0 на Файл и компилируем проект. Но что мы видим! Пункт неактивен. Все верно, ведь у него нет дочерних пунктов, да и никакого действия мы на него не повесили. Сейчас мы это исправим.

В Structure находим 0 – Файл, кликаем правой кнопкой на его свойстве Items и снова AddItem. Этим действием мы добавили дочерний пункт ActionClientItem0 к пункту Файл. Меняем его Caption на Выход и вновь компилируем проект.


Меню в стиле XP

Рис.3

Что ж, пункт Файл стал активным, но вот Выход – нет. Исправим это, «повесив» на пункт Выход действие. Выберем в Structure ActionManager1 и, кликнув правой кнопкой мыши, выберем пункт «Customize…». Откроется окно редактора «Действий».


Меню в стиле XP

Рис.4

Кликнем на кнопку New Action и, тем самым, создадим новое действие Action1. Теперь посмотрим на Structure, у ActionManager1 появился новый пункт (No Category). Раскроем его, нажав на плюс, и увидим там только что созданный Action1. Изменим его Caption на Выход. Теперь перейдем на вкладку Events и дважды кликнем на пустом поле правее OnExecute. Delphi сама переключится на редактор кода, и мы увидим новую функцию Action1Execute. Напишем внутри функции всего одну строчку: Close;. Теперь вернемся в Structure к элементу 0Выход, и в свойстве Action укажем Action1. Компилируем, нажимаем Файл – Выход, радуемся.


Меню в стиле XP

Рис.5

Как видно из рисунка 5, меню выглядит в стиле Office 2003.

Теперь добавим картинку. Идем на вкладку компонент Win32 и кидаем на форму TImageList. Дважды кликаем на нем и, нажав Add, добавляем какую-нибудь картинку.


Меню в стиле XP

Рис.6

Снова идем в Structure и в свойстве Images ActionManager1 указываем ImageList1. Находим 0Выход и, нажав на стрелочку правее пункта ImageIndex в свойствах, выбираем только что добавленную картинку. Если кто-то поторопился и уже скомпилировал проект, то он будет разочарован, так как никакой картинки в пункте меню Выход не появилось. А все потому, что ту же самую картинку нужно повесить и на Действие, выполняемое этим пунктом. Находим в Structure Action1 и его свойству ImageIndex присваиваем индекс той же самой картинки. Компилируем, нажимаем Файл, радуемся.


Меню в стиле XP

Рис.7

Но на этом останавливаться, ясное дело, не нужно. Можно создавать меню любой вложенности:


Меню в стиле XP

Рис.8

А так же менять цвета. Либо сменив «Цветовую Тему», либо сами цвета в Теме:


Меню в стиле XP

Рис.9

Чтобы сделать черту (как между пунктами «Открыть» и «Сохранить» на рисунке 9), свойству Caption нужно присвоить «-» (без кавычек).

Вот так мы, не написав ни строчки кода и не пользуясь сторонними компонентами (что обеспечивает максимальную переносимость кода), создали меню в стиле MS Office 2003.


Меню в стиле XP

Рис.10

Еще очень советую обратить внимания на компоненты TPopupActionBar и TActionToolBar, находящиеся все на той же вкладке компонентов Additional.

Надеюсь, данная статья принесет кому-то пользу.

Успехов в программировании.

С уважением, Profi!



Если у Вас возникли проблемы, вопросы или пожелания к статье – милости просим в тему поддержки этой статьи.






 Design by Шишкин Алексей (Лёха)  ©2004-2008 by sources.ru