Контекстное всплывающее меню — компонент PopupMenu




Создание главного меню с использованием компоненты MainMenu

 

Это невизуальный компонент, т.е. место его размещения на форме в процессе проектирования не имеет никакого значения для пользователя — он все равно увидит не сам компонент, а только меню, сгенерированное им.

Дизайнер меню

Вызов дизайнера меню осуществляется двойным щелчком по компоненту MainMenu.

Дизайнер меню работает в паре с окном свойств. Создание и удаление пунктов осуществляется в дизайнере меню, а свойства отдельно взятого пункта устанавливаются в окне свойств.

Задание 1. Установите на форму компонент MainMenu. Вызовите дизайнер меню. Щелкните по рамке с точками в дизайнере меню. Перейдите в объектный инспектор и в свойстве Caption введите заголовок пункта меню File.

В компоненте MainMenu существует свойство AutoHotKeys. Если оно установлено в значение maAutomatic, то подбор горячих клавиш выполняется автоматически.

 

Задание 2. Сейчас под пунктом File нужно создать подчиненное меню со списком команд. Для этого просто щелкните в дизайнере меню на пункте File. Под пунктом File появится пустая ячейка - заготовка первого пункта выпадающего списка. Выберите этот пункт с помощью мыши и задайте ему в свойстве Caption заголовок Open.... Вместо пустой ячейки появится текст Open... и пустая ячейка переместится ниже.
Действуя по аналогии, добавьте еще три пункта: Save As..., Close и Exit.

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

Для создания полноценного меню нужны средства вставки и удаления пунктов, создания вложенных меню и прочие. Поэтому в дизайнере меню для каждого отдельно взятого пункта предусмотрено контекстное меню с необходимым набором команд (рисунок 4 и таблица).

Рисунок 4. Контекстные команды в дизайнере меню

Команда Описание
Insert Вставляет новый пункт.
Delete Удаляет выбранный пункт.
Create Submenu Создает в позиции пункта подчиненное меню.

Создание пункта меню

Установить курсорв синюю рамку из точек, обозначающую место расположения нового раздела. Далее в объектном инспекторе необходимо задать заголовок меню (свойство Caption) и нажать клавишу Enter.

Вставка пункта меню

Если вы предварительно выделите какой-то раздел меню и выберите из контекстного меню команду Insert, то рамка нового раздела вставится перед выделенным ранее.

Создание подменю

Из контекстного меню выполнить команду Create Submenu, позволяющую ввести подменю в выделенный раздел (см. подменю раздела Опции на рисунке).

Перемещение пунктов меню

Захватите пункт меню щелчком левой кнопки мыши и, удерживая нажатой кнопку мыши, отбуксируйте его к новой позиции. Таким образом, можно переместить не только отдельный пункт, но и целое подчиненное меню со всеми его пунктами и вложенными меню.

Пункты меню

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

