(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Меню в стиле XP

Источник: sources

Автор: 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

Появится новый элемент - 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 на Выход и вновь компилируем проект.

Меню в стиле 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.

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

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

Ссылки по теме


 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 23.03.2009 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Enterprise Connectors (1 Year term)
Delphi Professional Named User
Stimulsoft Reports Server Team 10 users
Rational ClearQuest Floating User License
NauDoc Enterprise 10 рабочих мест
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
СУБД Oracle "с нуля"
Каждый день новые драйверы для вашего компьютера!
Краткие описания программ и ссылки на них
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100