Официальный форум СВД Встраиваемые Системы
22 Августа, 2019, 14:22:08 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
 
 
 Сайт СВД ВС  Начало   Помощь Поиск Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Photon PtSendEventToWidget  (Прочитано 254 раз)
Дмитрий Козлов
Пользователь

Сообщений: 59


« : 16 Июля, 2019, 17:43:17 »

Добрый день

Досталось в наследство софтина под Photon, решил дорисовать функционал и понадобилось виртуально нажимать кнопку
в мануале нашел функцию PtSendEventToWidget с примером, соорудил простенькое приложенице и при вызове функции все рушиться
помогите разобраться что не так, манипуляции с event результата не дали
в приложении примерчик
(щёлкните чтобы показать/скрыть)



Записан
GrayCat
Пользователь

Сообщений: 27


Embedder


« Ответ #1 : 18 Июля, 2019, 11:14:01 »

   const char *item = "B2 pressed";

Что-то мне вспоминается, что строки для PtList нужно готовить динамически malloc()-ом или strdup()-ом. Если подсовывать константу -- крешится.

Попробуйте.
Записан

Gray©at
Дмитрий Козлов
Пользователь

Сообщений: 59


« Ответ #2 : 18 Июля, 2019, 12:33:25 »

Что-то мне вспоминается, что строки для PtList нужно готовить динамически malloc()-ом или strdup()-ом. Если подсовывать константу -- крешится.

нет, это как раз работает корректно (можно убрать вызов PtSendEventToWidget и все работает замечательно)
крашется только при вызове PtSendEventToWidget
Записан
Николай Коберда
Сотрудник СВД ВС
Пользователь

Сообщений: 48



WWW
« Ответ #3 : 18 Июля, 2019, 14:43:41 »

Добрый день

Досталось в наследство софтина под Photon, решил дорисовать функционал и понадобилось виртуально нажимать кнопку
в мануале нашел функцию PtSendEventToWidget с примером, соорудил простенькое приложенице и при вызове функции все рушиться
помогите разобраться что не так, манипуляции с event результата не дали
в приложении примерчик

Добрый день. При вызове
(щёлкните чтобы показать/скрыть)
 new_event.event в этой функции оказывается неинициализированным, из-за чего происходит падение программы. Следует
(щёлкните чтобы показать/скрыть)
. Далее, насколько я понимаю, в функции Phantom Вы хотите эмулировать действие с PtButton_2. В этом случае Вам необходимо отправлять не только виртуальное отжатие, но и виртуальное нажатие
 
(щёлкните чтобы показать/скрыть)
Записан

Дмитрий Козлов
Пользователь

Сообщений: 59


« Ответ #4 : 18 Июля, 2019, 16:46:42 »

 new_event.event в этой функции оказывается неинициализированным, из-за чего происходит падение программы.

ну в данном случае, пофигу, обнулил new_event (  memset( &new_event, 0 ,sizeof( new_event ) ), эффект тотже =)

с нажатием, отжатием, тоже пробовал, не работало

но я не выставлял   
Код:
   new_event.event.subtype = Ph_EV_RELEASE_REAL;
 

 в итоге заработало в таком варианте
Код:
struct{
    PhEvent_t event;
    PhRect_t  rect;
    PhPointerEvent_t pevent;
  } new_event;

  memset( &new_event, 0 ,sizeof( new_event ) );
  memset( &new_event.rect, -1 ,sizeof( new_event.rect ) );

  if( event ) {
    new_event.event = *event;
  }

  new_event.event.processing_flags = Ph_FAKE_EVENT;
  new_event.event.type = Ph_EV_BUT_PRESS;
  new_event.pevent.click_count = 1;
  new_event.pevent.buttons = Ph_BUTTON_SELECT;
  new_event.event.num_rects = 1;

  PtSendEventToWidget( widget, (PhEvent_t *) &new_event);

  new_event.event.processing_flags = Ph_FAKE_EVENT;
  new_event.event.type = Ph_EV_BUT_RELEASE;
  new_event.event.subtype = Ph_EV_RELEASE_REAL;
  new_event.pevent.click_count = 1;
  new_event.pevent.buttons = Ph_BUTTON_SELECT;
  new_event.event.num_rects = 1;

  PtSendEventToWidget( widget, (PhEvent_t *) &new_event);

В чем тогда разница?
Код:
Ph_EV_RELEASE_REAL
Emitted at the current position of the pointer (that is, where the user actually released the button).
Ph_EV_RELEASE_PHANTOM
Emitted where the user pressed the button.

или как описано в главе "Events" нужно сначала нажать потом отжать а потом еще раз отжать через Ph_EV_RELEASE_PHANTOM?
Записан
Николай Коберда
Сотрудник СВД ВС
Пользователь

Сообщений: 48



WWW
« Ответ #5 : 18 Июля, 2019, 18:05:34 »

Разница, как Вы заметили, именно в этом
Код:
Ph_EV_RELEASE_REAL
Emitted at the current position of the pointer (that is, where the user actually released the button).
Ph_EV_RELEASE_PHANTOM
Emitted where the user pressed the button.
В данном случае, Ph_EV_RELEASE_PHANTOM не имеет отношения к тому, реально ли нажатие или эмулировано
Записан

Дмитрий Козлов
Пользователь

Сообщений: 59


« Ответ #6 : 19 Июля, 2019, 14:40:32 »

Понял, спасибо, приму к сведению =)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP © 2002-2019 СВД Встраиваемые Системы.
При использовании материалов сайта ссылка на forum.kpda.ru обязательна.

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines | © Aiwan. Kolobok smiles | Sitemap
Valid XHTML 1.0! Valid CSS!
Сайт СВД ВС

В последний раз google посещал эту страницу 11 Августа, 2019, 17:14:59