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

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

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

раметра <команда>. Полная отмена ON - команды осуществляется командой такого же типа,

но без параметров.

Хотя <команда> может быть командой любого типа, обычно эта команда DO вызова процедуры / программы, после завершения которой осуществляется возврат па команду, сле-

дующую за той, от которой произошел вызов. Исключение составляют процедуры, завер-

шающиеся командой RETRY. В этом случае произойдет возврат на команду, где было вы-

звано прерывание.

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

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

Команды вида ON KEY делают активной только одну клавишу, a ON KEY LABEL

может активизировать любое число клавиш одновременно, при этом клавиши активизируют-

ся по их именам, последняя команда применяется наиболее часто. Например

ON KEY LABEL ctrl+A DO prog

- при нажатии ctrl+A будет выполняться программа prog.

Клавиши, определенные в команде ON KEY LABEL, остаются (до отмены) активны-

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

сразу все командой

ON KEY

или некоторые

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

при необходимости эти клавиши можно включать снова. В этом случае удобно поль-

зоваться следующими двумя командами:

PUSH KEY [CLEAR]

POP KEY [ALL]

Команда PUSH KEY сохраняет все текущие клавишные назначения, сделанные ко-

мандами ON KEY LABEL в стеке памяти компьютера, одновременно отменяя их действие,

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

димости они могут быть извлечены в обратном порядке командой POP KEY и снова сделаны активными. Если задана опция: ALL, стек очищается и отменяются все текущие назначения.

Текущие клавишные назначения могут быть просмотрены командами DISPLAY/LIST STATUS или с помощью функции ON ( ).

П р и м е р. Пусть производится назначение на клавиши F3 и F5 сначала команд

CLEAR и DIR, а затем на F5 команды DO KADR. Эти назначения последовательно сохраня-

ются в стеке командами PUSH KEY и извлекаются из пего командами POP KEY. Активные назначения предъявляются функцией ON ( ). Результаты ее возможного применения выве-

дешь в два столбца после знаков "&&". В левом столбце назначение клавиши F3, в правом - F5.

POP KEY ALL && Сброс клавиш, очистка стека

POP KEY ALL && Сброс клавиш, очистка стека

ON KEY LABEL F3 CLEAR

ON KEY LABEL F5 DIR

? ON ('KEY', 'F3'),ON ('KEY', 'F5') && CLEAR, DIR PUSH KEY CLEAR

ON KEY LABEL F5 DO kadr &&, DO kadr

PUSH KEY CLEAR && POP KEY &&, DO kadr

POP KEY && CLEAR, DIR

POP KEY &&

Использование функций при создании клавишного меню

При создании клавишного меню используются следующие функции: INKEY( ), LASTKEY( ), READKEY( ).

Рассмотрим подробнее использование этих функций:

INKEY([[< выр N >][,<вырС>]])

выдает ASCII код (от 0 до 255) последней клавиши, нажатой па клавиатуре, если никакая клавиша на была нажата, то вырабатывается 0. <выр N> указывает число секунд, которое ожидается нажатие следующей клавиши, если <выр N>=0, то ожидание будет бесконечно.

Если <выр N> отсутствует, то функция срабатывает немедленно, <выр С> включает/ отклю-

чает курсор, для включения указывается символ S, а для отключения -Н.

Функция LAST KEY () не позволяет в отличие от функции INKEY() организовать ожидание, она возвращает ASCII код последней нажатой клавиши. Возвращаемые коды сов-

падают с кодами функции INKEY (). READKEY ()

- выдает код клавиши нажатой для выхода из команды редактирования READ. Нажа-

той клавише соответствует 2 кода, в числителе указывается код, соответствующий выходу без изменения данных, а в знаменателе с изменением.

Приведем пример меню с использованием функциональных клавиш: ? 'F2 - удаление

F3 - возврат F4 - выход'

x=INKEY(0) DO CASE

CASE LASTKEY( ) =-3 && Нажата клавиша F2

CASE LASTKEY( ) =-4 && Нажата клавише F3

ENDCASE

Здесь сначала демонстрируется текст меню, а затем код нажатой клавиши запомина-

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

тельно необходимо организовать паузу, это можно сделать как в описанном выше примере с помощью функции INKEY(), а также с помощью команды WAIT (лучше с опцией

WINDOW), например:

WAIT 'Esc - отказ, ПРОДОЛЖЕНИЕ - любая клавиша' WINDOW

IF LASTKEY( )=27

RETURN

ENDIF

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

При нажатии клавиши Escape происходит выход из процедуры (RETURN). Рассмотрим еще один пример:

Предположим, что в зависимости от содержимого текущей записи, которая предъяв-

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

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

ны;

продолжить естественный ход выполнения программы. Схема такой программы при-

ведена ниже (команды экранного ввода-вывода опущены).

DO WHILE. Т.

