Для чего нужны меню и панели инструментов
Вы наверняка успели заметить, что большинство Windows-приложений обладают стандартным интерфейсом. Почти в каждом приложении есть заголовок и оконное меню, а размеры главного окна можно изменять мышью. Кроме того, во многих приложениях есть меню и панели инструментов, упрощающие работу с нестандартными функциями программ. Сам Visual Basic содержит меню и панели инструментов, облегчающие вашу работу (рис. 5.1).
Рис. 5.1. Меню и панели инструментов Visual Basic
Меню открывает доступ к различным, порой достаточно неочевидным, возможностям приложения. Команды в нем можно блокировать и разблокировать, помечать и даже отображать в зависимости от контекста объекта. Кроме того, можно создать список окон — меню с командами для перехода к дочерним MDI-формам текущей формы. В среде Visual Basic встречаются примеры меню, закрепленных за другими элементами, а также контекстных и раскрывающихся непосредственно над объектом. В этом уроке нам предстоит создать первое меню (см. раздел «Создание меню в редакторе меню»).
Панели инструментов, в свою очередь, предназначены для быстрого вызова команд меню. Например, вам наверняка приходилось видеть панели с кнопками Cut, Copy и Paste. Пользователю гораздо проще нажать кнопку, чем выполнять команду Edit > Сору. Панели инструментов оказываются еще удобнее в тех ситуациях, когда команды скрыты глубоко во вложенных подменю. В этом уроке вы научитесь создавать панели инструментов (см. раздел «Создание панелей инструментов»).
Работая над большим приложением, непременно подумайте, как наиболее эффективно организовать структуру меню и панелей инструментов. Проследите, чтобы они удовлетворяли стандартам графического пользовательского интерфейса (GUI) системы Windows (см. раздел «Проектирование меню» в этой главе). Людям будет проще освоить ваше приложение, которое к тому же станет более удобным и с большей вероятностью привлечет внимание новых пользователей.
Объект меню
Как упоминалось в предыдущем разделе, меню представляет функции приложения в четком и, как правило, удобном для пользователя виде. Для создания меню в Visual Basic применяется элемент меню. Он ничем не отличается от любого другого элемента, находящегося на форме, за исключением того, что вы не найдете его на панели элементов. Вместо этого нужно запустить редактор меню командой или кнопкой на панели инструментов Visual Basic и разработать меню с помощью этого инструмента.
Элемент меню обладает несколькими свойствами и поддерживает одно событие, но у него нет ни одного метода. Чтобы поместить элемент меню на форму, следует сделать интересующую вас форму активной. Выделив ее, выполните команду Tools > Menu Editor или запустите редактор меню кнопкой на панели инструментов (рис. 5.2).
Рис. 5.2. Редактор меню
Именно в редакторе происходит конструирование меню. Меню состоит из одного или нескольких заголовков верхнего уровня (например, File). Каждый заголовок состоит из одной или нескольких команд (например, Exit). В меню можно даже включать разделители, чтобы сгруппировать взаимосвязанные команды. В результате вместо одного элемента меню у вас появляется целая серия. Каждый заголовок меню и каждая команда (в том числе и разделители) представляют собой отдельные элементы с отдельными наборами свойств и событием Click.
Свойства меню
Перечисленные далее свойства доступны в режиме конструирования, однако работать с ними приходится через редактор меню, а не через окно свойств.
Самые важные свойства (выделенные полужирным шрифтом) таковы:
Appearance | Index | Tag |
Caption | Name | Visible |
Checked | NegotiatePosition | WindowList |
Enabled | Parent | |
HelpContextID | Shortcut |
О Свойство Caption определяет текст, отображаемый в меню. Символ «амперсенд» (&) в названии команды задает клавишу ускоренного вызова.
О Свойство Checked помещает (или удаляет) маркер-«галочку» рядом с командой. С его помощью бывает удобно переключать состояние команды. Задавая значение свойства Checked, можно «включать» или «выключать» команды меню во время выполнения программы.
О Свойству Enabled иногда присваивается значение False, если в текущем контексте команда меню не имеет смысла. Например, команду Save можно заблокировать до тех пор, пока пользователь не введет какие-либо данные. Значение свойства Enabled также можно изменять во время выполнения программы.
О Вместо того чтобы блокировать ненужную команду меню, можно воспользоваться свойством Visible и скрыть ее — с другой стороны, блокировка команд вызывает меньше недоразумений.
О Свойство Name, как всегда, должно определяться в первую очередь. По распространенному соглашению, имена элементов меню начинаются с префикса mnu.
О Свойство Shortcut определяет акселератор — альтернативный способ вызова команды с клавиатуры. Не следует путать акселератор с клавишами ускоренного вызова (которые создаются при помощи символа «амперсенд»). Для вызова акселератора обычно используются служебные клавиши Ctrl и Alt в сочетании с другими клавишами (например, F1).
(ПРИМЕЧАНИЕ
Акселератор немедленно генерирует событие Click для элемента меню, а для клавиш ускоренного вызова необходимы два предварительных действия — сначала следует открыть меню сочетанием Alt+клавиша, а затем нажать клавишу, которая соответствует подчеркнутой букве в названии команды. Например, вы открываете меню Help клавишами Alt+H, а затем нажимаете клавишу С для просмотра содержимого справочного файла. Чтобы сделать то же самое с помощью акселератора, достаточно нажать всего одну клавишу (скажем, F1).
Меню, созданные в редакторе, можно открыть на форме в режиме конструирования. Чтобы просмотреть код процедуры события Click, щелкните на команде меню в режиме конструирования. Существует и другой способ — выберите имя элемента меню из раскрывающегося списка Object в окне программы. Просмотреть свойства элемента меню также несложно, для этого следует еще раз открыть редактор меню и выбрать команду меню из списка, расположенного в нижней части окна редактора. Свойства элементов меню можно также просмотреть, выбирая их имена из раскрывающегося списка в верхней части окна свойств.
ПОДСКАЗКАЕсли щелкнуть на элементе меню в режиме конструирования, то, в отличие от других элементов, вы не увидите списка свойств. Обычно вся работа со свойствами элементов меню (просмотр, задание и изменение) осуществляется в редакторе меню, однако некоторые предпочитают использовать окно свойств.
Событие Click
Это единственное событие, поддерживаемое элементами меню; оно также генерируется при использовании клавиш ускоренного вызова и акселераторов. Действия, выполняемые при выборе команды меню, программируются в процедуре события Click.
Каждый заголовок меню тоже обладает событием Click. Обычно это событие игнорируется — когда пользователь щелкает на заголовке, он просто хочет открыть меню. Тем не менее опытные программисты на Visual Basic часто используют это событие в сочетании со свойством Index для динамического добавления или удаления команд из открываемого меню. Динамические меню на самом деле представляют собой массивы элементов меню. Все команды меню имеют одинаковую структуру и находятся в одном и том же блоке памяти. Следовательно, вместо того чтобы обращаться к команде меню по имени, вы можете ссылаться на нее по индексу в массиве. Более подробная информация о массивах приведена в уроке 7, «Типы данных».
Методы меню
Элементы меню не обладают никакими методами, поэтому мы двигаемся дальше и переходим к созданию собственных меню.