Блокирование команд меню



Блокирование команд меню

Иногда возникает необходимость сделать какой-либо пункт меню недоступным для пользователя. Например, вы можете использовать условие блокировки для ограничения доступа определенных пользователей к отдельным пунктам меню. Или рассмотрим еще такую ситуацию. Ваша система уже эксплуатируется пользователями, но не все пункты меню завершены. При их выборе на экране появляются сообщения об ошибках. Пользователь начинает нервничать. В этом случае вы можете задать для незавершенных пунктов меню условие блокировки. Чтобы определить условия блокировки, выполните следующие действия: Нажмите кнопку Options (Опции) для пункта меню, который хотите заблокировать. В открывшемся диалоговом окне Prompt Options (Опции элемента меню) нажмите кнопку вызова построителя выражения для поля Skip For (Пропустить для). Введите .71 в поле Skip For (Пропустить для) построителя выражений. Нажмите кнопку ОК для закрытия диалогового окна Expression Builder (Построитель выражения). Вы оказываетесь в окне Prompt Options (Опции элемента меню).

Действия для пунктов меню





Действия для пунктов меню

Основное назначение пункта меню — выполнять определенное для него действие. Результат выбора пункта меню задается его типом (табл. 11.4).

Действия, необходимые для создания меню



Действия, необходимые для создания меню

Строкой меню называется горизонтальное меню, располагаемое в верхней части экрана. Примером строки меню является основное меню Visual FoxPro, а также меню программ, работающих в среде Windows. Созданное вами в конструкторе меню может замещать основное меню Visual FoxPro или добавляться к нему. Для создания меню необходимо выполнить следующие действия: Открыть окно конструктора меню. Описать вид меню, текст, пункты меню и его атрибуты. Определить действия, которые будут выполняться при выборе пунктов меню. Сгенерировать меню, используя команду Generate (Генерация) из меню Menu (Меню). При этом создается программа, которую вы в результате и запускаете на выполнение.

Диалоговое окно General Options



Диалоговое окно General Options




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



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


После завершения генерации можно запустить программу меню на выполнение. Для этого выполните одно из следующих действий. В окне проекта установите курсор на наименование созданного меню и нажмите кнопку Run (Запустить). В меню Program (Программа) выберите команду Do (Выполнить). В открывшемся диалоговом окне Do (Выполнить) откройте папку, в которой вы сохранили файл меню, выберите файл с расширением MPR и нажмите кнопку Do (Выполнить). На экране появится созданное вами меню, которое заменит основное меню Visual FoxPro, если в диалоговом окне General Options (Основные параметры) перед генерацией была установлена опция Replace (Замещать).

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



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


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

Диалоговое окно Prompt Options



Диалоговое окно Prompt Options


В диалоговом окне Prompt Options (Опции элемента меню) содержится область Shortcut (Всплывающее меню) для задания клавиш быстрого вызова, а также поля ввода (табл. 11.3).



Диалоговое окно Prompt Options для пункта меню Справка



Диалоговое окно Prompt Options для пункта меню Справка





Формирование сообщения для пункта меню



Формирование сообщения для пункта меню

Используя поле ввода Message (Сообщение) диалогового окна Prompt Options (Опции элемента меню), вы можете определить для пункта меню сообщение, которое будет отображаться в строке состояния при установке на него курсора. В качестве сообщения можно использовать не только строку текста, но и произвольное символьное выражение. В этом случае нажмите кнопку вызова конструктора выражения, расположенную с правой стороны поля, и в открывшемся диалоговом окне Expression Builder (Построитель выражения) создайте необходимое выражение. Определим сообщение для пункта меню Справка. Для этого выполните следующие действия: Нажмите кнопку Options (Опции) для пункта меню Справка. В открывшемся диалоговом окне Prompt Options (Опции элемента меню) нажмите кнопку вызова построителя выражения для поля Message (Сообщение). В поле Message (Сообщение) построителя выражений введите строку текста "Вызов справочной системы приложения ".

Меню приложения


В соответствии со стандартами Windows в любом приложении рекомендуется иметь строку меню, которая в Visual FoxPro содержит команды, предназначенные для вызова форм, формирования отчетов, запросов и т. д. При разработке приложения вы можете создать все требуемые объекты (базу данных, входящие в нее таблицы, формы, отчеты, запросы). Затем объединить отдельные объекты с помощью меню. Можно поступить иначе. Сначала разработать и создать меню, а затем по мере создания форм и отчетов включать их запуск в меню. Второй способ более нагляден. Вы в любой момент можете запустить меню и продемонстрировать заказчику, как создаваемая система выглядит, как осуществляется вызов тех или иных программ, запустить уже созданные формы, напечатать подготовленные отчеты.

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


