Информационные системы

Информационные системы

Электронный учебник

Лабораторная работа №11

 

         Система меню приложения.

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

         Планирование приложения.

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

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

       Состав информации невозможно определить без учета конкретных задач, для решения которых предназначается создаваемое приложение. Поэтому одновременно с составом информации необходимо определить те средства, которые получит в свое распоряжение пользователь при работе с приложением.

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

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

       Создание строки меню.

       Примером строки меню является основное меню Visual FoxPro. Можно создать собственную строку меню, которая будет замещать основное меню Visual FoxPro или добавляться к нему. Для создания строки меню необходимо выполнить следующие действия:

1.       Открыть окно конструктора меню.

2.       Описать пункты меню.

3.       Отобразить строку меню на экране.

4.       Определить действия, выполняемые при выборе пункта меню.

         Окно конструктора меню.

         Для создания нового меню в конструкторе меню можно воспользоваться следующими способами:

 –     Выполнить команду меню File | New. В открывшемся окне диалога «New» установить опцию Menu и нажать кнопку New File.

 –     В окне проекта перейти на вкладку «Other» и выбрать группу «Menus». Затем нажать кнопку New окна проекта.

 –     Находясь в группе «Menus» окна проекта, нажать кнопку New на стандартной панели инструментов Visual FoxPro. В открывшемся окне диалога «New» установить опцию Menu и нажать кнопку

New File.

        Независимо от используемого способа на экране откроется окно диалога «New Menu», предлагающее два варианта создаваемого меню (рис. 1):

 –     Menu – создание меню в виде строки меню;

 –     Shortcut – создание всплывающего меню, в котором основные пункты меню расположены вертикально.

        При выборе любого из вариантов появляется окно конструктора меню, а в основном меню Visual FoxPro добавляется новый пункт Menu (рис. 2). Создание каждого из видов меню совершенно идентично, хотя каждый вид описывается разными командами Visual FoxPro. Различия эти можно заметить, только просмотрев тексты файлов .MPR, в которых хранятся тексты команд определения меню. Эти файлы следует редактировать только в крайнем случае, при необходимости дополнительной настройки создаваемого меню.

Рис. 1 Окно диалога «New Menu»

 

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

          На каждом шаге создания меню приложения можно просмотреть внешний вид меню с помощью кнопки Preview. Для использования в приложении описания меню, созданного с помощью конструктора меню,  необходимо предварительно сгенерировать из него программу на языке Visual FoxPro, используя команду Menu | Generate. Впоследствии можно запускать на выполнение результат генерации.

Рис. 2 Окно конструктора меню

 

Определение текстов пунктов строки меню.

      Для определения текстов пунктов строки меню необходимо нажать кнопку Insert и напечатать текст в поле Prompt. Для определения типа пункта меню следует выбрать требуемый элемент из списка Result.

Возможен выбор следующих типов пунктов меню:

Тип

Описание

Command

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

Pad Name

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

Submenu

При выборе пункта меню раскрывается связанное с данным пунктом ниспадающее меню.

Procedure

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

         Ввод команды, выполняемой при выборе пункта меню, осуществляется в поле, которое расположено правее описания типа пункта меню. При выборе типов Procedure и Submenu в окне конструктора правее описания типа пункта меню появляется кнопка Create, при нажатии на которую можно перейти в окно создания процедуры или начать создание ниспадающего меню для выбранного пункта меню.

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

         Для сохранения меню необходимо выполнить команду меню File | Save as. В открывшемся окне диалога «Save as» в поле Папка: требуется указать каталог, в который сохраняется файл, а в поле Save Menu ввести имя сохраняемого меню. Для сохранения служит кнопка Сохранить.

         Кнопка Preview окна конструктора меню позволяет просмотреть внешний вид создаваемого меню, но не позволяет его активизировать. Для использования меню в приложениях его необходимо предварительно сгенерировать. Для этого служит команда Menu | Generate. При этом открывается окно диалога «Generate Menu» (рис. 3). В поле ввода окна диалога необходимо ввести наименование файла, который будет создан в результате генерации. Используя кнопку можно выбрать путь и имя файла в стандартном окне Windows.

Рис. 3 Окно диалога «Generate Menu»

 

         Для запуска генерации описания служит кнопка Generate. После завершения генерации можно запустить программу меню. Для этого необходимо использовать команду меню Program | Do. В открывшемся окне диалога «Do» в случае необходимости следует выбрать каталог, содержащий файл меню, выбрать файл с расширением .MPR и нажать кнопку Do. На экране появится созданное меню, которое заменит основное меню Visual FoxPro. Для восстановления на экране системного меню в командном окне следует ввести команду SET SYSMENU TO DEFAULT.

         Определение оперативных клавиш для пунктов меню.

         Выбор пункта меню осуществляется при помощи клавиш–стрелок или мыши. Дополнительно можно определить символ из имени пункта меню, активизирующий этот пункт при нажатии комбинации Alt и указанного символа, называемого оперативной клавишей.

        Для предоставления пользователю возможности ускоренного выбора пункта меню необходимо включить в его имя перед активизирующим символом «\<». Обычно в качестве оперативной клавиши используется первый символ имени пункта, однако допустимо использование любого символа из текста пункта. Указанные символы отображаются в строке меню с подчеркиванием (рис. 4).

Рис. 4 Просмотр строки меню с назначенными оперативными клавишами

        Окно диалога «Prompt Options»

        При перемещении по пунктам меню в конструкторе меню в столбце Option появляется кнопка Options. При нажатии на данную кнопку на экране открывается окно диалога «Prompt Options» для данного пункта меню (рис. 5).

Рис. 5 Окно диалога «Prompt Options»

 

        В окне диалога содержится область «Shortcut», предназначенная для задания клавиш ускоренного действия. В данном окне диалога расположены также следующие поля ввода:

Поле ввода

Назначение

Skip For

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

Message

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

Pad Name

Задает имя пункта меню

Comment

Задает комментарий к пункту меню

 Опция Negotiate предназначена для определения места расположения заголовков меню при редактировании по месту OLE объектов.

 

Определение клавиш ускоренного действия.

         Оперативные клавиши позволяют использовать для ускоренного выбора пункта меню только символы текста пункта меню. В Visual FoxPro существует возможность определения для каждого пункта меню клавиши ускоренного действия. В качестве такой клавиши могут использоваться символы, функциональные клавиши, а также комбинации клавиш. При нажатии на эту клавишу активизируется связанный с ней пункт меню. Отличие между оперативными клавишами и клавишами ускоренного действия состоит в том, что с помощью клавиш ускоренного действия команда выбирается без предварительного отображения меню команд.  Для назначения клавиши ускоренного действия для пункта меню следует нажать кнопку Options данного пункта меню. На экране откроется окно диалога «Prompt Options» (рис. 5). В области «Shortcut» поле Key Label этого окна диалога содержит подсказку «press the key». Находясь в этом поле необходимо нажать клавишу или комбинацию клавиш, используемую в качестве клавиши ускоренного действия, и в поле появится метка, соответствующая нажатию клавиши. В поле ввода Key Text можно ввести краткое пояснение к определяемой клавише.

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

         Для каждого пункта меню можно определить сообщение, которое будет отображаться в строке состояния при установке курсора на этот пункт меню. Для определения сообщения используется поле ввода Message окна диалога «Prompt Options». Допускается использовать в качестве сообщения не только строку текста, но и произвольное символьное выражение. Для этого используется кнопка вызова с правой стороны поля и в окне диалога «Expression Builder» создается выражение.

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

        Иногда возникает необходимость сделать какой-либо пункт меню недоступным для пользователя. В этих случаях можно определить для пункта меню условие блокировки. Для определения условия блокировки используется поле ввода Skip For в окне диалога «Prompt Options». Для этого следует нажать кнопку вызова конструктора выражений с правой стороны поля и в окне диалога «Expression Builder» создать выражение. При определении условия блокировки можно вводить любое допустимое логическое выражение. Например, можно использовать условие блокировки для ограничения доступа определенных пользователей к отдельным пунктам меню. Visual FoxPro делает пункт меню недоступным, когда значение выражения, заданное в условии блокировки, является истинным. Допускается использовать в условиях блокировки глобальные переменные, определенные при запуске приложения.

          Определение имени пункта меню.

         По умолчанию при генерации программы Visual FoxPro в качестве имен пунктов меню создает уникальные имена. Для повышения читабельности программы рекомендуется определить эти имена явным образом, используя поле ввода Pad Name окна диалога «Prompt Options». Для предотвращения некорректной работы программы в дальнейшем следует задавать имена пунктов меню английскими буквами, но максимально приближенными к выполняемому действию.

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

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

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

Действие

Submenu

Раскрывает связанное с данным пунктом меню ниспадающее подменю

Procedure

Выполняется процедура, которая определяется в конструкторе меню

Command

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

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

Рис. 6 Определение действий для пункта меню с открытым окном редактирования процедуры

          Для создания подменю следует нажать кнопку Create выбранного пункта меню типа Submenu. На экране появится пустое окно конструктора меню, поле Menu Level которого содержит метку пункта строки меню (рис. 7). Пункты подменю определяются аналогично пунктам строки меню. Так как для редактирования основного меню и всех подменю применяется один конструктор меню, то для перехода между уровнями меню следует использовать поле Menu Level, а не закрывать окно конструктора меню.

Рис. 7 Окно диалога создания подменю

 

           Элементы создаваемого подменю можно разделить линиями, что позволяет улучшить внешний вид меню, объединить в группы схожие по смыслу команды. Разделительная линия представляет собой пункт меню, в котором в поле ввода Prompt вводятся символы «\-».

          Обработка меню в проекте, созданном мастером.

          При автоматическом создании проекта мастер сам делает черновой вариант главного меню. Остается только отредактировать его в соответствии с нуждами конкретной задачи. Однако следует помнить о том, что настройка и корректная обработка главного меню в приложении производится в главной программе проекта, которая также создается автоматически. Поэтому при изменении местоположения или имени главного меню придется соответствующим образом отредактировать строку в главной процедуре. Для этого во вкладке Code нужно выбрать главную процедуру, найти строку, определяющую главное меню приложения и изменить необходимые параметры. Например, по умолчанию в процедуре содержится строка:

goApp.cStartupMenu="menus\sales"

goApp – это объект, который собственно и является самим приложением;

cStartupMenu – это свойство объекта goApp, которое определяет главное меню приложения.

        Обратите внимание, что по правилам объектно-ориентированного программирования имя объекта и имя его свойства разделяются точкой. Строка "menus\sales" говорит о том, что в качестве главного меню используется меню, сохраненное под именем SALES в подкаталоге MENUS от текущего расположения проекта. Если меню сохранено в произвольном месте на диске, то следует указать полный путь к нему.

     

        Задание.

1.   Нарисуйте на бумажном носителе структуру меню Вашего проекта. Обоснуйте эту структуру и опишите подход, применяемый Вами при построении меню.

2.   Создайте меню для Вашего проекта в конструкторе меню. Отобразите в отчете тексты процедур и команды, используемые в меню.

3.   Просмотрите вид меню на экране, и отметьте поведение каждого пункта меню.

4.   Проверьте правильность указания главного меню приложения в главной процедуре. Отметьте команды, отвечающие за настройку главного меню приложения.

Пример выполнения работы