Компоненты Delphi страницы Standart

Компонент Delphi MainMenu




Уроки Delphi
  1.  Первая программа
  2.  Использование компонентов
  3.  События Delphi
  4.  Типы данных Delphi
  5.  Создание своих типов данных
  6.  Выражения и операторы
  7.  Работа с файлами в Delphi
  8.  Дополнительные формы
  9.  Подпрограммы в Delphi
  10. Исключительные ситуации
  11. Взаимодействие приложения с пользователем
  12. Указатели в Delphi
  13. Обзор компонентов
  14. Работа со строками
  15. Создание интерфейса
  16. Графика в Delphi
  17. Многопоточность в Delphi
  18. Динамическое создание
        компонентов
Поиск по сайту




 Это важно:
   Метод Application.ProcessMessages;

 Это полезно:
   Параметр Sender в обработчиках событий;










Бояться не надо



   Компонент Delphi MainMenu предназначен для добавления к программе главного меню, элемента, без которого не обходится ни одно из приложений для Windows.
Чтобы добавить к программе Delphi главное меню, нужно расместить на Форме в произвольном месте компонент MainMenu. Компонент MainMemu невизуальный, то есть, хотя и отображается на прототипе Формы как небольшой квадрат, в работающей программе не будет виден. Опции главного меню создаются с помощью специального редактора. Редактор меню вызывается с помощью двойного щелчка по компоненту MainMenu. Первоначально меню пустое, но имеет один выделенный элемент:

Создание главного меню

Для создания первой опции (как правило, опция главного меню программы File) нужно перейти в Инспектор объектов и свойству Caption присвоить нужное название. В Windows опции меню, как правило, имеют возможность выбора при помощи сочетания клавиш ALT+<Key>, где Key - первая буква в названии данной опции должна иметь подчеркивание. Для создания такого подчеркивания перед этой буквой ставится символ &. После нажатия Enter созданный пункт меню появляется на Форме:

Создание первой опции главного меню

   Обратите внимание на то, что автоматически Delphi создаёт следующий пустой пункт меню верхнего уровня. А щёлкнув в редакторе меню по синему прямоугольничку File, мы сразу получим пустой пункт меню второго уровня. Они не выделены, и отображаются белыми прямоугольниками. Щелкнув по одному из них, мы получим возможность редактировать его совершенно аналогично. Пока их свойства не заданы, в работающей программе на Форме они не появятся, и удалять в редакторе их не нужно.

   Далее, в редакторе меню щёлкнув по пункту меню правой клавишей мыши, мы получим контекстное меню, в котором есть пункты Insert (вставить) и Delete (удалить). Пункт Insert добавляет новый пункт меню над выделенным, а Delete - удаляет выбранный пункт.

   То, что мы пользуемся Инспектором объектов, говорит о том, что опция меню для Delphi - это объект, со своими свойствами и методами. И без их настройки будет пассивной структурой надписей. Для того чтобы меню выполняло свои функции, как минимум нужно описать обработчик события OnClick каждого пункта меню. Делается это совершенно стандартным способом. Опишем пункт меню, который будет закрывать программу.

   Выделим нижний элемент меню, в Инспекторе объектов изменим свойство Caption на Exit (ну или по-русски тоже можно - Выход). Затем перейдём на вкладку Инспектора объектов Events и щелкнем дважды мышкой по обработчику OnClick. В созданной процедуре напишем просто - Close; Всё, скомпилируем программу (нажмите F9). В работающей программе наше меню функционирует - при нажатии мышкой Exit программа закрывается. И при нажатии на клавиатуре ALT появляется подчеркивание первой буквы пунктов меню верхнего уровня - File, и далее можно выбрать нужный пункт, работая кнопками управления курсором.

   Во всплывающем меню выделенного элемента есть также пункт Create SubMenu, нажав на который мы создадим подменю выбранного элемента, а к его названию прибавится изображение треугольника - стрелки, указывающей на его наличие. Работа с подменю осуществляется также совершенно аналогично.

   Кстати, описывать обработчик OnClick пунктов меню верхнего уровня не обязятельно, раскрывание меню при щелчку мышкой происходит автоматически. Но в случае необходимости произвести какие-либо действия при раскрытии меню этот обработчик позволит это сделать.

   Наш компонент MainMenu обладает также возможностью сопровождать названия опций меню пиктограммами. Для этого нужно из редактора меню перейти к самому компоненту, и в Инспекторе объектов его свойству Image присвоить значение одного из компонентов ImageList, который необходимо предварительно поместить на Форму, и наполнить нужными пиктограммами (компонент ImageList описывается на странице Win32). Далее, выбрав нужный пункт меню в редакторе меню, его свойству ImageIndex нужно присвоить номер пиктограммы, который она имеет в компоненте ImageList. Для удобства выбора свойство ImageIndex имеет раскрывающийся список, содержащий пиктограммы, находящиеся в компоненте ImageList. Значение -1 означает отсутствие пиктограммы.
   Есть более простой альтернативный способ задать пиктограмму для пункта меню - через свойство BitMap этого пункта. Щёлкните по кнопочке, появляющейся при переходе в эту строку Инспектора объектов. Появится окно выбора файла, где можно выбрать и загрузить нужную пиктограмму.

   Стандартный набор пиктограмм поставляется в дистрибутиве Delphi и находится в папке Buttons по адресу C:\Program Files\Common Files\Borland Shared\Images. Правда, пиктограммы представлены в сдвоенном формате - для активного и неактивного состояния кнопки или пункта меню. Удобство применения компонента ImageList состоит в том, что он умеет разделять стандартные пиктограммы на две. Ненужную затем можно удалить, а оставшуюся сохранить для использования в других программах. Обычно это цветная пиктограмма для активного состояния, так как неактивная кнопка или меню умеют отображать свои пиктограммы в оттенках серого.