Команда



Команда

Чтобы определить команду, которая будет выполняться при выборе пункта меню, необходимо выполнить следующие действия: В столбце Result (Результат) конструктора меню выбрать из списка значение Command (Команда). Ввести в поле, расположенное с правой стороны списка, команду Visual FoxPro, которая будет выполняться при выборе данного пункта меню. Обычно команды используются для вызова форм, отчетов, пользовательских процедур. Например, для запуска формы ввода списка клиентов достаточно ввести следующую команду: DO FORM Client



Конструктор меню



Конструктор меню


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



Меню типа Shortcut



Меню типа Shortcut





Окно редактирования процедуры для пункта меню Справка



Окно редактирования процедуры для пункта меню Справка


Для этого нажмите кнопку Create (Создать) и в открывшемся окне редактирования процедуры определите фрагмент кода, связанный с элементом строки меню. Например, для пункта меню Справка вы можете указать тип Procedure (Процедура) и в окне создания процедуры задать имя файла справки и команду вызова справочной системы (рис. 11.11). При вводе процедуры не используйте команду PROCEDURE, т. к. Visual FoxPro генерирует эту команду автоматически. Во время генерации для каждой процедуры, включенной в меню, Visual FoxPro создает уникальное имя и включает его вместе с указанием местонахождения процедуры в код, связанный с соответствующим элементом строки меню.

Окно создания подменю



Окно создания подменю





Определение клавиши быстрого вызова для пункта меню Справка



Определение клавиши быстрого вызова для пункта меню Справка


Нажмите кнопку Options (Опции). В открывшемся диалоговом окне Prompt Options (Опции элемента меню) в области Shortcut (Всплывающее меню) поле Key Label (Метка) содержит подсказку press the key (нажмите клавишу). Установите курсор в поле Key Label (Метка) и нажмите клавишу или комбинацию клавиш, используемую в качестве клавиши быстрого вызова, и в поле появится метка, соответствующая нажатию клавиши. В поле ввода Key Text (Пояснение) вы можете ввести краткое пояснение к определяемой клавише. Для пункта меню Справка нажмите клавишу <F1> клавиатуры. В поле Key Text (Пояснение) по умолчанию будет введено F1 (рис. 11.7). Оставьте это значение. Нажмите кнопку ОК для закрытия диалогового окна.



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



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

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

Определение подменю



Определение подменю

Большинство команд меню создаваемого приложения открывает подменю. Например, пункт меню Покупатели должен содержать команды Ввод данных, Отчеты и Запросы. Для создания данного подменю выполните следующие действия: Нажмите кнопку Create (Создать) пункта меню Покупатели. На экране появляется пустое окно конструктора меню. Список Menu Level (Уровень меню) нового окна содержит метку текущего пункта меню. Введите в поле Prompt (Приглашение) первой строки команду Ввод данных. Используя список Result (Результат), задайте тип созданного пункта меню. Во второй строке введите команду Отчеты и также задайте тип. Аналогичным образом введите третью команду (рис. 11.12).

Определение сообщения для пункта меню Справка



Определение сообщения для пункта меню Справка


Аналогичным образом вы можете определить сообщения для остальных пунктов меню. На рис. 11.9 показан результат вывода сообщения в строке состояния.

Основное меню приложения



Основное меню приложения


Указав тип пункта меню, перейдите в следующую строку и введите информацию о втором пункте меню. Введите наименования остальных пунктов меню и их типы (рис. 11.3). Для просмотра созданных пунктов меню нажмите кнопку Preview (Просмотр). Основное меню Visual FoxPro будет заменено созданным меню. Пункты меню отображаются на экране в порядке их описания. На экране также появляется диалоговое окно Preview (Просмотр), в котором отображается текст текущего пункта меню, его тип и выполняемое действие (рис. 11.4).

Отображение в строке состояния сообщения для пункта меню



Отображение в строке состояния сообщения для пункта меню




Подготовка к созданию меню



