|
8.3.8. Извлечение клавишных назначений из оперативной памяти
POP KEY TALL]
Команда извлекает из стека клавишные назначения в обратном порядке и делает их активными. Если указана опиия ALL, то стек очищается, и отменяются все текущие назначения.
8.3.9. Изменение назначений функциональных клавиш
SET FUNCTION <Bbip.N> | <имя клавиши> ТО [ <выр.О ]
Команда закрепляет выражение символьного типа <выр.С> за функциональной клавишей. Клавишу задают либо порядковым номером <Bbip.N>, либо именем <имя клавиши>. Если символьное выражение <выр.С> содержит символ «;* (точка с запятой), то наличие этого символа соответствует нажатию клавиши Enter. Символьное выражение <выр.С> может содержать несколько команд, раэдслсшшх символом «;*. Если в символьное выражение <выр.С> будет помешено число (символ «;* в этом случае игнорируется), то это число правильно определяется командой ввода @ GET В Симени клавиши> при задании имени клавиши допускается использование комбинании функциональных клавиш со специальными клавишами Shift и Ctrl.
8.3.10. Отмена назначений функциональных клавиш
CLEAR MACROS
Команда отменяет все назначения как пользовательские, так и системные за функциональными клавишами.
8.3.11. Отмена назначения конкретной функциональной клавиши
SET FUNCTION <имя клавиши ТО
Для просмотра текущих клавишных назначений следует использовать команду DISPLAY | LIST STATUS или функцию ON().
При создании клавишных меню можно использовать также следующие клавишные функции.
8.3.12. Определение кода нажатой клавиши
INKEY([ <Bbip.N> 1 [, <выр.О ])
Функция возвращает ASCII-код последней нажатой клавиши. Если нажатия клавиши не было, то функция возвращает 0 (ноль). Параметр <выр.Ы> задает время ожидания в секундах до нажатия клавиши (или задание временного интервала — паузы). Если <выр.Ы>=0, то задано неограниченное время ожидания нажатия клавиши. Если параметр <выр.1М> не указан, то функция выполняется немедленно. Параметр <выр.С> управляет включением/выключением курсора и фиксацией факта нажатия кнопки мыши. Параметр <выр.С> может содержать одну из констант или сочетание констант:
S — включить курсор;
Н — выключить курсор;
М — контроль нажатия кнопки мыши (при этом возвращается значение 151).
8.3.13. Определение кода нажатой клавиши и направление кода в буфер
LASTKEYO
При нажатии клавиш их коды заносятся в буфер клавиатуры. При нажатии клавиш управления (Enter, Tab и т. д.) содержимое буфера переносится в оперативную память. Код последней нажатой клавиши, кроме того, переносится в клавишную ячейку.
Функция LASTKEYO работает только с клавишной ячейкой.
Функция INKEY(<выр.1Ч>) ждет нажатия любой клавиши и, кроме того, возвращает код нажатой клавиши и переносит код нажатой клавиши в клавишную ячейку, не дожидаясь нажатия одной из клавиш управления, таким образом предоставляя возможность работать функции LASTKEYO- Функция INKEY0 без параметров работает только с буфером клавиатуры. Если буфер заполнен, то она читает левый символ, возвращает его код, помещает код прочитанного символа в клавишную ячейку и сдвигает содержимое буфера на один символ влево. Таким образом, многократно подавая функцию INKEY(), можно очистить буфер клавиатуры. Заполняется буфер клавиатуры двумя способами, либо с помощью нажатия клавиш, либо с помощью функции KEYBOARD(<выр.О).
8.3.14. Фиксация выхода из режима редактирования
READKEY0
Функция возвращает код клавиши, с помощью которой был осуществлен выход из режима редактирования. Кроме того, возвращаемый код содержит информацию о том, было ли редактирование данных. Выйти из режима редактирования можно с помощью одной из клавиш, при этом возвращается один из вариантов кода клавиши:
Имя клавиши Данные не изменяюсь Данные изменялись
PgUp 6 262
PgDn 7 263
Esc 12 268
FI 36 292
Ctrl + Home 33 289
Ctrl + PgUp 34 290
Ctrl + PgDn 35 291
Ctrl + End 14 270
8.3.15. Определение команды, закрепленной за клавишей
ON(<выр.С1> [, <выр.С2> ])
Функция возвращает команду, закрепленную за клавишей или ON-командой.
<выр.С1> — содержит ON-команду (например. ERROR, READERROR, KEY, и т. д.).
<выр.С2> — содержит имя клавиши. Используется только для команды ON KEY LABEL.
8.3.16. Проверка заполнения буфера клавиатуры
CHRSAW((<выр.М> ])
Функция возвращает значение «истина» (.Т.), если в буфере клавиатуры имеется хотя бы один символ, содержимое буфера не изменяется. В противном случае возвращается значение «ложь*
(F).
8.3.17. Управление регистром букв
CAPSLOCK([ <выР.1> ])
Если <Bbip.L> истинно (.Т.), то устанавливается верхний регистр. Если <вырХ> ложно (.F.), то устанавливается нижний регистр. Если <вырХ> отсутствует, то устанаативается текущее состояние регистра (управление с клавиатуры).
8.3.18. Ввод данных с клавиатуры
INPUT [<кыр.>] ТО <псрс.менная пачяти>
Команда производит ввод данных от пользователя (с клавиатуры) и сохраняет их в указаной <переменной памятиХ Тип <переменной памяти > определяется типом ввод имых данных.
8.3.19. Ввод данных символьного типа с клавиатуры
ACCEPT [<выр.>] ТО <переменная памятн>
Команда производит ввод данных символьного типа от пользователя (с клавиатуры) и сохраняет их в указаной <переменной памятиХ В отличие от команды INPUT, в команде ACCEPT указание разделителя (кавычек или двойных кавычек) не предусматривается.
8.3.20. Определение имени переменной (поля), куда вводятся данные
VARREAD0 или SYS(18)
Функции возвращают имя переменной или поля, куда с помощью команды READ вводятся данные, при условии что было выполнено прерывание от одной из клавишных команд. Имя переменной возвращается прописными (большими) буквами. Имя поля возвращается строчными буквами, кроме первой буквы: первая буква — прописная.
8.4. ПРИМЕРЫ
Пример 1. Произвольное меню типа LIGHBAR.
* LIGHTDFR-Mghso типа FOX CLEAR
@ 5,7 PROMPT 'Пуск' MESSAGE 'Запуск программы' MENU ТО peri
0 12.32 PROMPT 'Выход' MESSAGE 'Завершение программы' MENU ТО peri
@ 8,50 PROMPT 'Поиск' MESSAGE 'Поиск данных'
MENU ТО peri
Пример 2. Использование LIGHBAR-меню.
Просмотреть таблицу Catalog и выводить на экран по одной записи. Начало просмотра организовать либо с начала таблицы, либо с конца таблицы, либо с произвольного места таблицы по номеру издания (книги).
CLOSE ALL && Закрытие всех файлов
SET DEFAULT ТО Е:\PRIMER && Задание рабочего
* каталога
USE Customer.dbf in 1 alias cus && Далее открытие
* двенадцати таблиц
USE | Order.dbf | in | alias | ord |
|
| |
USE | Salesman.dbf | in | alias | ВПГ. |
|
| |
USE | Sale.dbf | in | alias | sal |
|
| |
USE | Account.dbf | in | alias | acr.t |
|
| |
USE Catalog.dbf ORDER TAG Fam | in | alias | ctl | INDEX | catalog; | ||
USE | Autor.dbf | in | alias | atr |
|
| |
USE | Town.dbf | in | alias | twn |
|
| |
USE | Street.dbf | in | alias | str |
|
| |
USE | Fam.dbf | in | 10 alias | fam | INDEX ORDER | fam; TAG tag(2» | |
USE | Im.dbf | in | alias | im | INDEX | in ORDER TAG | |
USE | Ot.dbf | in | alias | ct | INDEX | ot ORDER TAG |
CLEAR
PRIVATE OTV SSLE ct 1
SET RELATION TO Key_fam INTO
Fam, Key_im INTO; Im, Key_ot INTO Ot
DO WHILE.T.
CLEAR
@ 10,10 SAY 'Задайте режим просмотра'
CASE 0TV=2
GO BOTTOM CASE OTV=3
INPUT 'Введите номер автора' TO С_NOMN LOCATE FOR Key_book = C_NOMN IF BOF()
WAIT 'Такой записи нет'
LOOP
ENDIF CASE OTV=4 CLEAR EXIT
ENDCASE
CLEAR ScSc Помощь о назначении клавиш
б 20,1 SAY 'Для просмотра следующей записи '; +
' нажмите Enter'
@ 21,1 SAY 'Для просмотра предыдущей записи '; +
' нажмите PgUp'
@ 22,1 SAY 'Для выхода нажмите Esc'
DO WHILE not EOF() && Вывод на экран найденной
* записи
<3 8,5 SAY 'Фамилия автора: ' + fam.Name_fam @ 9,5 SAY 'Имя автора: ' + im.Name_In»
@ 10,5 SAY 'Отчество автора: ' ♦ ot.Name_ot
@ 11,5 SAY 'Название книги: ' + ctl.Name_book
@ 13,5 SAY RECNOO
К = INKEY(0) && Ожидание нажатия клавиши
DO CASE && Управление выводом на
* экран
CASE К=27 && Проверка клавиши Esc
CLEAR EXIT
CASE К=18 && Проверка клавиши PgUp
SKIP-1
CASE К=13 && Проверка клавипи Enter
SKIP
ENDCASE
EKDDO
ENDDO
Пример 3. Вертикальное POPUP-менютипа FOX.
Левый верхний угол меню помешен в 25-ю позицию 6-й строки. Одновременно на экран выводится 7 строк меню: первая строка — заголовок меню, четыре строки — пункты меню и две строки дпя организации прокрутки.
CLEAR
DIME а(10)
а(1)= 'Старт'
а(2)='Файл'
а(3)='Поиск'
а(4)='Редактирование'
а(5)='Фильтр'
а(6)='Печать'
а{7)='Модификация'
а{8)='Дополнение'
а{9) = ''
а(10)='Выход'
@ 6,25 MENU а, 10, 7 TITLE 'База данных'
READ MENU ТО рг
@2, 10 SAY рг && Вывод на экран номера выбранного * пункта меню
С помощью оператора DO CASE можно проанализировать выбор пользователя и написать обработчик выбранного пункта меню (см. пример 2).
П р и м е р 4. Двухуровневое PULLDOWN-меню типа FOX.
CLEAR
DECL Ъ(5,2), а(10) а(1)= 'Файл' а(2)='Формат' а(3)='Поиск'
а (4) =' \ Редактирование' а(5)='Фильтр' а(6)='Печать' а(7)='Модификация' а (8) ='Дополнение' а(9)='' а(10)='Выход'
Ь(1,1)='\ Старт'
Ь(2,1)='База данных' fc(3,1> ='Программа' to(4,1)='Объект' to(5,l)='Выход'
0(1,2)='ENTER'
to(2,2) ='Команда USE'
Ь(3,2)='Редактир. программы' b (4,2) ='Вставка объекта' b(5,2)='Esc'
8t 1=3
&& Определяет актизный по умолчанию пункт
* горизонтального меню вг2=1
MENU BAR Ь, 5 MENU 4, а. 10, б
READ MENU BAR TOstl, st2 && Фиксация выбора
* пользователя
@12, 5 SAY stl GET st2 && Выводит на экран
* номера выбранных
* пользователем && пунктов горизонтального и вертикального меню
Первый пункт горизонтального меню описан как недоступный для выбора. Четвертому пункту горизо пального меню назначено подчиненное вертикальное меню.
Пример 5. Вертикальное меню типа dBASE с произвольными пунктами.
В меню имеются линейка прокрутки, верхний и нижний заголовки, предусмотрен множественный отбор пунктов, установлено по одному пробелу слева и справа от имени пункта меню.
DEFINE POPUP Edit FROM 2,2 SCROLL MARGIN;
TITLE " Редактирование'' MULTI FOOTER ''Правка" DEFINE BAR 1 OF Edit PROMFT «Вырезать» KEY 'Ctrl+X'
DEFINE BAR 2 OF Edit PROMPT 'Копировать' KEY 'Ctrl+C'
DEFINE 3AR 3 OF Edit PROMPT 'Вставить' KEY 'Ctrl+P'
DEFINE BAR 4 OF Edit PROMPT 'Удалить' KEY 'Ctrl+D'
ACTIVATE POPUP Edit
Пример 6. Вертикальное меню типа dBASE, пунктами которого назначены имена файлов, левый верхний угол меню помещен в строку 4 столбец 12.
DEFINE POPUP File PROMPT FILES LIKE E:\PRIMER\*.dbf; FROM 4, 12 TITLE "Файл"
ACTIVATE POPUP File
Пример 7. Вертикальное меню типа dBASE, пунктами которого назначены значения поля Name fam из таблицы Fam. Для сортировки списка по алфавиту текущим задан тег с номером 1. Если при создании вертикального меню используется опция PROMPT, то запрещено использовать опции MOVER и MULTI. Поэтому для организации множественного отбора пунктов меню в структуру таблицы добавлено логическое поле w и написана процедура рг.
USE | Customer.dbf | in | alias | cus |
|
| |
ЬЬ | Далее открытие двенадцати таблиц |
| |||||
USE | Order.dbf | in | alias | ord |
|
| |
USE | Salesman.dbf | in | alias | smn |
|
| |
USE | Sale.dbf | in | alias | sal |
|
| |
USE | Account.dbf | in | alias | acnt |
|
| |
USE | Catalog.dbf | in | alias | ctl | INDEX catalog TAG Fam | ORDER; | |
USE | Autor.dbf | in | alias | atr |
|
| |
USE | Town.dbf | in | В | alias | twn |
|
|
USE | Street.dbf | in | alias | str |
|
| |
USE | Fam.dbf | in | alias | fam | INDEX fam; ORDER TAG | tag(2) | |
USE | Im.dbf | in | alias | im | INDEX im ORDER TAG | In | |
USE | Ot.dbf | in | alias | ot | INDEX ot ORDER TAG | ot |
&& Закрытие всех файлов && Задание рабочего каталога |
CLOSE ALL SET DEFAULT TO B:\PRIMER |
SELE fam
SET ORDER ТО TAG(1)
DEFINE POPUP Fam PROMPT FIELDS
fam.Kame_fam-<TIF{fam. w,'+',' *)+pr() FROM 3, B; SCROLL TITLE ''Фамилии''
ON SELECTION POPUP Fam REPLACE w WITH!W ACTIVATE POPUP Fam
FUNCTION pr && Функция для возврата символа «пробел» в 25, 0
в 25, 0 SAY "Пусто"
RETURN ' '
Пример 8. Вертикальное меню типа dBASE, пунктами которого назначены значения поля Name_fam из таблицы Fam.
Организован множественный отбор пунктов меню с последующей их обработкой, для чего в структуру таблицы добавлено логическое поле w. По полю w построен индекс, который сделан текущим индексом.
CLOSE ALL && Закрытие всех файлов
SET DEFAULT ТО E:\PRIMER && Задание рабочего каталога
USE | Customer.dbf | in | alias | cus | |
&& | Далее открытие | двенадца- | •к таб | ||
USE | Order.dbf | in | alias | ord | |
USE | Salesman.dbf | in | alias | smn | |
USE | Sale.dbf | in | alias | sal | |
USE | Account.dbf | in | alias | acnt | |
USE | Catalog.dbf | in | alias | ctl |
ORDER TAG Fam
USE | Autor.dbf | in | alias | atr | |
USE | Town.dbf | in | В | alias | twn |
USE | Street.dbf | in | alias | st r | |
USE | Fam. dbf | in | 10 alias | fam |
ORDER TAG tag(2) USE Im.dbf in 11 alias im INDEX im;
ORDER TAG Im USE Ot.dbf in 12 alias ot INDEX ot;
ORDER TAG Ot
SELE fam
SET ORDER TO TAG{3)
DEFINE POPUP Fam PROMPT FIELDS fam.Name_fam+IIF(w,' + ',' ') FROM 3, B;
SCROLL TITLE "Фамилия"
ON SELECTION POPUP Fam DO Selbar
ACTIVATE POPUP Fam
REPLACE w WITH.F. FOR w && Очистка поля w
PROCEDURE Selbar DO CASE
CASE LASTKEY()=32 && Фиксация нажатия клавиши
&& ЗрасеЗаг и окончание процесса выбора пунктов
HIDE POPUP Fam SCAN FOR w ENDSCAN
DEACTIVATE POPUP
CASE LASTKEY()=13 *
*
REPLACE w WITH!w
ENDCASE
RETURN && Скрытие POPUP-меню && Сканирование текущей таблицы bSc и обработка записей && Удаление меню && Фиксация нажатия клавиши Enter для отмены ранее сделанных выделений && Инверсия значения поля w
* Допускается работа без указания текущего индекса по
* полю w, но отображение
* сделанного выбора будет другим (не упорядоченным).
Пр и м е р 9. Вертикальное меню типа dBASE, пунктами которого назначена структура таблицы Catalog.
CLOSE ALL && Закрытие всех файлов
SET DEFAULT ТО E:\PRIMER && Задание рабочего
* каталога
USE Customer.dbfin 1 alias cus
ScSc Далее открытие двенадцати таблиц
USE Order.dbf in 2 alias ord
USE Salesman.dbf in 3 alias smn
USE Sale.dbf in 4 alias sal
USE Account.dbf in 5 alias acnt
USE | Catalog.dbf | in | alias | ctl | |
USE | Autor.dbf | in | alias | atr | |
USE | Town.dbf | in | alias | twn | |
USE | Street.dbf | in | alias | str | |
USE | Fam. dbf | in | alias | fan | |
USE | Im.dbf | in | alias | im | |
USE | Ot.dbf | in | alias | ot |
ORDER TAG Fan
INDEX fan;
ORDER TAG tag(2)
INDEX im;
ORDER TAG Im
INDEX ot;
ORDER TAG ot
CLEAR SSLE ctl
DEFINE POPUP Catal PROMPT STRUCTURE FROM 3, 8; SCROLL TITLE ''Каталог''
ACTIVATE POPUP Catal
Пример 10. Назначение вертикальному меню подчиненного вертикального меню второго уровня.
CLOSE ALL && Закрытие всех файлов
SET DEFAULT ТО Е:\PRIMER && Задание рабочего каталога
USE | Customer.dbf | in | alias | cus | |
|
|
| && | Далее | открытие двенадцати |
USE | Order.dbf | in | alias | ord | |
USE | Salesman.dbf in | alias | smn | ||
USE | Sale.dbf | in | alias | sal | |
USE | Account.dbf | in | alias | acnt | |
USE | Catalog.dbf | in | alias | ctl INDEX catalog; | |
|
|
|
|
| ORDER 1 |
USE | Autor.dbf | in | alias | atr | |
USE | Town.dbf | in | alias | twn |
USE Street.dbf in 9 alias str
USE Fan. dbf in 10 alias fam INDEX fam;
ORDER TAG tag(2) USE Im.dbf in 11 alias im INDEX im;
ORDER TAG Im USE Ot.dbf in 12 alias ot INDEX ot;
ORDER TAG ot
CLEAR SELE fan
SET ORDER TO TAG Name
DEFINE POPUP Edit FRCM 2,2 SCROLL MARGIN;
TITLE ''Редактирование''; MULTI FOOTER ''Edit''
DEFINE BAR 1 OF Edit PROMPT "Вырезать" KEY 'Ctrl+X'
DEFINE BAR 2 OF Edit PROMPT ' Копировать'KEY 'Ctrl+C'
DEFINE BAR 3 OF Edit PROMPT 'Вставить' KEY 'Ctrl+P'
DEFINE BAR 4 OF Edit PROMPT 'Удалить' KEY 'Ctrl+D'
DEFINE POPUP Fam PROMPT FIELDS fam.Name_fam SCROLL; TITLE "Фамилии" FROM 4,29 TO 11,45
On 3AR 2 OF Edit ACTIVATE POPUP Fam
ACTIVATE POPUP Edit
Пример 11. Горизонтальное меню типа dBASE.
DEFINE MENU arm BAR AT LINE 7;
KEY 'Ctrl+M' FONT "Times New Roman". 12 STYLE 'BI'
* Описание четырех пунктов горизонтального меню.
DEFINE PAD File OF arm PROMPT 'Файл' KEY 'Ctrl+F' DEFINE PAD Edit OF arm PROMPT 'Редактирование';
KEY 'Ctrl+E'
DEFINE PAD Filter OF arm PROMPT 'Фильтр' KEY 'Ctrl+T' DEFINE PAD Finish OF arm PROMPT 'Выход' KEY 'Escape'
ACTIVATE MENU arm
* Для написания имен пунктов меню задан шрифт.
Пример 12. Двухуровневое меню типа dBASE.
CLOSE ALL && Закрытие всех файлов
SET DEFAULT ТО E:\PRIMER && Задание рабочего каталога
USE | Cuetomer.dbf | in | alias | cus |
|
| |
|
| && Далее открытие | двенадцати табгп | ||||
USE | Order.dbf | in | alias | ord |
|
| |
USE | Salesman.dbf | in | alias | smn |
|
| |
USE | Sale.dbf | in | alias | sal |
|
| |
USE | Account.dbf | in | S | alias | acnt |
|
|
USE | Catalog.dbf | in | alias | ctl | INDEX ORDER | catalog; TAG Farr | |
USE | Autor.dbf | in | alias | atr |
|
| |
USE | Town.dbf | in | alias | twr. |
|
| |
USE | Street.dbf | in | alias | str |
|
| |
USE | Fam.dbf | in | alias | fam | INDEX ORDER | fan; TAG tag(2) | |
USE | Im.dbf | in | alias | irr. | INDEX ORDER | im; TAG In | |
USE | Ot.dbf | in | alias | ot | INDEX ORDER | ot; TAG Ot |
CLEAR SELE ctl
SET RELATION TO Key_fam INTO Fam, Key_iir. INTO Im,;
Key_ot INTO Ot
DEFINE MENU arm BAR AT LINE 7 KEY 'Ctrl+F'
* Описание четырех пунктов горизонтального меню.
DEFINE PAD File OF arm PROMPT 'Файл' KEY 'Ctrl+F'
DEFINE PAD Edit OF arm PROMPT ' \<Редактирование';
KEY 'Ctrl+E'
DEFINE PAD Filter OF arm PROMPT '\<Фильтр' KEY 'Ctrl+T' DEFINE PAD Finish OF arm PROMPT 'Выход' KEY 'Escape'
* Описание подчиненного мен» для пункта Edit
* горизонтального меню.
* Пунктами подчиненного меню заданы произвольные
* названия.
DEFINE POPUP Ed“ RELATIVE SCROLL MARGIN
* Описание четырех пунктов подчиненного меню.
DEFINE BAR 1 OF Edt PROMPT «Вырезать» KEY 'Ctrl+X'
DEFINE BAR 2 OF Edt PROMPT 'Копировать' KEY 'Ctrl+C'
DEFINE BAR 3 OF Edt PROMPT 'Вставить' KEY 'Ctrl-P'
DEFINE BAR 4 OF Edt PROMPT 'Удалить' KEY 'Ctrl+D'
* Вызов процедуры при выборе пунктов подчиненного вертикального меню
ON SELECTION BAR 1 OF Edt DO ppp IN;
E:\PRIMER\progS.prg WITH menuO, pad() ON SELECTION BAR 2 OF Edt DO ppp IN;
E:\?RIMER\prog5.prg WITH menu(), pad() ON SELECTION BAR 3 OF Edt DO ppp IN;
E:\PRIMER\prog5.prg WITH menuO, pad() ON SELECTION 3AR 4 OF Edt DO ppp IN;
E:\PRIMER\prog5.prg WITH menuO, pad()
* Вызов описанного ранее подчиненного меню при выборе
* пункта Edit горизонтального меню.
* ON PAD Edit OF arm ACTIVATE POPUP Edt
* Вызов подчиненного меню при выборе пункта File
* горизонтального меню.
Дата добавления: 2015-09-29; просмотров: 18 | Нарушение авторских прав
<== предыдущая лекция | | | следующая лекция ==> |