Блокирование команд меню
Блокирование команд меню
Иногда возникает необходимость сделать какой-либо пункт меню недоступным для пользователя. Например, вы можете использовать условие блокировки для ограничения доступа определенных пользователей к отдельным пунктам меню. Или рассмотрим еще такую ситуацию. Ваша система уже эксплуатируется пользователями, но не все пункты меню завершены. При их выборе на экране появляются сообщения об ошибках. Пользователь начинает нервничать. В этом случае вы можете задать для незавершенных пунктов меню условие блокировки. Чтобы определить условия блокировки. выполните следующие действия:
Нажмите кнопку Options (Опции) для пункта меню, который хотите заблокировать. В открывшемся диалоговом окне Prompt Options (Опции элемента меню) нажмите кнопку вызова построителя выражения для поля Skip For (Пропустить для). Введите .Т. в поле Skip For (Пропустить для) построителя выражений. Нажмите кнопку ОК для закрытия диалогового окна Expression Builder (Построитель выражения). Вы оказываетесь в окне Prompt Options (Опции элемента меню).Замечание
Замечание
Задавая условия блокировки, вы можете ввести любое допустимое логическое выражение. При вводе простого выражения, не требующего использования функций конструктора выражений, введите формируемое выражение в поле Skip For (Пропустить для) диалогового окна Prompt Options (Опции элемента меню).
Когда значение выражения, заданное в условии блокировки, является истинным, пункт меню становится недоступным.
В режиме просмотра вы не увидите, что пункт меню заблокирован. Чтобы убедиться в правильно созданной блокировке, вам необходимо созданное в конструкторе меню сгенерировать и полученную в результате программу запустить на выполнение.
Действия для пунктов меню
Действия для пунктов меню
Основное назначение пункта меню — выполнять определенное для него действие. Результат выбора пункта меню задается его типом (табл. 11.4).
Действия, необходимые для создания меню
Действия, необходимые для создания меню
Строкой меню называется горизонтальное меню, располагаемое в верхней части экрана. Примером строки меню является основное меню Visual FoxPro, а также меню программ, работающих в среде Windows. Созданное вами в конструкторе меню может замещать основное меню Visual FoxPro или добавляться к нему.
Для создания меню необходимо выполнить следующие действия:
Открыть окно конструктора меню. Описать вид меню, текст, пункты меню и его атрибуты. Определить действия, которые будут выполняться при выборе пунктов меню. Сгенерировать меню, используя команду Generate (Генерация) из меню Menu (Меню). При этом создается программа, которую вы в результате и запускаете на выполнение.Замечание
Замечание
На каждом шаге создания меню приложения вы можете просматривать его с помощью кнопки Preview (Просмотр) конструктора.
Рассмотрим эти этапы более подробно.
Формирование сообщения для пункта меню
Формирование сообщения для пункта меню
Используя поле ввода Message (Сообщение) диалогового окна Prompt Options (Опции элемента меню), вы можете определить для пункта меню сообщение, которое будет отображаться в строке состояния при установке на него курсора. В качестве сообщения можно использовать не только строку текста, но и произвольное символьное выражение. В этом случае нажмите кнопку вызова конструктора выражения, расположенную с правой стороны поля, и в открывшемся диалоговом окне Expression Builder (Построитель выражения) создайте необходимое выражение.
Определим сообщение для пункта меню Справка. Для этого выполните следующие действия:
Нажмите кнопку Options (Опции) для пункта меню Справка. В открывшемся диалоговом окне Prompt Options (Опции элемента меню) нажмите кнопку вызова построителя выражения для поля Message (Сообщение). В поле Message (Сообщение) построителя выражении введите строку текста "Вызов справочной системы".Замечание
Замечание
Введенную строку текста не забудьте поместить в кавычки.
Меню приложения
Глава 11. Меню приложения
Подготовка к созданию меню Действия, необходимые для создания меню Запуск конструктора меню Создание меню "Горячие" клавиши Задание параметров пункта меню в диалоговом окне Prompt Options Действия для пунктов меню Разделители элементов меню Задание графических изображений пунктам меню Определение параметров меню Сохранение, генерация и запуск меню Создание всплывающего меню
Команда
Команда
Чтобы определить команду, которая будет выполняться при выборе пункта меню, необходимо выполнить следующие действия:
В столбце Result (Результат) конструктора меню выбрать из списка значение Command (Команда). Ввести в поле, расположенное с правой стороны списка, команду Visual FoxPro, которая будет выполняться при выборе данного пункта меню.Обычно команды используются для вызова форм, отчетов, пользовательских процедур. Например, для запуска формы ввода списка клиентов достаточно ввести следующую команду:
DO FORM Client
Определение клавиш быстрого вызова пунктов меню
Определение клавиш быстрого вызова пунктов меню
Помимо "горячих" клавиш, в создании которых используются только символы текста меню, в Visual FoxPro можно определить для каждого пункта меню клавиши быстрого вызова пунктов меню. В качестве такой клавиши могут использоваться символы, функциональные клавиши, комбинации клавиш. Примером клавиши ускоренного действия в программе Visual FoxPro является функциональная клавиша <Fl>, используемая для вызова справочной системы. При нажатии на клавишу, определенную в качестве клавиши быстрого вызова, активизируется связанный с ней пункт меню без предварительного отображения самого меню.
Рассмотрим последовательность действий по определению клавиши быстрого вызова пункта меню справочной системы приложения:
В конструкторе меню установите курсор на пункт меню Справка. Нажмите кнопку Options (Опции). В открывшемся диалоговом окне Prompt Options (Опции элемента меню) в области Shortcut (Всплывающее меню) поле Key Label (Метка) содержит подсказку press the key (нажмите клавишу). Установите курсор в поле Key Label (Метка) и нажмите клавишу или комбинацию клавиш, используемую в качестве клавиши быстрого вызова, и в поле появится метка, соответствующая нажатым клавишам. В поле ввода Key Text (Пояснение) вы можете ввести краткое пояснение к определяемой клавише. Для пункта меню Справка нажмите клавишу <F1> клавиатуры. В поле Key Text (Пояснение) по умолчанию будет введено F1 (рис. 11.7). Оставьте это значение. Нажмите кнопку ОК для закрытия диалогового окна.Определение параметров меню
Определение параметров меню
Для строки меню вы можете определить процедуры, которые будут выполняться перед запуском меню, а также после выхода из него. Кроме того, вы можете указать месторасположение строки меню. Для этого используется диалоговое окно General Options (Основные параметры) (рис. 11.16), открываемое при выборе команды General Options (Основные параметры) из меню View (Вид).
Определение подменю
Определение подменю
Большинство команд меню создаваемого приложения открывает подменю. Например, пункт меню Поставщики должен содержать команды Ввод поставщиков, Задолженность и Поставляемые товары. Для создания данного подменю выполните следующие действия:
Нажмите кнопку Create (Создать) пункта меню Поставщики. На экране появляется пустое окно конструктора меню. Список Menu Level (Уровень меню) нового окна содержит метку текущего пункта меню. Введите в поле Prompt (Приглашение) первой строки команду Ввод поставщиков. Используя список Result (Результат), задайте тип созданного пункта меню. Во второй строке введите команду Задолженность и также задайте тип. Аналогичным образом введите третью команду (рис. 11.12).Замечание
Замечание
Параметры пунктов подменю определяются аналогично определению пунктов строки меню. Для перехода в меню верхнего уровня используйте список Menu Level.
Подготовка к созданию меню
Подготовка к созданию меню
В соответствии со стандартами Windows в любом приложении рекомендуется иметь строку меню, которая в Visual FoxPro содержит команды, предназначенные для вызова форм, формирования отчетов, запросов и т. д.
При разработке приложения вы можете создать все требуемые объекты (базу данных, входящие в нее таблицы, формы, отчеты, запросы). Затем объединить отдельные объекты с помощью меню. Можно поступить иначе. Сначала разработать и создать меню, а затем по мере создания форм и отчетов включать их запуск в меню. Второй способ более нагляден. Вы в любой момент можете запустить меню и продемонстрировать заказчику, как создаваемая система выглядит, как осуществляется вызов тех или иных программ, запустить уже созданные формы, напечатать подготовленные отчеты.
На начальном этапе разработки необходимо определить требования, предъявляемые к создаваемому приложению, состав информации, которая будет содержаться в проектируемой базе данных.
После этого определяется структура таблиц и совпадающие поля для их связывания. Затем создаются сами таблицы, входящие в базу данных, определяются отношения между ними.
Одновременно с составом информации вы должны определить те средства, которые получит в свое распоряжение пользователь при работе с вашим приложением.
Приложение должно содержать эффективную справочную систему, содержащую информацию о приложении, описание его основных функций и инструкцию по работе. В среде Windows предпочтительнее всего создавать справочную систему в принятом в Windows стандарте, чтобы облегчить пользователю поиск информации в знакомом ему окружении.
После того как определена структура данных, спроектированы таблицы, входящие в базу данных, вы можете приступить к разработке структуры меню. Прежде чем описывать структуру меню в конструкторе, нарисуйте эскиз меню на бумаге, посоветуйтесь с пользователями приложения.
Присвоение имени пункту меню
Присвоение имени пункту меню
По умолчанию при генерации программы Visual FoxPro в качестве имен пунктов меню создает уникальные имена. Для повышения читабельности программы можно определить эти имена явным образом, используя иоле ввода Pad Name (Имя пункта меню) диалогового окна Prompt Options (Опции элемента меню).
Процедура
Процедура
В том случае, если при выборе пункта меню должна выполняться некоторая последовательность команд, вам необходимо в столбце Result (Результат) окна конструктора выбрать для пункта меню тип Procedure (Процедура) и определить требуемые команды. Для этого нажмите кнопку Create (Создать) и в открывшемся окне редактирования процедуры определите фрагмент кода, связанный с элементом строки меню. Например, для пункта меню Справка вы можете указать тип Procedure (Процедура) и в окне создания процедуры задать имя файла справки и команду вызова справочной системы (рис. 11.11).
"Горячие" клавиши
"Горячие" клавиши
Для выбора пункта меню используются клавиш и-стрелки или мышь. Помимо этого, вы можете определить для пункта меню "горячую" клавишу, нажатие которой вместе с клавишей <Alt> активизирует этот пункт.
Для создания "горячей" клавиши, предоставляющей пользователю возможность ускоренного выбора пункта меню, необходимо включить в его имя перед активизирующим символом следующие символы: \<. В качестве "горячей" клавиши можно использовать первый символ имени пункта, что, конечно, более предпочтительно, а также и любой другой символ из ею имени. Символы, используемые в качестве "горячей" клавиши, выделяются в строке меню подчеркиванием.
Предупреждение
"Горячие" клавиши для пунктов меню назначаются Visual FoxPro по умолчанию Для их создания используются первые буквы элементов строки меню Если два элемента вашего меню начинаются с одинаковой буквы, то обоим элементам строки меню в качестве "горячей" клавиши назначается одинаковый символ. В этом случае вам нужно переопределить "горячую" клавишу для одного из элементов строки меню.
Разделители элементов меню
Разделители элементов меню
Для улучшения внешнего вида, а также для объединения в группы схожих по смыслу команд, в меню можно использовать разделительные линии. Разделительные линии представляют собой пункт меню, в котором в поле ввода Prompt (Приглашение) вместо наименования пункта вводятся символы \-. Рассмотрим создание разделительных линий в подменю Поставщики Для этого выполните следующие действия:
Откройте файл меню в окне конструктора проекта. Перейдите в режим редактирования пункта меню Поставщики, нажав кнопку Create (Создать). Вставьте новый элемент меню после пункта меню Ввод поставщиков. Для этого установите курсор на пункт Задолженность и нажмите кнопку Insert (Вставить). В поле Prompt (Приглашение) образованного подпункта меню New Item (Новый пункт) введите \-.Диалоговое окно New Menu
Рис. 11.1. Диалоговое окно New Menu
Menu — меню в виде строки Shortcut — всплывающее меню, в котором основные пункты расположены по вертикали
Конструктор меню
Рис. 11.2. Конструктор меню
Выберите тип создаваемого меню, нажав соответствующую кнопку. В результате запускается конструктор меню, а в основное меню Visual FoxPro добавляется новый пункт Menu (Меню) (рис. 11.2). Сначала рассмотрим создание меню в виде строки. Для этого выберите опцию Menu (Меню).
Область конструктора меню, над которой расположены надписи Prompt (Приглашение), Result (Результат) и Options (Опции), предназначена для формирования меню.
В поле Prompt (Приглашение) можно ввести наименования пунктов меню. Раскрывающийся список Result (Результат) используется для указания типа пункта меню. Кнопка Options (Опции) открывает диалоговое окно Prompt Options (Опции элемента меню), в котором можно определить дополнительные параметры данного элемента меню ("горячие" клавиши, сообщение, отображаемое в строке состояния при выборе пункта меню и т. д.). В списке Menu level (Уровень меню) указывается уровень текущего меню.
Слева в конструкторе меню размещены кнопки (табл. 11.1).
Основное меню приложения
Рис. 11.3. Основное меню приложения
Указав тип пункта меню, перейдите в следующую строку и введите информацию о втором пункте меню. Введите наименования остальных пунктов меню и их типы (рис. 11.3).Для просмотра созданных пунктов меню нажмите кнопку Preview (Просмотр). Основное меню Visual FoxPro будет заменено созданным меню. Пункты меню отображаются на экране в порядке их описания. На экране также появляется диалоговое окно Preview (Просмотр), в котором отображается текст текущего пункта меню, его тип и выполняемое действие (рис. 11.4).
Просмотр созданного меню приложения
Рис. 11.4. Просмотр созданного меню приложения
Создание строки меню с назначенными "горячими" клавишами
Рис. 11.5. Создание строки меню с назначенными "горячими" клавишами
Для облегчения назначения "горячих" клавиш можно использовать искусственный прием: перед именами пунктов меню разместить цифры и использовать их в качестве "горячих" клавиш (рис. 11.5).
Диалоговое окно Prompt Options
Рис. 11.6. Диалоговое окно Prompt Options
В диалоговом окне Prompt Options (Опции элемента меню) содержится область Shortcut (Всплывающее меню) для задания клавиш быстрого вызова, а также поля ввода (табл. 11.3).
Определение клавиши быстрого вызова для пункта меню Справка
Рис. 11.7. Определение клавиши быстрого вызова для пункта меню Справка
Определение сообщения для пункта меню Справка
Рис. 11.8. Определение сообщения для пункта меню Справка
Аналогичным образом вы можете определить сообщения для остальных пунктов меню. На рис. 11.9 показан результат вывода сообщения в строке состояния.
Отображение в строке состояния сообщения для пункта меню
Рис. 11.9. Отображение в строке состояния сообщения для пункта меню
Диалоговое окно Prompt Options для пункта меню Справка
Рис. 11.10. Диалоговое окно Prompt Options для пункта меню Справка
На рис. 11.10 приведено диалоговое окно Prompt Options (Опции элемента меню) для пункта меню Справка с определенным для него именем пункта меню, сообщением в строке состояния и условием блокировки.
Окно редактирования процедуры для пункта меню Справка
Рис. 11.11. Окно редактирования процедуры для пункта меню Справка
При вводе процедуры не используйте команду procedure, т. к. Visual FoxPro генерирует эту команду автоматически.
Во время генерации для каждой процедуры, включенной в меню, Visual FoxPro создает уникальное имя и включает его вместе с указанием местонахождения процедуры в код, связанный с соответствующим элементом строки меню.
Замечание
Замечание
После определения текста процедуры наименование кнопки Create (Создать) изменяется на Edit (Правка).
Окно создания подменю
Рис. 11.12. Окно создания подменю
Создание разделителей в подменю Поставщики
Рис. 11.13. Создание разделителей в подменю Поставщики
Аналогично встаньте разделительную линию после пункта меню Задолженность Нажмите кнопку Preview (Просмотр). Выберите пункт меню Поставщики.
На экране появится подменю с разделительными линиями (рис. 11.13).
Диалоговое окно Insert System Menu Bar
Рис. 11.14. Диалоговое окно Insert System Menu Bar
Диалоговое окно Prompt Options с заданным графическим изображением для пункта меню
Рис. 11.15. Диалоговое окно Prompt Options с заданным графическим изображением для пункта меню
Диалоговое окно General Options
Рис. 11.16. Диалоговое окно General Options
В группе Location (Размещение) этого диалогового окна можно выбрать один из вариантов размещения строки созданного меню (табл. 11.5).
Диалоговое окно Generate Menu
Рис. 11.17. Диалоговое окно Generate Menu
После завершения генерации можно запустить программу меню на выполнение. Для этого выполните одно из следующих действий:
в окне проекта установите курсор на наименование созданного меню и нажмите кнопку Run (Запустить); в меню Program (Программа) выберите команду Do (Выполнить). В открывшемся диалоговом окне Do (Выполнить) откройте папку, в которой вы сохранили файл меню, выберите файл с расширением MPR и нажмите кнопку Do (Выполнить).На экране появится созданное вами меню, которое заменит основное меню Visual FoxPro, если в диалоговом окне General Options (Основные параметры) перед генерацией была установлена опция Replace (Замещать).
Совет
Совет
Если вам не удается восстановить на экране системное меню Visual FoxPro, введите в командном окне команду set sysmenu to default.
Создание меню типа Shortcut
Рис. 11.18. Создание меню типа Shortcut
Для генерации выберите команду Generate (Генерация) в меню Menu (Меню). Запустите меню на выполнение. Вид данного меню при запуске представлен на рис. 11.19.
Меню типа Shortcut
Рис. 11.19. Меню типа Shortcut
Сохранение, генерация и запуск меню
Сохранение, генерация и запуск меню
Для сохранения созданного меню выберите команду Save as (Сохранить как) в меню File (Файл). В открывшемся диалоговом окне Save as (Сохранить как) из списка Папка выберите папку, в которой вы предполагаете сохранить файл, откройте ее, в поле Save Menu As (Сохранить меню в) введите имя сохраняемого меню. В заключение нажмите кнопку Сохранить.
С помощью кнопки Preview (Просмотр) окна конструктора меню можно просмотреть внешний вид создаваемого меню, но нельзя его активизировать.
Чтобы можно было использовать меню в приложениях, его необходимо предварительно сгенерировать. Для этого выполните следующие действия:
В меню Menu (Меню) выберите команду Generate (Генерация). Откроется диалоговое окно Generate Menu (Генерация меню) (рис. 11. 17). В поле Output File (Внешний файл) введите имя файла, который будет создан в результате генерации. Для запуска генерации описания меню нажмите кнопку Generate (Генерация).Создание меню
Создание меню
После тою как вы открыли конструктор, можно приступать к созданию меню. Для этого выполните следующие действия:
В поле Prompt (Приглашение) введите наименования первого пункта меню и нажмите клавишу <Enter> или <ТаЬ> для перехода на следующее поле. Курсор оказывается в списке Result (Результат). Для определения типа пункта меню (табл. 11.2) нажмите кнопку раскрытия списка и выберите необходимое значение из тех, которые предлагает система.Создание всплывающего меню
Создание всплывающего меню
В Visual FoxPro имеется возможность создания всплывающего меню средствами конструктора меню.
Способ создания меню данного типа аналогичен созданию горизонтального меню в виде строки. Для этого меню, как и для обычного, можно определить оперативные клавиши и опции, устанавливаемые в диалоговом окне Prompt Options (Опции элемента меню).
Чтобы создать всплывающее меню, выполните следующую последовательность действий:
Откройте проект. Для открытия окна конструктора меню в окне проекта перейдите на вкладку Other (Остальные) и выберите группу Menus (Меню). Нажмите кнопку New окна проекта. В открывшемся диалоговом окне New Menu (Новое меню) нажмите кнопку Shortcut (Всплывающее меню). Откроется окно конструктора меню. В поле Prompt (Приглашение) последовательно введите тексты пунктов меню и определите для них выполняемые действия (рис. 10.18).Назначение кнопок конструктора меню
Таблица 11.1. Назначение кнопок конструктора меню
Кнопка |
Назначение |
Insert (Вставить) |
Добавляет в меню новый пункт |
Insert Bar (Вставить команды системного меню) |
Открывает диалоговое окно Insert System Menu Bar, содержащее команды системного меню Visual FoxPro, позволяя разместить их в создаваемом пользовательском меню |
Delete (Удалить) |
Удаляет текущий пункт меню |
Move Item (Переместить элемент) |
Открывает одноименное диалоговое окно, позволяющее указать пункт меню, в который переносится текущий подпункт |
Preview (Просмотр) |
Размещает создаваемое меню на экране, позволяя просмотреть его внешний вид |
Типы меню
Таблица 11.2. Типы меню
Тип меню |
Назначение |
Command (Команда) |
При выборе пункта меню данного типа будет выполняться связанная с ним команда |
Pad Name (Наименование строки меню) |
При выборе пункта меню никаких действий выполняться не будет. Как правило, используется в качестве дополнительного пояснения к меню |
Submenu (Подменю) |
При выборе пункта меню раскрывается связанное с данным пунктом ниспадающее меню |
Procedure (Процедура) |
При выборе пункта меню вызывается процедура, определенная для данного пункта меню |
Замечание
Замечание
При использовании значения типа Command (Команда) с правой стороны появляется поле для ввода команды, выполняемой при выборе данного пункта меню. Это может быть, например, команда вызова формы или формирования отчета. Если из списка Result (Результат) вы выбрали значение Procedure (Процедура) или Submenu (Подменю), в окне конструктора правее описания типа пункта меню появляется кнопка Create (Создать). При нажатии этой кнопки вы переходите, соответственно, в окно создания процедуры или в окно создания ниспадающего меню для выбранного пункта меню.
Назначение полей ввода диалогового окна Prompt Options
Таблица 11.3. Назначение полей ввода диалогового окна Prompt Options
Поле ввода |
Назначение |
Skip For (Пропустить для) |
Позволяет заблокировать пункт меню |
Message (Сообщение) |
Позволяет задать сообщение, которое будет отображаться в строке состояния при выборе пункта меню |
Pad Name (Имя пункта меню) |
Задает имя пункта меню |
Comment (Комментарий) |
Задает комментарий к пункту меню |
Область Negotiate (Соглашение) содержит два раскрывающихся списка, имеющих следующее назначение:
Container (Контейнер) — определяет расположение меню при редактировании по месту OLE-объектов; Object (Объект) — задает расположение меню при выполнении приложения типа Active Document в Web-браузере.Область Picture (Изображение) позволяет разместить слева от текста пункта меню графическое изображение. Расположенные в ней объекты интерфейса доступны при определении подпунктов меню.
Типы пункта меню
Таблица 11.4. Типы пункта меню