Создание меню приложения

Графический интерфейс — это то, что пользователь видит в первый момент после запуска какого-нибудь приложения, и наша с тобой задача состоит в том, чтобы сделать этот самый интерфейс как можно более функциональным, красивым и удобным для пользователя. Встречают-то по одежке… А т.к. современный пользователь работает с приложениями Windows, он просто не может представить свою работу без системы меню.

Как и все другие компоненты приложения Visual FoxPro, меню можно создать как программно (написать код “вручную”), так и воспользоваться соответствующим набором инструментов. Но сначала давай определим, что непосредственно входит в понятие системы меню.

Система меню включает в себя линейку меню, состоящую из пунктов линейки меню (другое их название — заголовки подменю), самих подменю или всплывающих меню (popup-menu) и пунктов меню.

Для того чтобы понять, как вся эта конструкция будет работать, мы сейчас попробуем написать программный код для генерации простейшего меню. Сразу оговорюсь, что в среде Visual FoxPro обычно для создания меню используется соответствующий конструктор (Menu Designer), а код, написанный “вручную”, встречается довольно редко. Но, тем не менее, мы научимся это делать.

Основных команд для создания меню не так уж и много: DEFINE PAD — для создания линейки меню, DEFINE BAR — для определения заголовков подменю и DEFINE POPUP — для создания самих подменю.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
* Определим главное меню
DEFINE MENU Mymenu BAR && ЗДЕСЬ Mymenu - ИМЯ НАШЕГО МЕНЮ
DEFINE PAD Padone OF Mymenu PROMPT "ФОРМА"&& определяем пункты линейки
DEFINE PAD Padtwo OF Mymenu PROMPT "ОТЧЕТ"
ON PAD Padone OF Mymenu ACTIVATE POPUP Popone && определяем действия при выборе пункта линейки 
ON PAD Padtwo OF Mymenu ACTIVATE POPUP Poptwo DEFINE POPUP Popone && определяем первое всплывающее меню 
DEFINE BAR 1 OF Popone PROMPT "ЗАПУСК ЭКРАННОЙ ФОРМЫ" && определяем заголовки пунктов всплывающего меню
DEFINE BAR 2 OF Popone PROMPT "ВЫХОД"
ON SELECTION BAR 1 OF Popone DO FORM Main && определяем действия при выборе пункта всплывающего меню
ON SELECTION BAR 2 OF Popone QUIT
DEFINE POPUP Poptwo && определяем второе всплывающее меню, пункты подменю и действия при их выборе
DEFINE BAR l OF Poptwo PROMPT "ПЕЧАТЬ ОТЧЕТА"
DEFINE BAR 2 OF Poptwo PROMPT "ПРОСМОТР ОТЧЕТА" 
ON SELECTION BAR 1 OF Poptwo DO Procl
ON SELECTION BAR 2 OF Poptwo REPORT FORM Myreport PREVI ACTIVATE MENU Mymenu && активируем линейку меню 
PROCEDURE Procl && а это внешняя процедура SELE Mytab
SET ORDER TO Myorder REPORT FORM Myreport TO PRINTER

Как видишь, ничего сложного: сначала определяем линейку меню с помощью команды

1
DEFINE MENU <Имя_Меню> BAR

Затем определяем количество пунктов линейки и их заголовки:

1
2
DEFINE PAD
<Имя_Пункта> OF <Имя_Меню> PROMPT "Заголовок_пункта"

Теперь следует определить действия, которые могут происходить при выборе Пункта Меню:

1
ON PAD <Имя__Пункта> OF <Имя__Меню>

После этого следует какая-нибудь команда Visual FoxPro. Например, вызов всплывающего подменю, как в нашем примере:

1
ON PAD PADONE OF MYMENU ACTIVATE POPUP POPONE

Если указан вызов подменю, то его (подменю), естественно, нужно создать:

1
2
DEFINE POPUP
<Имя_Всплывакщего_Меню>

и определить его пункты:

1
DEFINE BAR l OF Poptwo PROMPT "ИМЯ_ПУНКТА1" DEFINE BAR 2 OF Poptwo PROMPT "ИМЯ_ПУНКТА2"

После этого определяем действия для пунктов всплывающего меню:

1
2
ON SELECTION BAR
1 OF <Имя_Всплывающего_Меню> ... <КОМАНДА>

