В соответствии со стандартами Windows в любом приложении рекомендуется иметь строку меню, которая в Visual FoxPro содержит команды, предназначенные для вызова форм, формирования отчетов, запросов и т. д.
При разработке приложения вы можете создать все требуемые объекты (базу данных, входящие в нее таблицы, формы, отчеты, запросы). Затем объединить отдельные объекты с помощью меню. Можно поступить иначе. Сначала разработать и создать меню, а затем по мере создания форм и отчетов включать их запуск в меню. Второй способ более нагляден. Вы в любой момент можете запустить меню и продемонстрировать заказчику, как создаваемая система выглядит, как осуществляется вызов тех или иных программ, запустить уже созданные формы, напечатать подготовленные отчеты.
На начальном этапе разработки необходимо определить требования, предъявляемые к создаваемому приложению, состав информации, которая будет содержаться в проектируемой базе данных.
После этого определяется структура таблиц и совпадающие поля для их связывания. Затем создаются сами таблицы, входящие в базу данных, определяются отношения между ними.
Одновременно с составом информации вы должны определить те средства, которые получит в свое распоряжение пользователь при работе с вашим приложением.
Приложение должно содержать эффективную справочную систему, содержащую информацию о приложении, описание его основных функций и инструкцию по работе. В среде Windows предпочтительнее всего создавать справочную систему в принятом в Windows стандарте, чтобы облегчить пользователю поиск информации в знакомой ему среде.
После того как определена структура данных, спроектированы таблицы, входящие в базу данных, вы можете приступить к разработке структуры меню. Прежде чем описывать структуру меню в конструкторе, нарисуйте эскиз меню на бумаге, посоветуйтесь с пользователями приложения.
Действия, необходимые для создания меню
Строкой меню называется горизонтальное меню, располагаемое в верхней части экрана. Примером строки меню является основное меню Visual FoxPro, а также меню программ, работающих в среде Windows. Созданное вами в конструкторе меню может замещать основное меню Visual FoxPro или добавляться к нему.
Для создания меню необходимо выполнить следующие действия:
Замечание
На каждом шаге создания меню приложения вы можете просматривать его с помощью кнопки Preview (Просмотр) конструктора.
Рассмотрим эти этапы более подробно.
Для открытия окна конструктора меню воспользуйтесь одним из следующих способов:
На экране открывается диалоговое окно New Menu (Новое меню), в котором предлагается два варианта меню (рис. 11.1).
Рис. 11.1. Диалоговое окно New Menu
Выберите тип создаваемого меню, нажав соответствующую кнопку. В результате запускается конструктор меню, а в основное меню Visual FoxPro добавляется новый пункт Menu (Меню) (рис. 11.2). Сначала рассмотрим создание меню в виде строки. Для этого выберите опцию Menu (Меню).
Рис. 11.2. Конструктор меню
Область конструктора меню, над которой размещены надписи Prompt (Приглашение), Result (Результат) и Options (Опции), предназначена для формирования меню.
В поле Prompt (Приглашение) можно ввести наименования пунктов меню. Раскрывающийся список Result (Результат) используется для указания типа пункта меню. Кнопка Options (Опции) открывает диалоговое окно Prompt Options (Опции элемента меню), в котором можно определить дополнительные параметры данного элемента меню ("горячие" клавиши, сообщение, отображаемое в строке состояния при выборе пункта меню, и т. д.). В списке Menu level (Уровень меню) указывается уровень текущего меню.
Слева в конструкторе меню размещены кнопки (табл. 11.1).
Таблица 11.1. Назначение кнопок конструктора меню
Кнопка | Назначение |
Insert (Вставить) | Добавляет в меню новый пункт |
Insert Bar (Вставить команды системного меню) | Открывает диалоговое окно Insert System Menu Bar, содержащее команды системного меню Visual FoxPro, позволяя разместить их в создаваемом пользовательском меню |
Delete (Удалить) | Удаляет текущий пункт меню |
Preview (Просмотр) | Размещает создаваемое меню на экране, позволяя просмотреть его внешний вид |
После того как вы открыли конструктор, можно приступать к созданию меню. Для этого выполните следующие действия:
Таблица 11.2. Типы пунктов меню
Тип меню | Назначение |
Command (Команда) | При выборе пункта меню данного типа будет выполняться связанная с ним команда |
Pad Name (Наименование строки меню) | При выборе пункта меню никаких действий выполняться не будет. Как правило, используется в качестве дополнительного пояснения к меню |
Submenu (Подменю) | При выборе пункта меню раскрывается связанное с данным пунктом ниспадающее меню |
Procedure (Процедура) | При выборе пункта меню вызывается процедура, определенная для данного пункта меню |
Замечание
При использовании значения типа Command (Команда) с правой стороны появляется поле для ввода команды, выполняемой при выборе данного пункта меню. Это может быть, например, команда вызова формы или формирования отчета. Если из списка Result (Результат) вы выбрали значение Procedure (Процедура) или Submenu (Подменю), в окне конструктора правее описания типа пункта меню появляется кнопка Create (Создать). При нажатии на эту кнопку вы переходите, соответственно, в окно создания процедуры или в окно создания ниспадающего меню для выбранного пункта меню.
Рис. 11.3. Основное меню приложения
Рис. 11.4. Просмотр созданного меню приложения
Для выбора пункта меню используются клавиши-стрелки или мышь. Помимо этого, вы можете определить для пункта меню "горячую" клавишу, нажатие которой вместе с клавишей <Alt> активизирует этот пункт.
Для создания "горячей" клавиши, предоставляющей пользователю возможность ускоренного выбора пункта меню, необходимо включить в его имя перед активизирующим символом следующие символы \<. В качестве "горячей" клавиши можно использовать первый символ имени пункта, что, конечно, более предпочтительно, а также и любой другой символ из его имени. Символы, используемые в качестве "горячей" клавиши, выделяются в строке меню подчеркиванием.
"Горячие" клавиши для пунктов меню назначаются Visual FoxPro по умолчанию. Для их создания используются первые буквы элементов строки меню. Если два элемента вашего меню начинаются с одинаковой буквы, то обоим элементам строки меню в качестве "горячей" клавиши назначается одинаковый символ. В этом случае вам нужно переопределить "горячую" клавишу для одного из элементов строки меню.
Для облегчения назначения "горячих" клавиш можно использовать искусственный прием: перед именами пунктов меню разместить цифры и их использовать в качестве "горячих" клавиш (рис. 11.5).
Рис, 11.5. Создание строки меню с назначенными "горячими" клавишами
Задание параметров пункта меню в диалоговом окне Prompt Options
Для задания параметров пункта меню используется диалоговое окно Prompt Options (Опции элемента меню) (рис. 11.6). Для открытия этого окна установите в конструкторе курсор на пункт меню и нажмите появившуюся в строке кнопку Options (Опции).
Рис. 11.6. Диалоговое окно Prompt Options
В диалоговом окне Prompt Options (Опции элемента меню) содержится область Shortcut (Всплывающее меню) для задания клавиш быстрого вызова, а также поля ввода (табл. 11.3).
Таблица 11.3. Назначение полей ввода диалогового окна Prompt Options
Поле ввода | Назначение |
Skip For {Пропустить для) | Позволяет заблокировать пункт меню |
Message (Сообщение) | Позволяет задать сообщение, которое будет отображаться в строке состояния при выборе пункта меню |
Pad Name (Имя пункта меню) | Задает имя пункта меню |
Comment (Комментарий) | Задает комментарий к пункту меню |
Область Negotiate (Соглашение) содержит два раскрывающихся списка, имеющих следующее назначение:
Определение клавиш быстрого вызова пунктов меню
Помимо "горячих" клавиш, в создании которых используются только символы текста меню, в Visual FoxPro можно определить для каждого пункта меню клавиши быстрого вызова пунктов меню. В качестве такой клавиши могут использоваться символы, функциональные клавиши, комбинации клавиш. Примером клавиши ускоренного действия в программе Visual FoxPro является функциональная клавиша <F1>, используемая для вызова справочной системы. При нажатии на клавишу, определенную в качестве клавиши ускоренного действия, активизируется связанный с ней пункт меню без предварительного отображения самого меню.
Рассмотрим последовательность действий по определению клавиши быстрого вызова пункта меню справочной системы приложения.
Рис. 11.7. Определение клавиши быстрого вызова для пункта меню Справка
Формирование сообщения для пункта меню
Используя поле ввода Message (Сообщение) диалогового окна Prompt Options (Опции элемента меню), вы можете определить для пункта меню сообщение, которое будет отображаться в строке состояния при установке на него курсора. В качестве сообщения можно использовать не только строку текста, но и произвольное символьное выражение. В этом случае нажмите кнопку вызова конструктора выражения, расположенную с правой стороны поля, и в открывшемся диалоговом окне Expression Builder (Построитель выражения) создайте необходимое выражение.
Определим сообщение для пункта меню Справка. Для этого выполните следующие действия:
Замечание
Введенную строку текста не забудьте поместить в кавычки.
Рис. 11.8. Определение сообщения для пункта меню Справка
Аналогичным образом вы можете определить сообщения для остальных пунктов меню. На рис. 11.9 показан результат вывода сообщения в строке состояния.
Рис. 11.9. Отображение в строке состояния сообщения для пункта меню
Блокирование команд меню
Иногда возникает необходимость сделать какой-либо пункт меню недоступным для пользователя. Например, вы можете использовать условие блокировки для ограничения доступа определенных пользователей к отдельным пунктам меню. Или рассмотрим еще такую ситуацию. Ваша система уже эксплуатируется пользователями, но не все пункты меню завершены. При их выборе на экране появляются сообщения об ошибках. Пользователь начинает нервничать. В этом случае вы можете задать для незавершенных пунктов меню условие блокировки. Чтобы определить условия блокировки, выполните следующие действия:
Замечание
Задавая условия блокировки, вы можете ввести любое допустимое логическое выражение. При вводе простого выражения, не требующего использования функций конструктора выражений, введите формируемое выражение в поле Skip For (Пропустить для) диалогового окна Prompt Options (Опции элемента меню).
Когда значение выражения, заданное в условии блокировки, является истинным, пункт меню становится недоступным.
В режиме просмотра вы не увидите, что пункт меню заблокирован. Чтобы убедиться в правильно созданной блокировке, вам необходимо созданное в конструкторе меню сгенерировать и полученную в результате программу запустить на выполнение.
Присвоение имени пункту меню
По умолчанию при генерации программы Visual FoxPro в качестве имен пунктов меню создает уникальные имена. Для повышения читабельности программы можно определить эти имена явным образом, используя поле ввода Pad Name (Имя пункта меню) диалогового окна Prompt Options (Опции элемента меню).
На рис. 11.10 приведено диалоговое окно Prompt Options (Опции элемента меню) для пункта меню Справка с определенным для него именем пункта меню, сообщением в строке состояния и условием блокировки.
Рис. 11.10. Диалоговое окно Prompt Options для пункта меню Справка
Основное назначение пункта меню — выполнять определенное для него действие. Результат выбора пункта меню задается его типом (табл. 11.4).
Таблица 11.4. Типы пункта меню
Тип пункта меню | Действие |
Submenu (Подменю) | Раскрывается связанное с данным пунктом меню ниспадающее подменю |
Procedure (Процедура) | Выполняется процедура, определенная в конструкторе меню |
Command (Команда) | Выполняется команда, расположенная в поле рядом с типом пункта меню |
Команда
Чтобы определить команду, которая будет выполняться при выборе пункта меню, необходимо выполнить следующие действия:
Обычно команды используются для вызова форм, отчетов, пользовательских процедур. Например, для запуска формы ввода списка клиентов достаточно ввести следующую команду:
DO FORM Client
Процедура
В том случае, если при выборе пункта меню должна выполняться некоторая последовательность команд, вам необходимо в столбце Result (Результат) окна конструктора выбрать для пункта меню тип Procedure (Процедура) и определить требуемые команды.
Рис. 11.11. Окно редактирования процедуры для пункта меню Справка
Для этого нажмите кнопку Create (Создать) и в открывшемся окне редактирования процедуры определите фрагмент кода, связанный с элементом строки меню. Например, для пункта меню Справка вы можете указать тип Procedure (Процедура) и в окне создания процедуры задать имя файла справки и команду вызова справочной системы (рис. 11.11).
При вводе процедуры не используйте команду PROCEDURE, т. к. Visual FoxPro генерирует эту команду автоматически.
Во время генерации для каждой процедуры, включенной в меню, Visual FoxPro создает уникальное имя и включает его вместе с указанием местонахождения процедуры в код, связанный с соответствующим элементом строки меню.
Замечание
После определения текста процедуры наименование кнопки Create (Создать) изменяется на Edit (Правка).
Определение подменю
Большинство команд меню создаваемого приложения открывает подменю. Например, пункт меню Покупатели должен содержать команды Ввод данных, Отчеты и Запросы. Для создания данного подменю выполните следующие действия:
Замечание
Параметры пунктов подменю определяются аналогично определению пунктов строки меню. Для перехода в меню верхнего уровня используйте список Menu Level.
Рис. 11.12. Окно создания подменю
Для улучшения внешнего вида, а также для объединения в группы схожие по смыслу команды в меню можно использовать разделительные линии. Разделительные линии представляют собой пункт меню, в котором в поле ввода Prompt (Приглашение) вместо наименования пункта вводятся символы \-. Рассмотрим создание разделительных линий в подменю Покупатели. Для этого выполните следующие действия:
Рис. 11.13. Создание разделителей в подменю Покупатели
Для строки меню вы можете определить процедуры, которые будут выполняться перед запуском меню, а также после выхода из него. Кроме того, вы можете указать месторасположение строки меню. Для этого используется диалоговое окно General Options (Основные параметры) (рис. 11.14), открываемое при выборе команды General Options (Основные параметры) из меню View (Вид).
В группе Location (Размещение) этого диалогового окна можно выбрать один из вариантов размещения строки созданного меню (табл. 11.5). В поле Procedure (Процедура) вы можете ввести фрагмент программы, которая будет выполняться при активизации строки меню.
Рис. 11.14. Диалоговое окно 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.
Сохранение, генерация и запуск меню
Для сохранения созданного меню выберите команду Save as (Сохранить как) в меню File (Файл). В открывшемся диалоговом окне Save as (Сохранить как) из списка Папка выберите папку, в которой вы предполагаете сохранить файл, откройте ее, в поле Save Menu (Сохранить меню) введите имя сохраняемого меню. В заключение нажмите кнопку Сохранить.
С помощью кнопки Preview (Просмотр) окна конструктора меню можно просмотреть внешний вид создаваемого меню, но нельзя его активизировать. Чтобы можно было использовать меню в приложениях, его необходимо предварительно сгенерировать. Для этого выполните следующие действия:
Рис. 11.15. Диалоговое окно Generate Menu
После завершения генерации можно запустить программу меню на выполнение. Для этого выполните одно из следующих действий.
На экране появится созданное вами меню, которое заменит основное меню Visual FoxPro, если в диалоговом окне General Options (Основные параметры) перед генерацией была установлена опция Replace (Замещать).
Совет
Если вам не удается восстановить на экране системное меню Visual FoxPro, введите в командном окне команду SET SYSMENU то DEFAULT.
В Visual FoxPro 7.0 имеется возможность создания всплывающего меню средствами конструктора меню.
Способ создания меню данного типа аналогичен созданию горизонтального меню в виде строки. Для этого меню, как и для обычного, можно определить оперативные клавиши и опции, устанавливаемые в диалоговом окне Prompt Options (Опции элемента меню).
Чтобы создать всплывающее меню, выполните следующую последовательность действий:
Рис. 11.16. Создание меню типа Shortcut
Рис. 11.17. Меню типа Shortcut
Когда тот или иной физик использует понятие "физический вакуум", он либо не понимает абсурдности этого термина, либо лукавит, являясь скрытым или явным приверженцем релятивистской идеологии.
Понять абсурдность этого понятия легче всего обратившись к истокам его возникновения. Рождено оно было Полем Дираком в 1930-х, когда стало ясно, что отрицание эфира в чистом виде, как это делал великий математик, но посредственный физик Анри Пуанкаре, уже нельзя. Слишком много фактов противоречит этому.
Для защиты релятивизма Поль Дирак ввел афизическое и алогичное понятие отрицательной энергии, а затем и существование "моря" двух компенсирующих друг друга энергий в вакууме - положительной и отрицательной, а также "моря" компенсирующих друг друга частиц - виртуальных (то есть кажущихся) электронов и позитронов в вакууме.
Однако такая постановка является внутренне противоречивой (виртуальные частицы ненаблюдаемы и их по произволу можно считать в одном случае отсутствующими, а в другом - присутствующими) и противоречащей релятивизму (то есть отрицанию эфира, так как при наличии таких частиц в вакууме релятивизм уже просто невозможен). Подробнее читайте в FAQ по эфирной физике.