Обзор компонентов Delphi           В начало урока          Delphi компонент PopupMenu

Уроки Delphi начинающим



Вопросы и комментарии (17)      Решение задач в Delphi

balisiki, добавлено 23.03.10, 14:13:02 
Спасибо, неплохая подборка материала, меня так порадовала статья. только почему не ставите ссылку на первоисточник?
Автор, добавлено 23.03.10, 15:12:45 
А почему этот "первоисточник" не ставит ссылку на меня? Ну-ка, покажите его!
incoremedia, добавлено 20.11.10, 01:02:03 
Привет. Странная ситуация, пытаюсь зайти на блог, меня постоянно выкидывает. Сейчас зашел через прокси и все нормально. Можно попросить разблокировать ип адрес 192.48.250.80
Так уже с недели две не могу попасть со своего ип в блог.
Автор, добавлено 20.11.10, 06:06:03 
Ваш IP не блокирован. А "выкидывает" тех, кто пытается написать комментарий не по теме, иначе говоря, спам. Да и сейчас вы чего хотели бы спросить по теме Delphi? Подожду пару дней, и это удалю. 
Алексей, добавлено 26.06.11, 17:33:26 
Я бы за эти посты поставил 2 бала из пяти. Учебник (кстати такой же учебник я видел уже) называется "уроки Delphi начинающим". А для начинающий самый главный аспект - это наглядность. Им проще один раз показать, чем 10 раз об этом прочитать. Это я к тому, что в статьях практически нет наглядных рисунков. Да и сама тема не раскрывается полностью...
Автор, добавлено 26.06.11, 22:57:57 
Алексей, вам кажется, что уж вы-то написали бы лучше! Так напишите! Я опубликую, и читателям, и вам, и мне хорошо... А насчёт того, что лучше показать - я уверен, что научится тот, кто сам пытается делать, а не смотрит как другие делают.
Артем, добавлено 11.07.11, 20:37:29 
Здравствуйте. Подскажите, пожалуйста, а как сделать, чтобы с левой стороны в меню была цветная полоса, как в Виндовских программах?
Автор, добавлено 11.07.11, 21:44:54 
Какие именно программы вы имеете в виду? Word, Excel?
Приведите пример. Но возможно, что добиться этого и не получится.
Артем, добавлено 12.07.11, 10:59:58 
В принципе, любую из 2003 офиса. Да и вообще, у любого меню, в том числе контекстного, слева есть разделительная полоса. Встретил пару программ, сделанных в Делфи, где есть такой эффект. В MainMenu есть свойства отвечающие за подстветку иконок (что-то там с "маской"). Никак не могу разобраться. Помогите, пожалуйста. Может быть такой эффект есть в более поздних версиях Делфи?
Автор, добавлено 12.07.11, 13:25:57 
Да, помню в 2003 офисе что-то такое было. В 2007 у меня уже нет ничего подобного. В общем, офис пишется же не на delphi, и delphi всё разнообразие охватить не может... Конечно, можно написать специализированный компонент с нужными особенностями. Но это - не для начинающих...
Так что вряд ли смогу помочь.
Хотя, может, попробовать использовать "скины". Это пакеты компонентов, имеющих тот или иной нестандартный вид. Может, там попадётся что-то подходящее.
Владимир, добавлено 17.01.12, 18:51:38 
Здравствуйте! Статья очень познавательная, однако, согласен с Алексеем, не хватает картинок, наглядно показывающих, что и как делать. А в целом, материал хороший, изложен качественно.
Вопрос заключается в следующем: сделал я в редакторе меню, а когда компилирую (проверяю), меню-то и нет! Как исправить сей неприятный момент? Нигде не могу найти кнопку "Сохранить"))))
Спасибо заранее.
Автор, добавлено 18.01.12, 07:53:19 
Владимир, разница между нами заключается в том, что вы знаете, что вы сделали, но не знаете что не так, а я знаю что сделали-то вы не так (ну раз не выходит), но не знаю что именно вы сделали. А это потому что я не телепат...