Свойство Описание свойства
Caption надпись раздела.
Name имя объекта, соответствующего разделу меню. Очень полезно давать этим объектам осмысленные имена, так как иначе вы скоро запутаетесь в ничего не говорящих именах, типа N21. Куда понятнее имена MFile, MOpen, MSave и т.п.
Shortcut клавиши быстрого доступа к разделу меню — «горячие» клавиши, с помощью которых пользователь, даже не заходя в меню, может в любой момент вызвать выполнение процедуры, связанной с данным разделом.
Default определяет, является ли данный раздел разделом по умолчанию своего подменю, т.е. разделом, выполняемым при двойном щелчке пользователя на родительском разделе.
Break используется в длинных меню, чтобы разбить список разделов на несколько столбцов. Возможные значение Break: mbNone — отсутствие разбиения меню (это значение принято по умолчанию), mbBarBreak и mbBreak — в меню вводится новый столбец разделов, отделенный от предыдущего полосой (mbBarBreak) или пробелами (mbBreak). На рис. ниже показан пример, в котором в разделе 1-3 установлено значение Break = mbBreak, а в разделе 1-5 — Break = mbBarBreak. Рисунок 4. Меню из нескольких столбцов
Checked установленное в true, указывает, что в разделе меню будет отображаться маркер флажка, показывающий, что данный раздел выбран. Правда, сам по себе этот маркер не изменяется и в обработчик события OnClick такого раздела надо вставлять оператор типа MAutoSave.Checked:= not MAutoSave.Checked; (в приведенном операторе подразумевается, что раздел меню назван MAutoSave).
RadioItem Это свойство, установленное в true, определяет, что данный раздел должен работать в режиме радиокнопки совместно с другими разделами, имеющими то же значение свойства GroupIndex. По умолчанию значение GroupIndex равно 0. Но можно задать его большим нуля и тогда, если имеется несколько разделов с одинаковым значением GroupIndex и с RadioItem = true, то в них могут появляться маркеры флажков, причем только в одном из них (на рис.свойство RadioItem установлено в true в разделах Шаблон 1 и Шаблон 2, имеющих одинаковое значение GroupIndex). Управлять переключениемы радиокнопок придется с помощью программного кода.
Bitmap Изображение из указанного вами файла в пункте меню
ImageIndex индекс изображения, хранящегося во внешнем компоненте ImageList. Указание на этот компонент вы можете задать в свойстве Images компонента MainMenu. Индексы начинаются с 0. Если вы укажете индекс -1 (значение по умолчанию), изображения не будет.

По аналогии с остальными классами компонентов можно было бы предположить, что в палитре компонентов существует компонент MenuItem. Однако его там нет, поскольку пункты меню не существуют сами по себе, а работают только в составе строки главного меню или окна контекстного меню. Тем не менее, они во многом ведут себя как настоящие компоненты, например, настраиваются в окне свойств и наряду с остальными компонентами помещаются в исходный текст формы в виде отдельных полей. Чтобы в этом убедиться, активизируйте редактор кода и найдите определение класса формы. Оно будет таким, как на рисунке ниже.

 

Разделительные линии

Логически связанные между собой команды принято отделять от других команд горизонтальной линией. Например, пункт Exit хорошо бы отделить от остальных (рисунок 8.8).

Задание 3: создать разделитель перед пунктом меню Exit. Для этого щелкните правой кнопкой мыши по пункту Exit и в открывшемся меню выберите Insert. В свойстве Caption укажите символ минуса (-).

Рисунок 8.8. Разделительная линия в меню

Комбинации клавиш

Некоторым пунктам меню назначают комбинации клавиш (shortcut), чтобы выполнять команды, не открывая меню. Они ускоряют работу с приложением и популярны среди опытных пользователей. Названия комбинаций клавиш отображаются справа от текста соответствующих пунктов. Например, во многих программах команде меню File / Open... назначается комбинация клавиш Ctrl+O.

 

Код процедуры обработки пункта меню записывается аналогично коду обработки нажатия кнопки Button. Для решения задач обработки файлов необходимо описать необходимые константы, типы и переменные в части Interface или Implementation модуля формы.

 

Задание 4: выделите пункт Open в дизайнере меню, в объектном инспекторе выберите в списке значений свойства ShortCut требуемую комбинацию клавиш (рисунок).

Задание 5. Создайте пункты меню, показанные на рисунке 1.
Картинки для меню взять из папки C:/Program Files/Common Files/Borland Shared/Images/Buttons.

Контекстное всплывающее меню — компонент PopupMenu

Контекстное меню привязано к конкретным компонентам. Оно всплывает, если во время, когда данный компонент в фокусе, пользователь щелкнет правой кнопкой мыши.
Поскольку в приложении может быть несколько контекстных меню, то и компонентов PopupMenu может быть несколько. Оконные компоненты: панели, окна редактирования, а также метки и др. имеют свойство PopupMenu, которое по умолчанию пусто, но куда можно поместить имя того компонента PopupMenu, с которым будет связан данный компонент.
Формирование контекстного всплывающего меню производится с помощью Конструктора Меню, вызываемого двойным щелчком на PopupMenu, точно так же, как это делалось для главного меню.

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2020-05-09 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: