Исходники.Ру - Программирование
Исходники
Статьи
Книги и учебники
Скрипты
Новости RSS
Магазин программиста

Главная » Статьи по программированию » Delphi - Работа с графикой »

Обсудить на форуме Обсудить на форуме

Меню в стиле Windows XP

Я уже установил себе Delphi 7, а ты уже сделал то же самое? Если нет, то ничего страшного. Сегодняшний пример будет работать и в Delphi 6, только работать будет не всё, но большинство. Я буду рассказывать на примере 7-й версии, а разницу (она небольшая) покажу отдельно.

Меня долгое время смущали компоненты ActionManager, ActionMainMenuBar и ActionToolBar на закладке Additional. Я долгое время был консерватором и любил использовать классические ToolBar и MainMenu. Но недавно я решил перебороть себя и попробовать написать приложение с помощью новых компонентов. Я был в восторге, поэтому решил поделиться своим опытом и показать все плюсы новых компонентов.

Итак, создаём новый проект и помещаем на главную форму по одной копии компонентов ActionManager, ActionMainMenuBar и ActionToolBar. Для большей красоты нужно поместить на форму ещё и набор картинок ImageList с закладки Win32. В этот набор нужно добавить кучу картинок размером 16х16 для твоих будущих кнопок. После этого выделяешь ActionManager и в свойстве Images нужно указать созданный набор картинок.

Logo
Рисунок 1. Окно создания наборов действий

Теперь создадим набор действий. Для этого дважды щёлкаем по компоненту ActionManager и видим окно как на рисунке 1. Чтобы создать новое действие нужно щёлкнуть по кнопке . В списке Actions появиться новый элемент Action1. Выделяем его и смотрим в объектный инспектор. Здесь нас интересуют следующие свойства:

  • Caption - заголовок элемента. Для начала создадин элемент <Новый>.
  • Categoty - категория. Просто введи здесь слово <Файл> и будет создан новый раздел.
  • Checked - нужно ставить в true если элемент должен иметь два состояния - выделенный и нет. Для таких элементов нужно ставить и свойство AutoCheck в true, чтобы они автоматически выделялись при выборе таких элементов.
  • Enabled - доступность.
  • Hint - подсказка. Чтобы она появлялась, у формы нужно установить в свойстве ShowHint значение true.
  • ImageIndex - индекс картинки.
  • ShotCut - горячие клавиши.

Это основные свойства, с которыми ты будешь часто работать. Попробуй создать четыре элемента с заголовками: новый, редактировать, удалить и выход с категорией Category равным <Файл>. После этого создай ещё один элемент с заголовком <О программе> и в свойстве Category укажи <Помощь>. Будет создана новая категория с таким именем.

Теперь возьми мышкой имя категории <Файл> и перетащи его на компонент ActionMainMenuBar. То же самое сделай и с категорией <Помощь>. Будут созданы два пункта меню. Если ты теперь посмотришь меню <Файл>, то увидишь, что все элементы находятся последовательно, хотя желательно сделать разделитель, чтобы отделить пункт <Выход>. Для этого существует кнопка внизу окна создания наборов. Возьми эту кнопку и перетащи на меню <Файл>, когда меню раскроется, брось мышку между пунктами <Удалить> и <Выход>. Если теперь щёлкнуть по меню <Файл>, то ты сможешь увидеть результат, похожий на рисунок 2.

Logo
Рисунок 2. Меню <Файл>

Попробуй сейчас запустить программу и ты увидишь, что все пункты недоступны. Это связано с тем, что для этих пунктов не созданы обработчики события. Опять возвращаемся в окно создания наборов действий. Создай для всех элементов обработчики событий OnExecute. Чтобы эти обработчики не исчезли при компиляции и сохранении проекта можешь написать там какой-нибудь код или просто поставить знак комментария //. Если ты снова запустишь проект, то теперь все пункты будут уже доступны.

Logo
Рисунок 3. Результат создания кнопок

Теперь возьмём категорию <Файл> в окне создания наборов действий и перетащим её на компонент ActionToolBar. Этим мы создадим кнопки на панели для всех действий из категории <Файл>. Единственный недостаток - кнопки отображаются с заголовками, а это действительно недостаток, потому что удобно, когда видны только изображения (рисунок 3). Чтобы исправить этот недостаток нужно выделить компонент ActionManager и дважды щёлкнуть справа от свойства ActionBars. Перед тобой должно открыться окно, как на рисунке 4.

Logo
Рисунок 4.

В этом окне созданы два элемента ActionBar. Один связан с нашим меню ActionMainMenuBar1, а второй связан с панелью кнопок ActionToolBar1. Выдели оба из них и установи свойство AutoSize в значение false. После этого у панели с кнопками справа внизу появиться маленькая кнопка со стрелкой вниз. Нажав на эту кнопку, пользователь сможет корректировать, какие кнопки надо отображать на панели, а какие нет.

