Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Учебное пособие 487

.pdf
Скачиваний:
4
Добавлен:
30.04.2022
Размер:
441.77 Кб
Скачать

трастным светом. Выбор необходимой позиции меню производится нажатием клавиши ENTER.

Не следует, однако, думать, что достаточно нажать Enter и машина что-то сделает.

Здесь следует отметить главный принцип работы меню: выбор того или иного пункта должен быть где-то зафиксирован! В LIGHTBAR-меню это осуществляется следующим образом:

заводится числовая переменная, в которой запоминается номер того пункта (а нумеруются они в том порядке, в котором в программе стояли команды PROMPT), в котором Вы находи-

лись, когда нажали Enter. Нажатие ESC трактуется как пункт с номером 0 и, соответственно,

в переменную заносится нулевое значение. Впоследствии, анализируя содержимое этой пе-

ременной, в программе уже можно предусматривать те или иные действия.

Само запоминание осуществляется командой

MENU ТО < переменная >

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

Отметим еще один момент: выбор любого пункта или нажатие ESC влечет заверше-

ние работы меню и удаление соответствующих объектов с экрана. Для повторного использо-

вания нужно снова написать такой же блок, а для постоянного обычно используют циклы,

внутри которых и пишется блок команд PROMPT-MENU. Построим меню с пунктами

1."Загрузка баз данных"

2."Рассылка"

3."Заявки"

4."Научная программа"

5."Окончание работы"

ивыдачей дополнительных сообщений для пунктов меню "Рассылка", "Заявки", "Научная программа"

CLEAR

SET MESSAGE ТО 18 CENTER

@5,20 SAY 'СИСТЕМА ОБСЛУЖИВАНИЯ НАУЧНЫХ КОНФЕРЕНЦИЙ'

@7,31 PROMPT 'Загрузка баз данных'

@9,36 PROMPT 'Рассылка' MESSAGE 'Создание и корректировка списка рас-

сылки информации'

@11,37 PROMPT 'Заявки' MESSAGE 'Обработка поступивших заявок'

@13,31 PROMPT 'Научная программа' MESSAGE 'Формирование программы работы секций'

@15,32 PROMPT 'Окончание работы'

MENU ТО R

SET MESSAGE ТО

В примере дополнительные сообщения будут выведены в центре 16-строки. При вы-

боре пользователем строки КОНЕЦ РАБОТЫ переменная R получит значение 1, при выборе строки ДОПОЛНЕНИЕ ДАННЫХ-2 и т.д.

dBASE-МЕНЮ

DBASE-меню можно создавать двумя способами: один из способовпрограммный,

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

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

Поэтому мы рассмотрим оба эти способа создания DBASE-меню.

Рассмотрим сначала программный способ создания DBASE-меню, для этого необхо-

димо прежде всего

-создать содержание меню, то есть описать все пункты, из которых оно будет состо-

ять, для этого существуют специальные команды, которые будут описаны ниже;

-провести активацию меню, то есть выполнить команды, которые позволяют предста-

вить это меню на экран и работать с ним;

-при необходимости надо провести деактивацию меню, то есть убрать меню с экрана,

при этом сохранить его в памяти, а иногда необходимо удалить его из памяти, последнее обстоятельство возникает с ограниченными способностями ЭВМ, по при этом, как правило,

определение содержания меню помещают в отдельную процедуру, чтобы при необходимо-

сти можно было быстро его восстановить. DBASE-меню состоит из двух типов элементар-

ных меню:

1.Горизонтального (BAR-меню)

2.Вертикального ("всплывающего" POPUP-меню).

Рассмотрим сначала определение BAR-меню

BAR-меню - это горизонтальное меню, при его создании используются команды DEFINE MENU, которая определяет имя меню, DEFINE PAD, которая определяет его элементы

(называемые PAD-пункты), ON SELECTION PAD и ON PAD, которые определяют реакцию на нажатие клавиши ENTER.

Описанное с помощью этих команд меню может быть вызвано в любом месте про-

граммы командой ACTIVATE MENU, а отключается командой DEACTIVATE MENU или

нажатием клавиши Esc. Из памяти BAR-меню удаляется командами CLEAR MENU или RELEASE MENU. Приведем более полные варианты команд определения содержания меню:

