Оператор on key ( n ) gosub метка



 

Оператор указывает подпрограмму (по метке) обработки прерывания от нажатия клавиши с номером n, определенной ранее в операторе key, например:

……………………

on key (1) go sub a

…………………...

Stop

A:

rem подпрограмма обработки прерывания от нажатия клавиши F 1

…………………..

return

Оператор on key не имеет действия, пока в программе не выполнен оператор key ( n ).

 

Оператор key {on ! off ! list}

 

Данный оператор управляет обработкой прерывания от нажатия клавиш, определенных в операторе key n .

Здесь:

1. n – номер функциональной клавиши, либо комбинация клавиш;

2. on – дополнение, разрешающее прерывание от нажатия клавиш;

3. off – дополнение, запрещающее прерывание от нажатия клавиш;

4. stop – дополнение, определяемое временное замещение прерывания от нажатия клавиш до выполнения оператора key on.

Работа программы сложной структуры с использованием меню

 

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

rem построение меню в программе сложной структуры cls rem определение функциональных клавиш для входа в подпрограммы из меню key 1, “п/п#1” ‘ определение функциональной клавиши F 1 как вызов первой подпрограммы (в строке подсказок) key 2, “п/п#2” ‘ определение функциональной клавиши F 2 как вызов первой подпрограммы (в строке подсказок) key on ‘ высвечивание строки подсказок on key (1) gosub f1 ‘ определение первой подпрограммы f 1 для обработки прерывания от нажатия функциональной клавиши F 1 key (1) on ‘ разрешение на прерывание от нажатия клавиши F 1 on key (2) gosub f2 ‘ аналогично для клавиши F 2 key (2) on rem формирование меню c$=”” rem высвечивание пунктов меню с поясняющим текстом locate 4,15:print “меню” locate 5,10:print “первая подпрограмма – F1” locate 6,10:print “вторая подпрограмма – F2” locate 15,10:print “для вызова подпрограмм нажмите любую” locate 16,10:print “из обозначенных клавиш F1 или F2” locate 17,10:print “любая другая клавиша завершает программу” rem зависание программы do c$=inkey$ ‘ ввод символа в буфер клавиатуры loop until c$<>”” cls locate 12,10:print “работа программы завершена” stop f1: rem первая программа обслуживает нажатие клавиши F 1 cls beep ‘ звуковой сигнал locate 12,10:print “ работает подпрограмма обработки клавиши F1” delay 2 ‘ задержка экрана cls return ‘ возврат к основному меню f2: rem вторая подпрограмма обслуживает нажатие клавиши F 2 cls beep:beep ‘ двойной звуковой сигнал для привлечения внимания locate 12,10:print “работает подпрограмма обработки клавиши F2” delay 2 cls return

 

Меню Первая подпрограмма – F1 Вторая подпрограмма – F2 Для вызова подпрограмм нажмите любую из обозначенных клавиш F1 или F2 любая другая клавиша завершает программу  
Диалог работы программы с пользователем, следующий при запуске:

 

Если пользователь нажмет клавишу F1, то на экране после звукового сигнала будет сообщение:

Работает подпрограмма обработки клавиши F 1.

Через 2 секунды вновь появиться меню. Аналогичное сообщение будет при нажатии клавиши F 2. При нажатии любой другой клавиши на экране появиться фраза:

Работа программы завершена.

 

Установка маркера на позицию вертикального меню

rem программа построения меню с перемещением маркера по меню cls dim items$ (4) ‘ массив items $ содержит название пунктов меню items$ (1)=”сортировка – F1” ‘ заполнение массива items $ значениями items$ (2)=”гистограмма – F2” items$ (3)=”результаты – F3” items$ (4)=”выход – F1” ‘ печать меню на экране for i=1 to 4 call Write String (items$(i), 10, 4+i,1, 0) ‘ вызов процедуры печати строки next i call Write String (items$(1), 10, 5,12, 7) ‘ высвечивание первого пункта меню                                                             ‘ 12 – светло-красный фон;                                                             ‘ 7 – белое изображение k=1:y=1    ‘ y – переменная управляет перемещением маркера menu: key(1) on key(2) on key(3) on key(4) on key(11) on ‘ 11 – клавиша стрелка вверх key(14) on ‘ 14 – клавиша стрелка вниз do                                 ‘ цикл по функциональным клавишам F 1 – F 4 on key (14) gosub down ‘ либо от перемещения маркера с последующим                         нажатием клавиши Enter on key (11) gosub up on key (1) gosub f1 on key (2) gosub f2 on key (3) gosub f3 on key (4) gosub f4 if instat then c$=inkey$ ‘ если что-то нажимается, то заполняется c $ loop until c$=chr$ (13)      ‘ 13 – код по ASCII клавиши Enter                                                ‘ если не нажата клавиша Enter , то программа зацикливается в противном случае цикл заканчивается c$=”” ‘ очистка переменной c$ on k gosub proc1, proc2, proc3, proc4 goto menu 9999 locate 8, 40:print “основная программа закончилась”     locate 9, 40:print “для выхода в турбо среду нажмите Esc” stop down: call Write String (items$(y), 4+y, 1, 0) ‘ старая строка под цвет фона y=y+1 if y>4 then y=1 ‘ маркер двигается снова сверху – вниз call WriteString (items$(y), 10, 4+y, 12, 7) ‘ новая строка, там, где маркер, высвечена более ярким цветом k=y return up: call WriteString (items$(y), 10, 4+y, 1, 0) ‘ цвет букв – синий (1) y=y-1 ‘ цвет фона – черный (0) if y<1 then y=4 call WriteString (items$(y), 10, 4+y, 12, 7) ‘ цвет букв – светло - красный (12) k=y       ‘ цвет фона – белый (7) return f1: k=1:c$=chr$(13): return f2: k=2:c$=chr$(13): return f3: k=3:c$=chr$(13): return f4: k=4:c$=chr$(13): return sub Write String (st$, x, y, a, b) ‘ ввод строки на заданную позицию заданным цветом букв и фона color a, b ‘ в алфавитно-цифровом режиме a – цвет изображения, b – фон locate y, x, 0 ‘ установка курсора в заданную позицию, сам курсор не виден print st$ end sub proc1: for j=1 to 15 locate 5, 40:print “отработала сортировка”: delay 0.5 locate 5, 40:print “                                  ”: delay 0.5 next j return proc2 for j=1 to 10 locate 6 40:print “отработала гистограмма“ delay 0.5 locate 6 40:print “                                    ”: delay 0.5 next j return proc3: for j=1 to 10 locate 7, 40:print “печать результатов”: delay 0.5 locate 7, 40:print “                            ”: delay 0.5 next j return proc4: return 9999

 


Дата добавления: 2021-11-30; просмотров: 18; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!