Как меню может не быть? Достаточно поместить его на Форму, щёлкнуть дважды по нему, переходя в редактор и далее в Инспекторе Объектов в свойстве Caption написать например File - и всё. Начните с малого и затем, если всё нормально, продолжайте.
Андрей, добавлено 11.03.12, 11:12:31 
Здравствуйте. С меню всё понятно, а вот как сделать, чтобы его не создавать на каждой новой форме, а сделать единое меню на всю программу?
Автор, добавлено 11.03.12, 11:30:16 
Одним компонентом вы не обойдётесь. Но если структура меню одинакова, то с помощью copy-paste размножаете его на каждую Форму. Пункты меню можно сделать динамическими, учитывающими на какой Форме меню находится. А можно даже создавать на дополнительных Формах меню динамически.
Славик, добавлено 16.04.12, 18:30:29 
ЗДРАВСТВУЙТЕ!

А почему не работают ссылки на ваши последние уроки?
ScrollBar
GroupBox
RadioGroup
Panel
ActionList

Так нужна информация в хорошем оформлении!!!

Сделайте пожалуйста! Спасибо!
Сергей, добавлено 19.03.14, 15:24:20 
Эти mainmenu или actionmenedger полный атстой покрайне мере в том виде в каком они есть в c++builder6.Вроде бы такие важные компаненты,а например mainmenu не вписать в общий интерфейс например потому что нет свойства color или actionmeneger не сделать разделительные полосы в меню,короче полное г.....Обидно,что приходиться извращаться когда можно было такие свойства сделать изначально.
Автор, добавлено 19.03.14, 15:29:32 
Да, Сергей, согласен, что стандартизация уменьшает возможности. Но она же и открывает другие: не отвлекаясь на "красивости", можно быстро создавать эффективные программы.
Оставить комментарий:

Имя  

Текст комментария