<Экран ввода - редактирования>

@ 20,1 SAY 'Ctrl-Home - удаление, Ctrl-PgUp - дальше, Ctrl-End -

конец' READ

c-READKEY ( ) && c=LASTKEY( )

DO CASE CASE c=33.0R.c=289 && c=29

DELETE

CASE c=34.0R.c=290 && c=31

SKIP

CASE c=270 && c-23. AND. UPDATE( )

EXIT

ENDCASE

ENDDO

Внижней части экрана ввода изображено меню, в котором указаны задействованные

внем клавиши. После выхода из экрана обычным образом или нажатием одной из перечис-

ленных комбинаций клавиш анализируется функция READKEY( ). Если она возвращает зна-

чение 33 или 289, значит, были нажаты клавиши Ctrl-Home, если 34 или 290 -значит, CtrlPgUp, если 270 - значит, Ctrl-End и данные были изменены. В зависимости от этого далее выполняются различные действия по обработке данных. Однако свободных клавиш выхода из команд редактирования, которые можно использовать таким образом, очень немного.

Организация такого интерфейса обязательно сопровождается циклом DO WHILE

...ENDDO для восстановления содержимого окна редактирования после того, как в нем были сделаны изменения.

ИСПОЛЬЗОВАНИЕ ФУНКЦИОНАЛЬНЫХ КЛАВИШ

Любая функциональная клавиша в FoxPro связана с выполнением некоторой коман-

ды, так нажатие F3 вызывает команду LIST. Чтобы подавить выполнение команд, предпи-

санных к функциональным клавишам, необходимо воспользоваться командой CLEAR MACROS. Этой же командой отменяются и все программные назначения F-клавиш

Индивидуальная отмена назначений может быть выполнена командой SET FUNCTION <клавиша> ТО

без указания параметра. Команда

SET FUNCTION <вырN>/<имя клавиши> ТО [<вырС>]

закрепляет за функциональной клавишей, указанной номером <вырN> или <именем клавиши>, определенное выражение символьного типа. Включение в пего знака ";" будет соответствовать нажатию клавиши Enter. Допускается использование комбинации функцио-

нальных клавиш с клавишами Ctrl и Shift.

Например, команда

SET FUNCTION Ctrl+F4 TO 'do kadr:

повлечет выполнение программы KADR. PRG при нажатии клавиш Ctrl-F4. Здесь мо-

жет быть задано сразу несколько команд FoxPro, перечисленных через знак ";". Такое закре-

пление последовательности команд (макрокоманд) может быть полезно, но только при рабо-

те в системном интерфейсе через командное окно.

Хотя выражение после слова ТО должно быть символьного типа, если оно имеет чи-

словой вид, оно правильно принимается командами ввода @. ..GET. Например, в следующем фрагменте программы нажатие F7 влечет занесение в числовую переменную R числа

8145.86. Знак ";" для числовых переменных не распознается. Такое закрепление может быть удобно для ввода часто повторяющихся данных.

SET FUNCTION F7 ТО '8145.86'

@ 5,6 GET r DEFAULT О READ

ЛИТЕРАТУРА

1.Справочное руководство по FoxPro 2.0. В 3-х т.-М.: «И.В.К.-Софт», 1992.- 632 с.

2.Попов А.А. Программирование в СУБД FoxPro 2.0.- М.: Радио и связь, 1994.- 315

с.

3. Пинтер Лес. FoxPro 2.0. Application Programming.- M.: Издательство ЭДЭЛЬ, 1994.-

384 с.

4. Ремеев В. FoxPro версия 2.5 для MS DOS: Описание команд и функций.- М.: Мист-

раль, 1994.- 304 с.

5. Астахова И.Ф., Боровских А.В., Подболотов Б.Н. Лекции про FoxPro. Воронеж: Из-

во ТОО МП «Элист», 1996.- 199 с.

УДК 519

Начальный курс по FoxPro: Учеб. пособие / И.Н. Гурова, М.Л. Лапшина.

Воронеж. гос. ун-т: Воронеж, 1998. 60 с.

ISBN 5-230-04526-4

Пособие представляет собой курс для начинающих по FoxPro . Оно содержит матери-

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

пользования индексов, описание системного интерфейса FoxPro. Оно может быть использо-

вано для студентов всех специальностей и аспирантов.

Библиогр. 5 назв.

Печатается по решению редакционно-издательского совета Воронежского государст-

венного технического университета

Научный редактор:

канд. физико-математических наук И.Л.Батаронов

Рецензенты:

кафедра вычислительной техники Воронежской лесотехнической академии;

доктор технических наук В.С.Петровский

 

С

Гурова И.Н., Лапшина М.Л.. 1998

ISBN 5-230-04526-4

С

Оформление. Воронежский госу-

 

 

дарственный технический универ-

 

 

ситет, 1998