![]() | ||||||||||||||||||||||||||||||
![]() |
![]() |
|
|
|||||||||||||||||||||||||||
![]() |
|
Меню в стиле XPИсточник: sources
Автор: 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. Надеюсь, данная статья принесет кому-то пользу. Успехов в программировании. Ссылки по теме
|
|