DEFINE MENU <имя меню > [BAR [AT LINE <варN1>]] [IN [WINDOW] <окно>/IN SCREEN] [KEY <имя клавиши>] [MARK <вырС1>] [MESSAGE <вырС2>]

[COLOR <список цветовых пар>/COLOR SCHEME <expN2>]

Эта команда определяет имя BAR-меню, определяет его положение и вид. Параметр

BAR указывает на то, что, если меню не уместится по ширине экрана/окна, то оно все равно будет доступно. Опция AT LINE <варN> определяет строку, на которой появится меню (по умолчанию -нулевая строка). Меню с опцией BAR имеет свойства системного меню FoxPro и

появляется в строке системного меню. Оно допускает назначение KEY-клавиш для своих

PAD-пунктов. Выбор в таком меню завершается его деактивацией.

Определение PAD пунктов и их заполнение происходит с помощью следующей ко-

манды:

DEFINE PAD <имя PAD-элемента меню> OF <имя BAR-меню>

PROMPT < вырС1> [ <y, x>] [MESSAGE < вырС2>] [MARK <вырСЗ>] [KEY <имя клавиши> [,<вырС4>]]

[SKIP [FOR <вырL>]]

[COLOR <список цветных пар>/COLOR SCHEME <варN>]

Команда дает имя PAD-элементу меню, указывает на его принадлежность какому-то

BAR-меню, определяет его отображение (вырС1) и место (Y, X) на экране. Если параметр AT

опущен, все PAD-элементы меню будут располагаться в пулевой строке экрана слева напра-

во.

ВЕРТИКАЛЬНОЕ POPUP-МЕНЮ

Это меню имеет и другое название "всплывающее", потому что оно предъявляется по-

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

DEFINE POPUP. Меню допускает выбор по первой букве. Определение меню происходит с помощью команды DEFINE POPUP. Параметры PROMPT FIELD / FILES/ STRUCTURE оп-

ределяют откуда берется содержимое меню, в этой команде задается имя и "горячие" клави-

ши для выбора пунктов меню. Эта команда имеет следующий формат:

DEFINE РОРUP<POPUP-меню>

