Страниц: [1]
  Печать  
Автор Тема: Обработка события Ph_EV_KEY в AppBuilder  (Прочитано 438 раз)
Дмитрий
Участник
*
Offline Offline

Сообщений: 38


Просмотр профиля
« : Июля 26, 2017, 02:33:19 pm »

Здравствуйте!
Занялся переносом кода с QNX4 на QNX6 и столкнулся со следующим эффектом:
При задании в свойствах окна обработки события RAW EVENT типа Ph_EV_KEY и назначения ей функции,
при опытном запуске выяснилось, что заданная функция KeyJAB.c вызывается 2 раза подряд при нажатии любой клавиши,
в связи с чем на экране в виджете PtLabel введенный с клавиатуры символ дублируется.
Никто не сталкивался с данной ситуацией?
P.S может это дребезг, но тогда странно что всегда 2 раза.
Кстати, окно вызывается поверх другого окна.
Спасибо!
Записан
A_O
Full Member
***
Offline Offline

Сообщений: 205


Просмотр профиля
« Ответ #1 : Июля 26, 2017, 03:58:37 pm »

Функция вызывается при нажатии и при отпускании клавиши. Нужно проверять соответствующие флаги. Странно, что проблема возникла при портировании из qnx4 - там дело обстоит точно так же.
Записан
Дмитрий
Участник
*
Offline Offline

Сообщений: 38


Просмотр профиля
« Ответ #2 : Июля 26, 2017, 06:44:02 pm »

Спасибо!
Почему я сам не догадался, на внимательнее читать help)
Записан
da-nie
Full Member
***
Offline Offline

Сообщений: 167



Просмотр профиля
« Ответ #3 : Июля 26, 2017, 10:11:40 pm »

Я делал так. (cKeyboard - абстрактная клавиатура).

Код:
#include "ckbrd.h"

extern CKeyboard cKeyboard;

int OnActivate_Raw(PtWidget_t *widget, ApInfo_t *apinfo, PtCallbackInfo_t *cbinfo )
{
 if (cbinfo->event->type==Ph_EV_KEY)
 {
  PhKeyEvent_t *kev=(PhKeyEvent_t *)PhGetData(cbinfo->event);
  long scan=kev->key_scan;
  if (kev->key_flags&Pk_KF_Scan_Valid)
  {
   if (kev->key_flags&Pk_KF_Key_Down) cKeyboard.SetKeyState(scan,true);
                                else  cKeyboard.SetKeyState(scan&0x7f,false);
  }
 }
 return(Pt_CONTINUE);
}
Записан

И день и ночь в пути
Страниц: [1]
  Печать  
 
Перейти в: