•  
Создано: 04.09.2010 4:17:52 · Исправлено: 04.09.2010 4:17:52 · Прочтений: 3307

Различают два типа меню: главное и контекстное (локальное, всплывающее). Главное меню обычно располагают под заголовком формы. Выбор пункта главного меню вызывает появление на экране выпадающего меню. Выпадающее меню содержит команды или вложенные выпадающие меню. Уровень вложения не ограничен, но создавать очень сложные меню не рекомендуется, так как это затрудняет работу с приложением.

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

В Delphi главное меню реализовано компонентом MainMenu, а всплывающее – PopupMenu. Подключение меню к форме выполняется через свойства формы MainMenu и PopupMenu. Компоненты, применяемые при создании меню, являются невизуальными. На этапе выполнения их значки не отображаются. Значки компонентов MainMenu и PopupMenu используется на этапе разработки для того, чтобы можно было задать значения свойств.

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

Формирование пунктов меню выполняется в Дизайнере меню. Дизайнер меню вызывается из контекстного меню, связанного с компонентами MainMenu или PopupMenu, командой Menu Designer. Как обычно, локальное меню открывается щелчком правой кнопкой мыши на компоненте. Другой способ вызова дизайнера меню заключается в выполнении двойного щелчка на компонентах MainMenu или PopupMenu.

Помимо создания и модификации меню утилита Menu Designer позволяет загружать меню из ресурсов и сохранять меню в качестве шаблонов. Меню, сохранённые как шаблоны, могут использоваться несколькими приложениями. Создание и удаление пунктов меню выполняется в окне Дизайнера меню, а свойства задаются в Инспекторе объектов.

При первом вызове Дизайнера в окне появляется заготовка для единственного пункта меню, которую надо заполнить в Инспекторе объектов, то есть задать значения свойств. После этого можно перейти к формированию следующего пункта главного меню (расположенного справа) или создать вложенное меню. Щелчок по пункту главного меню приводит к началу формирования вложенного меню: ниже заполненного пункта появляется пустая ячейка. По мере заполнения строк ниже появляется пустая ячейка, завершающая список команд. После того, как все нужные команды вложенного меню записаны, можно приступать к созданию следующего пункта главного меню. Пустую ячейку удалять не следует, она видна только на этапе проектирования.

Спроектированный пункт главного меню со всеми подпунктами можно переместить на другое место буксировкой.

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

Заполнение пунктов меню

Пункты меню являются компонентами, принадлежащими к классу TMenuItem. Для пунктов меню определено свойство OnClick, которое возникает при щелчке мышью или при нажатии на клавишу Enter, если перед этим команда была выбрана.

Свойство Caption содержит текст пункта меню (заголовок). При записи этого свойства можно использовать символ & (амперсант) для формирования подчёркнутого символа, например File, Open. Подчёркнутый символ применяется совместно с клавишей Alt для вызова пунктов меню с клавиатуры. Если свойству Caption присвоить значение "–" (минус), то будет сформирована горизонтальная линия, которая используется для разделения групп команд.

Очень часто пункты меню являются переключателями. Если пункт меню работает как обычный переключатель, то он отмечается символом ?. Наличие такого символа у независимого переключателя говорит о том, что команда выполняется. Повторный выбор этого же пункта приводит к тому, что команда выключается (символ исчезает). Включена команда или нет, определяется свойством Checked: если значение равно true, то пункт меню выбран и содержит метку.

Рядом с пунктами меню, которые относятся к зависимому переключателю, может стоять жирная точка. В этом случае несколько пунктов работают согласованно, как один переключатель с множеством состояний. Жирной точкой отмечается только один пункт из группы команд, образующих взаимоисключающие пункты-переключатели. Для всех пунктов группы необходимо установить одинаковое ненулевое значение свойства GroupIndex и присвоить свойству RadioItem значение true. Для приведения в действие механизма переключения следует для всех пунктов группы определить обработчики события OnClick. Выбор любого пункта приводит к тому, что его свойство Checked становится равным true.

Некоторые режимы работы приложения могут быть недоступны пользователю в отдельные моменты времени. Пункты меню делают запрещёнными с помощью свойства Enabled. Если значение Enabled равно false, то текст пункта выглядит тусклым и его выбор игнорируется.

Как принято в Windows, для любого пункта меню можно задать комбинацию клавиш, которая позволит выполнить команду, не открывая меню. «Быстрые клавиши» выбираются в свойстве ShortCut. Следует помнить, что Delphi не контролирует выбранные комбинации, разработчик должен сам проследить за тем, чтобы использовались разные клавиши.

Локальное меню

Контекстное меню всплывает автоматически после щелчка правой кнопкой мыши, если значение свойства Autopopup равно true. Место появления зависит от позиции курсора в момент щелчка и определяется свойством Alignment. С позицией курсора может совпадать левый (paLeft) или правый (paRight) верхний угол меню, либо середина верхнего края (paCenter).

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

Локальное меню может быть создано для любого оконного компонента. Чтобы связать щелчок правой кнопкой мыши на компоненте с раскрытием меню, в свойство PopupMenu этого компонента надо записать имя меню.