Можно как просто написать команду, так и подключить какую-нибудь внешнюю процедуру или функцию:

1
ON SELECTION BAR 1 OF Poptwo DO Procl

После этого необходимо активировать созданную систему меню, выполнив команду

1
ACTIVATE MENU <Имя_Меню>

Если выполнение нашей программы для генерации меню происходит в главном окне Visual FoxPro, то наше меню заменит системное меню. Чтобы вернуться обратно в системное меню Visual FoxPro, необходимо деактиви-ровать наше меню, выполнив команду:

1
DEACTIVATE MENU <Имя_Меню>

затем удалить его:

1
RELEASE MENUS <Имя_Меню> EXTENDED

и выполнить команду, которая восстановит прежнее системное меню:

1
SET SYSMENU TO DEFAULT

Использование конструктора меню

Конструктор меню запускается так же, как и все остальные конструкторы Visual FoxPro, поэтому не будем повторяться. Каким бы способом его не запустили, на экране появится диалоговое окно New Menu (Новое меню).

Здесь нам предлагается два варианта меню: Menu — обычное меню в виде строки и Shortcut — всплывающее контекстное меню. Начнем с обычного.

Конструктор меню включает в себя область, предназначенную для формирования меню (это где написано Prompt (Наименование), Result (Результат) и Options (Опции)), раскрывающийся список Menu level (Уровень меню) и четыре командные кнопки.

В поле Prompt (Наименование) вводятся названия пунктов меню, раскрывающийся список Result (Результат) предназначен для определения действий, происходящих при выборе пункта меню, а с помощью диалогового окна Prompt Option (Опции наименования), которое открывается при нажатии кнопки Option, можно задать дополнительные параметры для данного элемента меню. Кнопки, расположенные в правой части конструктора, имеют следующее назначение.

Кнопки конструктора меню

  • Insert (Вставить) – Добавляет в меню новый пункт
  • Insert Bar (Вставить команду системного меню) – Позволяет разместить в пользовательском меню команды системного меню Visual FoxPro
  • Delete (Удалить) – Удаляет указанный пункт меню
  • Preview (Предварительный просмотр) – Предварительный просмотр внешнего вида меню

Что ж, начнем потихоньку. Создаваемое нами меню не будет иметь отношения к нашему проекту с отелем — это будет полностью абстрактная система, используемая только в качестве примера. Определяем пункты линейки меню.

Мы определили пункты линейки меню, а заодно и “горячие” клавиши. “Горячая” клавиша используется для активизации соответствующего пункта меню — нажимаем и, удерживая ее, нажимаем “горячую” клавишу. Легко и удобно. Назначение “горячих” клавиш — требование абсолютно не обязательное, но желательное — в чем мы и убедимся в дальнейшем.

Теперь, когда пункты меню определены, требуется указать, какие действия будут происходить при выборе того или иного пункта, за это отвечают пункты раскрывающегося списка Result (Результат).

Кнопки списка Result

  • Command (Команда) – Выполняется определенная команда
  • Pad Name (Наименование строки меню) – Никаких действий. Может использоваться в качестве дополнительного пояснения
  • Submenu (Подменю) – Раскрывается связанное с данным пунктом Рорир-меню
  • Procedure (Процедура) – Выполняется определенная процедура
  • Command (Команда) – При выборе данного пункта с правой стороны появится поле ввода для записи команды.
  • Submenu (Подменю) – При выборе данного пункта справа появится кнопка Create (Создать), при нажатии которой откроется диалоговое окно для создания соответствующего подменю.

Для определения дополнительных параметров пункта меню используется диалоговое окно Prompt Options (Опции наименования).

Параметры окна Prompt Options

  • Skip for (Пропустить) – Блокировка пункта меню
  • Message (Сообщение) – Сообщение, отображаемое в строке состояния
  • Pad Name (Имя пункта) – Имя пункта меню
  • Comment (Комментарий) – Комментарий для пункта меню

В области Shortcut можно задать клавиши быстрого вызова, а область Negotiate содержит два раскрывающихся списка:
• Container (Контейнер) — определяет расположение меню при редактировании OLE-объекта;
• Object (Объект) — определяет расположение меню при выполнении приложений Active Document.

Определение клавиш быстрого доступа