Подготовка к созданию меню Действия, необходимые для создания меню Запуск конструктора меню Создание меню "Горячие" клавиши Задание параметров пункта меню в диалоговом окне Prompt Options Действия для пунктов меню Разделители элементов меню Определение параметров меню Сохранение, генерация и запуск меню Создание всплывающего меню


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



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

По умолчанию при генерации программы Visual FoxPro в качестве имен пунктов меню создает уникальные имена. Для повышения читабельности программы можно определить эти имена явным образом, используя поле ввода Pad Name (Имя пункта меню) диалогового окна Prompt Options (Опции элемента меню). На рис. 11.10 приведено диалоговое окно Prompt Options (Опции элемента меню) для пункта меню Справка с определенным для него именем пункта меню, сообщением в строке состояния и условием блокировки.

Процедура



Процедура

В том случае, если при выборе пункта меню должна выполняться некоторая последовательность команд, вам необходимо в столбце Result (Результат) окна конструктора выбрать для пункта меню тип Procedure (Процедура) и определить требуемые команды.

Просмотр созданного меню приложения



Просмотр созданного меню приложения





"Горячие" клавиши



"Горячие" клавиши

Для выбора пункта меню используются клавиши-стрелки или мышь. Помимо этого, вы можете определить для пункта меню "горячую" клавишу, нажатие которой вместе с клавишей <Alt> активизирует этот пункт. Для создания "горячей" клавиши, предоставляющей пользователю возможность ускоренного выбора пункта меню, необходимо включить в его имя перед активизирующим символом следующие символы \<. В качестве "горячей" клавиши можно использовать первый символ имени пункта, что, конечно, более предпочтительно, а также и любой другой символ из его имени. Символы, используемые в качестве "горячей" клавиши, выделяются в строке меню подчеркиванием. "Горячие" клавиши для пунктов меню назначаются Visual FoxPro по умолчанию. Для их создания используются первые буквы элементов строки меню. Если два элемента вашего меню начинаются с одинаковой буквы, то обоим элементам строки меню в качестве "горячей" клавиши назначается одинаковый символ. В этом случае вам нужно переопределить "горячую" клавишу для одного из элементов строки меню. Для облегчения назначения "горячих" клавиш можно использовать искусственный прием: перед именами пунктов меню разместить цифры и их использовать в качестве "горячих" клавиш (рис. 11.5).

Разделители элементов меню



Разделители элементов меню

Для улучшения внешнего вида, а также для объединения в группы схожие по смыслу команды в меню можно использовать разделительные линии. Разделительные линии представляют собой пункт меню, в котором в поле ввода Prompt (Приглашение) вместо наименования пункта вводятся символы \-. Рассмотрим создание разделительных линий в подменю Покупатели. Для этого выполните следующие действия: Откройте файл меню в окне конструктора проекта. Перейдите в режим редактирования пункта меню Покупатели, нажав кнопку Create (Создать). Вставьте новый элемент меню после пункта меню Ввод данных. Для этого установите курсор на пункт Отчеты и нажмите кнопку Insert (Вставить). В поле Prompt (Приглашение) образованного подпункта меню New Item (Новый пункт) введите \-. , Аналогично вставьте разделительную линию после пункта меню Отчеты. Нажмите кнопку Preview (Просмотр). Выберите пункт меню Покупатели. На экране появится подменю с разделительными линиями (рис. 11.13).

Сохранение, генерация и запуск меню



Сохранение, генерация и запуск меню

Для сохранения созданного меню выберите команду Save as (Сохранить как) в меню File (Файл). В открывшемся диалоговом окне Save as (Сохранить как) из списка Папка выберите папку, в которой вы предполагаете сохранить файл, откройте ее, в поле Save Menu (Сохранить меню) введите имя сохраняемого меню. В заключение нажмите кнопку Сохранить. С помощью кнопки Preview (Просмотр) окна конструктора меню можно просмотреть внешний вид создаваемого меню, но нельзя его активизировать. Чтобы можно было использовать меню в приложениях, его необходимо предварительно сгенерировать. Для этого выполните следующие действия: В меню Menu (Меню) выберите команду Generate (Генерация). Откроется диалоговое окно Generate Menu (Генерация меню) (рис. 11.15). В поле Output File (Внешний файл) введите имя файла, который будет создан в результате генерации. Для запуска генерации описания меню нажмите кнопку Generate (Генерация).

Если вам не удается восстановить



Совет

