Для создания и изменения меню в процессе разработки приложения в среде Delphi предназначен Конструктор меню (Menu Designer). Запуск Конструктора меню можно выполнить по команде Menu Designer (Конструктор меню) контекстного меню компонента MainMenu или PopupMenu, а также с помощью двойного щелчка мыши на этих же компонентах. Предварительно один из этих компонентов следует добавить на форму. Напомним, что компоненты MainMenu и PopupMenu размещаются на странице Standard (Стандартная ) Палитры компонентов.
Конструктор меню похож на текстовый редактор и предоставляет возможность достаточно просто и удобно конструировать меню любого типа. Меню при конструировании имеет тот же вид, что и при выполнении приложения. Вид меню при конструировании с помощью Конструктора меню показан на рис. 7.4.При работе с Конструктором меню используются команды его контекстного меню (рис. 7.4), вызываемого щелчком правой кнопкой мыши при размещении указателя в области Конструктора меню. С их помощью можно выполнить такие действия, как добавление (Insert) и удаление (Delete) пункта меню, создание подменю (Create Submenu), выбор меню (Select Menu).
При конструировании меню можно также перемещать указателем мыши пункты меню и подменю по технологии drag-and-drop. Используемый совместно с Конструктором меню Инспектор объектов позволяет управлять свойствами отдельных пунктов меню. В частности, наименование пункта меню задается путем присвоения нужного значения его свойству caption.
С помощью Конструктора создание и настройка меню ведется при создании приложения. Кроме того, меню можно создавать или изменять динамически непосредственно при выполнении приложения. Например, возможно:
создать новое меню любого типа или удалить его;
заблокировать или разблокировать отдельные пункты;
сделать пункт меню видимым или невидимым;
добавить или удалить пункт меню;
изменить название пункта;
установить или убрать отметку пункта;
переключить форму с одного главного меню на другое.
Эти возможности обеспечиваются установкой свойствам пунктов меню требуемых значений и вызовом соответствующих методов.
Для добавления пунктов меню используются методы Add и insert, для удаления пунктов меню используется метод Delete.
Процедура Add (item: TMenuitem) добавляет определяемый параметром item элемент в конец подменю, которое вызвало этот метод. Если подменю не существовало, то оно создается.
Пример. Добавление пункта меню.
procedure Forml.mnuItemAddClick(Sender :TSender);
var Newltem : TMenuitem;
begin
NewItem := TMenuitem.Create(Self);
NewItem.Caption := 'Новый элемент';
mnuFile.Add(NewItem);
end;Добавление нового пункта производится в конец списка команд меню Файл. Добавляемый пункт имеет заголовок Новый элемент. Предварительно новый пункт создается конструктором Create.
Процедура Insert (Index: Integer; Item: TMenuItem) , в отличие от предыдущего метода, добавляет новый пункт меню на указанное положение. Параметр index определяет позицию в массиве элементов меню, на которую вставляется новый пункт. Если значение параметра index выходит за пределы допустимого диапазона, например, больше, чем число подэлементов модифицируемого пункта меню, то возникает исключительная ситуация.
Процедура Delete (index: integer) удаляет указанный пункт меню. Если удаляемый пункт имеет подпункты, то они также удаляются.
Процедура выполняет удаление пункта из подменю Файл. Удаляемый пункт имеет заголовок Второй элемент и находится на второй позиции. Предварительно производится проверка, действительно ли удаляется пункт с нужным названием.
Форма может иметь более одного главного меню. Это используется, например, в случае, когда одно из них содержит заголовки на английском языке, а другое — на русском. Для реализации такой возможности на форму следует поместить два компонента MainMenu и подготовить соответствующие меню. После этого при выполнении программы возможно подключение к форме любого из этих меню. Для подключения к форме главного меню используется свойство Menu формы.
Пример. Переключение между двумя главными меню.
if Forml.Menu = EnglishMenu
then Forml.Menu := RussianMenu else Forml.Menu := EnglishMenu;
Меню имеют названия EnglishMenu и RussianMenu. Код, выполняющий переключение меню, может быть включен в соответствующий обработчик.
Напомним, что Menu является одним из свойств формы, указывающим на главное меню, которое в настоящий момент является активным.