Теперь выделим вторую строку ActionBar->ActionToolBar1 и дважды щёлкнем по свойству Items. Перед нами откроется ещё одно окошко с названиями кнопок, которые созданы на панели. Выделять ничего не надо, а просто надо щёлкнуть в окне, чтобы выбрать свойства самого окна, а не какого-либо элемента. Найди свойство CaptionOptions и установи его в coNone. После этого все заголовки кнопок исчезнут.

Чтобы ещё больше украсить пример, отсортируй все кнопки на панели по своему усмотрению и установи разделители (Separators) таким же перетаскиванием, как мы делали это для пунктов меню. Можешь ещё перетащить действие <О программе> на панель. Для этого можно перетащить всю категорию <Помощь>, а можно только одно это действие.

Теперь ещё более усложним пример. Снова возвращайся в окно создания наборов действий, сейчас мы создадим ещё один элемент. Щёлкни по кнопки со стрелкой вниз справа от кнопки . В появившемся меню выбери пункт "New Standart Action" и ты увидишь окно, как на рисунке 5. В самом низу этого окна найди пункт TCustomizeActionBars. Выдели его и нажми <ОК>. Так ты создашь новую категорию Tools с одним только действием внутри - Customize. Ты можешь переименовать заголовок Captions и категорию Category созданного элемента, и написать всё на родном языке. Я этого делать не буду, чтобы в моём исходники ты сразу мог увидеть этот пункт. Перетащи категорию Tools на панель с меню.

Logo
Рисунок 5.

Попробуй запустить пример и выбрать пункт Customize из меню Tools. Перед тобой откроется окно похожее на создание наборов действий. Только здесь ты не можешь создать ничего нового, зато можно перетаскивать кнопки на панель создавая новые кнопки или удалять с помощью перетаскивания кнопок обратно в окно (можно даже не в окно, а в любое место, как бы снимая кнопки с панели). Получается, что не написав ещё ни одной строчки мы создали редактируемую панель.

Остаётся один только маленький штрих. Выдели компонент ActionManager и в свойстве FileName укажи какое-нибудь имя файла. Я указал . В этом файле будут автоматически сохраняться все настройки кнопок панелей и любые изменения внесённые в режиме Runtime. Указав файл снова запусти пример. Обрати внимание, что кнопка со стрелкой вниз на панели кнопок не доступна. Это связано с тем, что мой файл toolbar.dat не существует. Закрой программу. Во время закрытия она сохраняет все состояния кнопок и создаёт файл настроек. Запусти программу ещё раз и теперь уже всё доступно и работает, потому что toolbar.dat существует.

Если ты указал файл, в котором должны сохраняться настройки, то помни, что когда ты в дизайнере изменяешь положение кнопок (добавляешь новые или удаляешь), то во время выполнения это отражаться не будет, потому что в файле toolbar.dat нет никакой информации об изменениях. Чтобы изменения прошли, нужно удалить файл, или во время выполнения программы проделать те же изменения, вызвав пункт Customize из меню Tools.

Вот таким простейшим образом мы создали набор действий. У каждого действия создали обработчик события OnExecute, в котором написали действия необходимые при выполнении. После этого только перетаскиваем действия на панель меню или панель кнопок и всё готово.

На последок я покажу, как работать с всплывающими меню. Давай бросим на форму компонент PopupMenu. Дважды щёлкни по компоненту, и в редакторе меню сделаем следующее: создай новый пункт меню (кнопка Insert) и в свойстве Action укажи действие, которое должно быть ассоциировано с этим пунктом. Всё. Все необходимые свойства нового элемента заполняются автоматически и больше ничего делать не надо.

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

Ну и самое последнее - научим наше главное меню отбрасывать тень. Создай новое действие в категории Tools и укажи у него следующие свойства:

  • Caption - Тень.
  • AutoCheck - true.
  • Name - MenuShadowAction.

По событию OnExecute напиши следующий код:


procedure TForm1.MenuShadowActionExecute(Sender: TObject);
begin
  ActionMainMenuBar1.Shadows := MenuShadowAction.Checked;
end;

Запусти программу и посмотри как будет изменяться главное меню при разном состоянии пункта <Тень>.

ВНИМАНИЕ!!! Тень работает только в Delphi 7.

Ещё очень интересным являеться свойство Style компонента ActionManager. Попробуй изменить его и посмотреть на результат сам. Это свойство есть и в 6-й и 7-й версии Delphi.

P.S. В Delphi 7 появился новый компонент XPManifest на закладке Win32. Просто брось его на форму и все кнопки и элементы управления в WindowsXP будуте иметь стиль XP.

Action.rar и action_sources.rar


Может пригодится:


Автор: Неизвестен
Прочитано: 15550
Рейтинг:
Оценить: 1 2 3 4 5

Комментарии: (1)

Прислал: VovanM
Чувак, спасибо. Вчера пол вечера убил, не мог понять, почему не доступны пункты меню ))))

Добавить комментарий
Ваше имя*:
Ваш email:
URL Вашего сайта:
Ваш комментарий*:
Код безопастности*:

Рассылка новостей
Рейтинги
© 2007, Программирование Исходники.Ру