Если вам не удается восстановить на экране системное меню Visual FoxPro, введите в командном окне команду SET SYSMENU то DEFAULT.



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



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

После того как вы открыли конструктор, можно приступать к созданию меню. Для этого выполните следующие действия: В поле Prompt (Приглашение) введите наименования первого пункта меню и нажмите клавишу <Enter> или <ТаЬ> для перехода на следующее поле. Курсор оказывается в списке Result (Результат). Для определения типа пункта меню (табл. 11.2) нажмите кнопку раскрытия списка и выберите необходимое значение из тех, которые предлагает система.



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



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


Для генерации выберите команду Generate (Генерация) в меню Menu (Меню). Запустите меню на выполнение. Вид данного меню при запуске представлен на рис. 11.17.

Создание разделителей в подменю Покупатели



Создание разделителей в подменю Покупатели





Создание всплывающего меню



Создание всплывающего меню

В Visual FoxPro 7.0 имеется возможность создания всплывающего меню средствами конструктора меню. Способ создания меню данного типа аналогичен созданию горизонтального меню в виде строки. Для этого меню, как и для обычного, можно определить оперативные клавиши и опции, устанавливаемые в диалоговом окне Prompt Options (Опции элемента меню). Чтобы создать всплывающее меню, выполните следующую последовательность действий: Откройте проект. Для открытия окна конструктора меню в окне проекта перейдите на вкладку Other (Остальные) и выберите группу Menus (Меню). Нажмите кнопку New (Новый) окна проекта. В открывшемся диалоговом окне New Menu (Новое меню) нажмите кнопку Shortcut (Всплывающее меню). Откроется окно конструктора меню. В поле Prompt (Приглашение) последовательно введите тексты пунктов меню и определите для них выполняемые действия (рис. 10.16).

Назначение кнопок конструктора меню



Таблица 11.1. Назначение кнопок конструктора меню

Кнопка Назначение
Insert (Вставить) Добавляет в меню новый пункт
Insert Bar (Вставить команды системного меню) Открывает диалоговое окно Insert System Menu Bar, содержащее команды системного меню Visual FoxPro, позволяя разместить их в создаваемом пользовательском меню
Delete (Удалить) Удаляет текущий пункт меню
Preview (Просмотр) Размещает создаваемое меню на экране, позволяя просмотреть его внешний вид



Типы пунктов меню



Таблица 11.2. Типы пунктов меню

Тип меню Назначение
Command (Команда) При выборе пункта меню данного типа будет выполняться связанная с ним команда
Pad Name (Наименование строки меню) При выборе пункта меню никаких действий выполняться не будет. Как правило, используется в качестве дополнительного пояснения к меню
Submenu (Подменю) При выборе пункта меню раскрывается связанное с данным пунктом ниспадающее меню
Procedure (Процедура) При выборе пункта меню вызывается процедура, определенная для данного пункта меню


Назначение полей ввода диалогового окна Prompt Options



Таблица 11.3. Назначение полей ввода диалогового окна Prompt Options

Поле ввода Назначение
Skip For {Пропустить для) Позволяет заблокировать пункт меню
Message (Сообщение) Позволяет задать сообщение, которое будет отображаться в строке состояния при выборе пункта меню
Pad Name (Имя пункта меню) Задает имя пункта меню
Comment (Комментарий) Задает комментарий к пункту меню
Область Negotiate (Соглашение) содержит два раскрывающихся списка, имеющих следующее назначение: Container (Контейнер) — определяет расположение меню при редактировании по месту OLE-объектов; Object (Объект) — задает расположение меню при выполнении приложения типа Active Document в Web-браузере.

Определение клавиш быстрого вызова пунктов меню Помимо "горячих" клавиш, в создании которых используются только символы текста меню, в Visual FoxPro можно определить для каждого пункта меню клавиши быстрого вызова пунктов меню. В качестве такой клавиши могут использоваться символы, функциональные клавиши, комбинации клавиш. Примером клавиши ускоренного действия в программе Visual FoxPro является функциональная клавиша <F1>, используемая для вызова справочной системы. При нажатии на клавишу, определенную в качестве клавиши ускоренного действия, активизируется связанный с ней пункт меню без предварительного отображения самого меню. Рассмотрим последовательность действий по определению клавиши быстрого вызова пункта меню справочной системы приложения. В конструкторе меню установите курсор на пункт меню Справка.

