Получение событий клавиатуры методом 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 и сами не знали, что режим опроса нужен, пока не взялись за по-настоящему сложные проекты ... а потом выяснилось, что режим опроса даже улучшает архитектуру кода!

Исходный материал Tibbo обновлён 12 сентября 2022Оригинал на docs.tibbo.com · Сообщить об ошибке