[FROM<Y1>,<X1>] [TO<Y2>,<X2>] [PROMPT FIELD <выр>/

[PROMPT FILES [LIKE<маска>]/

PROMPT STRUCTURE] [IN [WINDOW]<окно>/IN SCREEN]

[FOOTER<варCI>] [КЕУ<имя клавиши>] [MARGIN] [MARK < вырС2>]

[MULTI [MESSAGE <вырC3>] [SCROLL] [TITLE<варC4>] [SHADOW]

[COLOR SCHEME<варN>/COLOR<список цветовых пар>]

где <POPUP-меню>

-имя POPUP-меню, которое дает программист,

FROM <YI, XI>TO<Y2, X2>

- координаты левого верхнего и правого нижнего углов POPUP-меню в окне/экране.

Если параметры Y2. X2 не заданы, ширина меню будет определена по максимальному эле-

менту, а высота - во весь экран или по числу элементов меню (если их меньше). Если отсут-

ствуют первые координаты меню, то Y1=0 и Х1=0 или же оно располагается непосредствен-

но под соответствующим PAD-пунктом более старшего BAR-меню (если есть).

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

FIELD - меню из записей БД

DEFINE POPUP PROMPT FILES - меню из файлов

STRUCTURE - меню из структуры БД

PROMPT FIELD <выр>

- элементами меню будут записи из открытой базы данных, содержащие заданное по-

ле-выражение. <Выражение> может содержать и не одно только поле, а несколько, соеди-

ненных знаком "+", в том числе и из других открытых баз. В этом случае они должны быть приведены к одному обычно символьному типу. Допускается использовать и функции, в том числе ПФ. Это удобно, если мы хотим видеть не просто перечень выбираемых объектов, по и результаты какого-то их анализа. Разрешается использовать в меню и поля из базы данных,

находящейся в другой рабочей области. Тогда имя поля должно быть составным- с включе-

нием имени области. Предельный размер базы, которая может быть вызвана в POPUP-меню,

32767 записей.

PROMPT FILES [LIKE <маска>]

- элементами будут названия файлов, возможно, ограниченные <маской>.

Например, следующая команда создаст описание меню с именем TEXT, которое ото-

бразит имена всех файлов с расширением ТХТ. Вызываться такое меню может нажатием клавиш Alt-5.

DEFINE POPUP text PROMPT FILES LIKE *. txt KEY ALT+5

PROMPT STRUCTURE

-в качестве элементов меню будет предъявлена структура открытой базы данных. Ко-

манды

USE address

DEFINE POPUP add PROMPT STRUCTURE

определяют меню add, представляющее структуру базы ADDRESS. DBF.

FOOTER<âûðCI> и TITLE <вырС4>

- заголовки меню, располагаемые в центре нижней и верхней границ области меню.

MULTI

- устанавливает режим множественного отбора из меню. Когда пункт меню выбран,

слева появляется специальный знак (по умолчанию ромб). Если выбран еще другой пункт, то знак переносится туда. Если вы хотите пометить (выбрать) сразу несколько пунктов меню, то после того, как выбран какой-нибудь пункт и курсор передвинут к другому, следует, удержи-

вая клавишу Shift, нажать Enter/Space. Можно пометить сразу несколько смежных пунктов меню, если, нажав Shift на помеченной строке, двигать курсор с помощью клавиш со стрел-

ками. Можно пометить даже все строки меню, начиная от текущей, вверх/вниз, если нажать в этом случае клавишу PgUp/Pgdn (помечаются все видимые строки), Home/End (все строки до начала/ конца меню). Далее с помощью функции MRKBAR () можно будет определить,

какие именно пункты меню были отобраны. Этот режим не работает в POPUPменю, кото-

рые используют файлы (опции PROMPT FIELD/FILES/STRUCTURE). MARGIN

- устанавливает пробелы справа и слева от приглашений меню. Они могут понадо-

биться для вывода символа пометки строки меню и /или маркера текущего положения курсо-

ра в меню (опции SCROLL и MULTI). В противном случае указанные символы будут проек-

тироваться прямо на строки меню, затерев последний /первый символ строки меню.

SCROLL

- если пункты меню не умещаются в окне/экране, справа появляется вертикальная по-

лоса, па которой будет показан маркер текущего положения курсора. Это позволяет пользо-

вателю видеть свое положение среди данных, а также удобно при работе с мышью. Рассмот-

рим команды активации обоих типов меню.

Команда ON SELECTION POPUP определяет реакции на выбор этого меню с помо-

щью клавиши ENTER. Можно также выбрать отдельные строки меню и сделать вызов дру-

гих меню с помощью команд ON [SELECTION] BAR.

Следующая команда при любом выборе из BAR-меню реализует указанную <коман-

ду>:

ON SELECTION MENU <BAR-меню> [<команда>].

Если параметр <команда> опущен, назначение отменяется. Команда

ON SELECTION PAD <PAD-пункт> OF <BAR-меню> [<команда>] позволяет делать индивидуальные назначения команд на каждый <PAD пункт> из <BAR-меню>. Обычно это

<команды> DO вызова процедуры, где может быть установлено, какой именно был выбран

PAD-элемент. Выбор указанного пункта меню требует нажатия клавиши Enter.

Команда ON PAD назначает на <PAD-пункт меню> из главного горизонтального

<BAR-меню> дополнительное меню следующего уровня <POPUP-меню>/<BAR-меню1>:

ONPAD<PAD-пункт> OF <BAR-меню>

[ACTIVATE POPUP <POPUP-ìåíþ>/ACTIVATE MENU <BAR-ìåíþ1>]

Теперь, если вы выбираете пункт из горизонтального BAR-меню, будет автоматиче-

ски отображаться и соответствующее вспомогательное POPUP/ BAR-меню. Такое меню должно быть определено командой DEFINE POPUP-/MENU до того, как оно будет использо-

вано в команде ON PAD. Меню второго уровня может быть и другим горизонтальным меню

<BAR-меню1>, формирующим новые уровни системы сложного иерархического меню.

Вместо команды ON PAD можно использовать и команду ON SELECTION PAD, но при этом вспомогательное POPUP-меню будет появляться не автоматически, а при нажатии клавиши Enter/Space.

Для удаления связи всплывающего меню с <PAD-пунктом> меню можно ввести ко-

манду ON PAD без параметра ACTIVATE POPUP.

Функции выбора из меню. Для передачи в процедуры параметров могут использо-

ваться функции:

MENU ()

- возвращает имя активного BAR - меню.

PAD ( ) ..,

-возвращает имя PAD-пункта, выбранного в BAR-меню.

-PROMPT ( )

-возвращает строку-приглашение, содержащую в PAD-элементов, выбран-

ном в BAR-меню.

-CNTRAD (<BAR-меню>)

-возвращает количество PAD-пунктов в BAR-меню

-. MRKPAD ( <BAR-меню>, <PAD-пункт>)

-возвращает значение. Т., если <PAD-элемент> в <BAR-меню> помечен, и. F. - если нет.

ОТКЛЮЧЕНИЕ МЕНЮ.

Следующие команды деактивируют/удаляют меню:

DEACTIVATE MENU

-удаление активного bar-меню с экрана (но не из памяти), переход на команду, следующую за ACTIVATE MENU.

RELEASE MENUS [<список BAR-меню> [EXTENDED]]

-удаление всех или перечисленных неактивных BAR-меню с экрана и из памяти, включая и все подчиненные меню (если указана опция EXTENDED).

CLEAR MENUS

-удаление неактивных меню с экрана и из памяти.

RELEASE PAD <PAD-пункт>/ALL OF <имя BAR-меню>

- удаляет указанный PAD-пункт BAR-меню из памяти и с экрана/окна. Можно удалить

<ALL> и все PAD-пункты меню (кроме системного меню). Включение опции EXTENDED

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

HIDE MENU <список BAR-ìåíþ>/ALL [SAVE]

- удаляет указанные или все (ALL) горизонтальные меню с экрана/окна, по не из памяти.

Скрытые меню не равнозначно деактивизации. Такое меню может быть восстановлено с по-

мощью команд ACTIVATE/SHOW MENU. Образ меню остается на экране, если указана оп-

ция SAVE. Очистить экран можно командой CLEAR. Любое меню можно покинуть, нажав клавишу Escape или использовав команду DEACTIVATE. В этих случаях управление пере-

едается па команду, непосредственно следующую за командой ACTIVATE. Команда DEACTIVATE прекращает процедуру, в которой она находится, и никакие следующие команды

внутри процедуры выполняться не будут. Естественное завершение процедуры (по команде

RETURN или при достижении конца процедуры) возвращает нас к команде ACTIVATE. Рас-

смотрим пример создания следующего DBASE-меню:

 

 

Отчет

Просмотр

3апуск_ экрана

Выход

Поиск

PRINTER

Адреса

 

 

Профессора

FILE

Данные

 

 

Аспиранты

SCREEN

 

 

 

Кандидаты

 

 

 

 

Академики

 

 

 

 

Доктора

Это меню реализуется с помощью следующей программы: clear

deactivate menu myrnenu

define menu myrnenu bar at line I

DEFINE PAD oth OF myrnenu PROMPT "ОТЧЕТ" COLOR SCHEME 3 DEFINE PAD prs OF myrnenu PROMPT "ПРОСМОТР";

COLOR SCHEME 3

DEFINE PAD ekr OF myrnenu PROMPT "Запуск экрана";

COLOR SCHEME 3

DEFINE PAD vih OF myrnenu PROMPT "Выход" COLOR SCHEME 3 DEFINE PAD poi OF myrnenu PROMPT "Поиск" COLOR SCHEME 3

ON PAD oth OF myrnenu ACTIVATE POPUP othv

ON PAD prs OF myrnenu ACTIVATE POPUP prsv

ON SELECTION PAD ekr OF myrnenu do fff.spr

ON SELECTION PAD vih OF myrnenu do qqq.prg

ON PAD poi OF myrnenu ACTIVATE POPUP poiv

DEFINE POPUP othv MARGIN RELATIVE SHADOW;

COLOR SCHEME 4

DEFINE BAR I OF othv PROMPT "PRINTER"

DEFINE BAR 2 OF olhv PROMPT "FILE"

DEFINE BAR 3 OF othv PROMPT "SCRIN"

ON SELECTION BAR I OF othv do repp.prg

ON SELECTION BAR 2 OF othv do repf.prg

ON SELECTION BAR 3 OF othv do reps.prg

DEFINE POPUP prsv MARGIN RELATIVE SHADOW;

COLOR SCHEME 4

DEFINE BAR I OF prsv PROMPT "Адреса"

DEFINE BAR 2 OF prsv PROMPT "Данные"

ON SELECTION BAR I OF prsv do rl.prg

ON SELECTION BAR 2 OF prsv do r2.prg

DEFINE POPUP poiv MARGIN RELATIVE SHADOW;

COLOR SCHEME 4

DEFINE BAR I OF poiv PROMPT "Профессора"

DEFINE BAR 2 OF poiv PROMPT "Аспиранты"

DEFINE BAR 3 OF poiv PROMPT "Кандидаты"

DEFINE BAR 4 OF poiv PROMPT "Академики"

DEFINE BAR 5 OF poiv PROMPT "Доктора"

ON SELECTION BAR I OF poiv do p.prg ON SELECTION BAR 2 OF poiv do as.prg ON SELECTION BAR 3 OF poiv do k.prg ON SELECTION BAR 4 OF poiv do ak.prg ON SELECTION BAR 5 OF poiv do d.prg activate menu myrnenu nowait

Эта программа задает имя основного BAR-меню myrnenu, это меню состоит из сле-

дующих PAD-пунктов "ОТЧЕТ", "ПРОСМОТР", "Запуск экрана", "Выход", "Поиск". Выбор каждого из этих пунктов влечет некоторую последовательность действий. Выбор пункта

"ОТЧЕТ" влечет появление выпадающего POPUP-меню, состоящего из трех пунктов PRINTER, FILE, SCRIN, выбор пункта "ПОИСК" влечет появление POPUP-меню из пяти пунктов Профессора, Аспиранты, Кандидаты, Академики, Доктора. Активация каждого из этих пунк-

тов связана с запуском отдельного модуля, в котором находится процедура, реализующая эту последовательность действий. Модульность программы позволит без труда модернизировать это меню, придавая пунктам другие значения, при этом основную часть программы менять не надо, а меняться будет только отдельный модуль. Основные модули: p.prg, as.prg, k.prg, ak.prg, d.prg, a.prg, rl.prg, r2.prg, repp.prg, repf.prg, reps.prg, conf.prg. Процедура p.prg позволя-

ет выбрать профессоров в пункте меню ПОИСК, процедура as.prg позволяет реализовать по-

иск по аспирантам, процедура k.prg позволяет выбрать всех кандидатов, процедура ak.prg

выберет всех академиков, d.prg выберет всех докторов паук. Процедуры г1, г2 выбирают ра-

бочую область, где находятся открытые ранее две базы данных. Процедуры repp, repf, reps

позволяют сделать выбор для отчета либо с файлом, либо с принтером, либо па экран.

КЛАВИШНОЕ МЕНЮ

Клавишное меню подразумевает использование любых клавиш (функциональных и не функциональных) для придания им некоторой последовательности действий. Его использо-

вание очень удобно в экранах редактирования, созданных с помощью BROWSE, EDIT, CHANGE, READ, а также для обработке прерываний в программе. Клавишное меню позво-

ляет при возникновении прерывания организовать выполнение некоторой последовательно-

сти действий, не вызывающих перезагрузки всей системы, что часто случается при возник-

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

Рассмотрим команды, которые позволяют организовать связь программы с возмож-

ными прерываниями от ошибок (прерывание ERROR) и осуществить переход к выполнению некоторой <команды> при возникновении любой ошибки.

ON ERROR [<команда>]

-переход к выполнению <команды> при возникновении любой ошибки. ON READERROR [<команда>]

-делает то же, но при ошибке ввода. <Команда> выполняется в случае, если

введены неправильные данные или данные, выходящие за диапазон, заданные в

RANGE, или не отвечающие условию VALID.

ON ESCAPE [<команда>]

- переход к выполнению <команды> при нажатии клавиши Escape. Если SET ESCAPE OFF, команда не работает.

ON KEY [<команда>]

-то же, при нажатии любой клавиши. ON KEY =<âûðN> [<команда>]

-то же, но при нажатии клавиши с кодом, соответствующим <вырN>.

ON KEY [LABEL <имя клавиши>] [<команда>]

- то же, но при нажатии клавиши с указанным <именем>. Каждая ON -команда имеет силу до тех пор, пока не появится другая команда ON такого же типа с новым значением па-