Клавиши быстрого доступа похожи на “горячие” клавиши, но между ними есть и отличия. Например, при назначении “горячих” клавиш используются только символы, входящие в текст пункта меню, а при назначении клавиш быстрого доступа можно использовать функциональные клавиши, клавиши символов и комбинации клавиш. “Горячие” клавиши работают в сочетании с клавишей , а клавиши быстрого доступа “сами по себе”.

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

1. Устанавливаем курсор на пункт меню Помощь.
2. Щелкаем по кнопке Options.
3. Устанавливаем курсор в поле Key Label (Метка клавиши) и нажимаем соответствующую клавишу или комбинацию клавиш, в нашем случае . В поле Key Text можно ввести краткое пояснение.

В поле ввода Pad Name (Имя пункта) можно ввести желаемое наименование для данного поля ввода. Делается это для улучшения читаемости программного кода, сгенерированного конструктором отчетов.

Для блокировки пунктов меню используется поле ввода Skip For (Пропустить для). При нажатии расположенной справа кнопки откроется диалоговое окно Expression Builder (Построитель выражений), в котором можно задать условие для блокировки пункта меню. Для разделения пунктов меню по определенным категориям можно использовать символы \-.

Определение параметров меню

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

В поле ввода Procedure (Процедура) можно ввести фрагмент программы, который будет выполняться при запуске меню. Флажок Setup позволяет открыть окно для редактирования той программы, которая будет выполняться при запуске меню, а флажок Cleanup — для редактирования программы, выполняемой при выходе из меню.

При установленном флажке TopLevel Form (Форма верхнего уровня) меню будет располагаться в форме верхнего Уровня, в противном случае — в главном окне Visual FoxPro.

Группа переключателей Location (Расположение) позволяет выбрать варианты расположения строки меню.

Варианты расположения строки меню

  • Replace (Заместить) – Меню замещает системное меню
  • Append (Добавить) – Меню добавляется в системное меню
  • Before (Вставить перед) – Меню вставляется перед пунктом системного меню
  • After (Вставить после) – Меню вставляется после пункта системного меню

Генерация меню

Чтобы меню можно было использовать в приложении, сначала его нужно сгенерировать. Для этого используется пункт системного меню Menu (Меню) и диалоговое окно Generate Menu (Генерация меню).

Диалоговое окно Generate Menu

После нажатия кнопки Generate (Генерация) произойдет процесс генерации меню и… все, наше меню готово!

Запуск меню

Существует несколько способов запустить меню на выполнение:
• в окне проекта приложения установить курсор на наименования нашего меню и нажать кнопку Run;
• в командном меню написать следующую команду:

1
DO <имя_меню>.mpr

Запускаем наше меню и… сталкиваемся с “сюрпризом”…

При запуске меню происходит ошибка

В чем дело? А все дело в назначении “горячих” клавиш. Лис почему-то не желает работать с “горячими” клавишами, назначенными кириллицей, т.е. русскими буквами. Ему, видите ли, латиницу подавай. Ну и подадим — достаточно переопределить заново “горячие” клавиши. А еще более простой способ — вообще закомментировать использование “горячих” клавиш. И все в порядке.

Мы слегка поправили код меню

Теперь наше меню вполне работоспособно

Запуск меню в экранной форме

В рассмотренном примере мы запускали наше меню в главном окне Visual FoxPro, а теперь рассмотрим работу меню с экранной формой.

Создадим произвольную экранную форму и установим для нее свойство showwindow равным 2 — As top level form (Как форма верхнего уровня).

В методе init пропишем:

1
DO MENU1.MPR WITH THIS, .T.

Меню также надо немного “подправить”, а именно установить флажок Top-Level Form (Форма верхнего уровня) в диалоговом окне General Options (Основные опции) и снова запустить процесс генерации меню. После этих манипуляций можно запустить нашу форму.

Меню выполняется в экранной форме

Создание Shortcut-меню

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

В диалоговом окне New Menu (Новое меню) нажмем кнопку Shortcut. Запустится конструктор меню.

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

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

Для того чтобы меню такого типа выполнялось при нажатии правой кнопки мыши, необходимо использовать событие Right Click Event (Щелчок правой кнопкой), для которого написать следующую команду:

1
DO <имя меню>.mpr

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100