Получение событий клавиатуры методом kp.getkey
Установка kp.genkpevent = 0 - NO отключает генерацию событий on_kp и позволяет использовать клавиатуру в режиме опроса.
В этом режиме события клавиатуры вы получаете вызовом метода kp.getkey. Вот изменённый пример из предыдущего раздела.
Обычно (но не обязательно) режим опроса используется прямо в событии on_sys_init, где размещается бесконечный цикл обработки ввода с клавиатуры. Обратите внимание на оператор doevents - он позволяет выполняться другим событиям, пока работает бесконечный цикл:
sub on_sys_init()
kp.scanlinesmapping="24,25,26,27"
kp.returnlinesmapping="28,29,30,31"
'this is only necessary on devices with explicit output buffer control
io.num=24
io.enabled=YES
io.num=25
io.enabled=YES
io.num=26
io.enabled=YES
io.num=27
io.enabled=YES
kp.autodisablecodes=str(PL_KP_EVENT_PRESSED)+",49"
kp.genkpevent=NO
kp.enabled=YES
dim key_event as pl_kp_event_codes
dim key_code as byte
while 1
if kp.getkey(key_event, key_code)=OK then
if key_event=PL_KP_EVENT_PRESSED then
select case key_code
case 1:
inp_str=inp_str+"1"
case 17:
inp_str=inp_str+"2"
case 33:
inp_str=inp_str+"3"
case 49:
sys.debugprint("<ENTER> pressed. Keypad disabled. Press MD to re-enable.\x0D>")
goto skip
case 2:
inp_str=inp_str+"4"
case 18:
inp_str=inp_str+"5"
case 34:
inp_str=inp_str+"6"
case 50:
inp_str="" 'this is the <CANCEL> key
sys.debugprint("<CANCEL> pressed. The string is now empty.\x0D>")
goto skip
case 3:
inp_str=inp_str+"7"
case 19:
inp_str=inp_str+"8"
case 35:
inp_str=inp_str+"9"
case 51:
inp_str=inp_str+"0"
case else:
goto skip
end select
sys.debugprint("INPUT_STRING> "+inp_str+chr(13))
end if
end if
skip:
doevents
wend
end sub
'----------------------------------------------------------------
sub on_button_pressed()
if kp.enabled=NO then
kp.enabled=YES
inp_str=""
sys.debugprint("Keypad re-enabled.\x0D")
end if
end sub
Вы наверняка захотите узнать, что лучше: режим событий или режим опроса объекта kp. Ответ такой: по возможности и там, где это удобно, используйте режим событий. TiOS - событийно-ориентированная ОС, поэтому события должны быть способом по умолчанию для решения задач в вашем коде. Тем не менее бывают случаи, когда режим опроса оказывается удобнее. Мы в Tibbo и сами не знали, что режим опроса нужен, пока не взялись за по-настоящему сложные проекты ... а потом выяснилось, что режим опроса даже улучшает архитектуру кода!