Типы пункта меню



Таблица 11.4. Типы пункта меню

Тип пункта меню Действие
Submenu (Подменю) Раскрывается связанное с данным пунктом меню ниспадающее подменю
Procedure (Процедура) Выполняется процедура, определенная в конструкторе меню
Command (Команда) Выполняется команда, расположенная в поле рядом с типом пункта меню



Группа переключателей Location диалогового окна General Options



Таблица 11.5. Группа переключателей Location диалогового окна General Options

Переключатель Вид размещения
Replace (Замещать) Меню замещает основное меню Visual FoxPro
Append (Добавить) Меню добавляется в основное меню Visual FoxPro
Before (Перед) Меню вставляется перед указанным пунктом основного меню Visual FoxPro
After (После) Меню размещается за указанным пунктом основного меню Visual FoxPro
Флажки Setup (Задать) и Cleanup (Очистить) используются для открытия окна редактирования процедуры, вызываемой при запуске сгенерированной программы с описанием меню, и процедуры, вызываемой перед завершением этой программы. При установленном флажке Top-Level Form (Форма высокого уровня) меню будет отображаться в отдельном окне. В противном случае меню можно использовать только в окне Visual FoxPro.


Задание параметров пункта меню в диалоговом окне Prompt Options



Задание параметров пункта меню в диалоговом окне Prompt Options

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

На каждом шаге создания меню



Замечание

На каждом шаге создания меню приложения вы можете просматривать его с помощью кнопки Preview (Просмотр) конструктора.
Рассмотрим эти этапы более подробно.



При использовании значения типа Command



Замечание

При использовании значения типа Command (Команда) с правой стороны появляется поле для ввода команды, выполняемой при выборе данного пункта меню. Это может быть, например, команда вызова формы или формирования отчета. Если из списка Result (Результат) вы выбрали значение Procedure (Процедура) или Submenu (Подменю), в окне конструктора правее описания типа пункта меню появляется кнопка Create (Создать). При нажатии на эту кнопку вы переходите, соответственно, в окно создания процедуры или в окно создания ниспадающего меню для выбранного пункта меню.


Введенную строку текста не забудьте



Замечание

Введенную строку текста не забудьте поместить в кавычки.
Нажмите кнопку ОК для закрытия диалогового окна Expression Builder (Построитель выражения). Вы оказываетесь в окне Prompt Options (Опции элемента меню). Введенное вами выражение размещено в поле Message (Сообщение) (рис. 11.8). Нажмите кнопку ОК.

Задавая условия блокировки, вы можете



Замечание

Задавая условия блокировки, вы можете ввести любое допустимое логическое выражение. При вводе простого выражения, не требующего использования функций конструктора выражений, введите формируемое выражение в поле Skip For (Пропустить для) диалогового окна Prompt Options (Опции элемента меню).
Нажмите кнопку ОК для его закрытия. Когда значение выражения, заданное в условии блокировки, является истинным, пункт меню становится недоступным.
В режиме просмотра вы не увидите, что пункт меню заблокирован. Чтобы убедиться в правильно созданной блокировке, вам необходимо созданное в конструкторе меню сгенерировать и полученную в результате программу запустить на выполнение.



После определения текста процедуры наименование



Замечание

После определения текста процедуры наименование кнопки Create (Создать) изменяется на Edit (Правка).



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



Замечание

Параметры пунктов подменю определяются аналогично определению пунктов строки меню. Для перехода в меню верхнего уровня используйте список Menu Level.


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



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

Для открытия окна конструктора меню воспользуйтесь одним из следующих способов: В меню File (Файл) выберите команду New (Новый). В открывшемся диалоговом окне New установите опцию Menu (Меню) и нажмите кнопку New File (Новый файл). В окне проекта перейдите на вкладку Other (Остальные) и выберите группу Menus (Меню). Затем нажмите кнопку New (Новый) окна проекта. Находясь в группе Menus (Меню) окна проекта, нажмите кнопку New (Новый) на стандартной панели инструментов Visual FoxPro. В открывшемся диалоговом окне New (Новый) установите опцию Menu (Меню) и нажмите кнопку New File (Новый файл). На экране открывается диалоговое окно New Menu (Новое меню), в котором предлагается два варианта меню (рис. 11.1). Menu — меню в виде строки. Shortcut — всплывающее меню, в котором основные пункты расположены по вертикали.