Keycode() не работает в IDLE процедуре

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
ingasoftplus
Старожил
Сообщения: 278
Зарегистрирован: 26 Декабрь 2006, 17:07
Откуда: Оттуда :)

Keycode() не работает в IDLE процедуре

Сообщение ingasoftplus » 15 Ноябрь 2019, 12:17

Keycode() не работает в IDLE процедуре - это коротко.

Подробнее. АБС, Clarion10.

Есть Main frame, из него стартует IDLE процедура (по умолчанию по 1 секунде вызывается).

В IDLE процедуре тупой код на проверку активности юзера, а именно
IF Keycode()...

Так вот, на главном фрейме автивность ловится (хотя и как-то странно, на мышь не реагирует), а вто если вызывается какая-то процедура, то из нее всегда получаю Keycode()=0

Не понятно, что происходит. (причем, похожий код в clarion6 работал).

Есть мысли, господа?

или решение, как поймать период неактивности юзера (т.е. он не жмет на клаву или мышью в данном приложении)...

спасибо

kreator
✯ Ветеран ✯
Сообщения: 3469
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

Keycode() не работает в IDLE процедуре

Сообщение kreator » 15 Ноябрь 2019, 13:57

ingasoftplus писал(а):
15 Ноябрь 2019, 12:17
Keycode() не работает в IDLE процедуре - это коротко.
Скорее всего, где-то срабатывает setkeycode(0). Нужно провести чистый эксперимент (на простом рукописном окне).
ingasoftplus писал(а):
15 Ноябрь 2019, 12:17
или решение, как поймать период неактивности юзера (т.е. он не жмет на клаву или мышью в данном приложении)...
Я это делал в каждом окне. Это типа "Электронный киоск", фрейма нет.
В ABC Free нет что-то такого?
We are hard at work… for you. :)

kreator
✯ Ветеран ✯
Сообщения: 3469
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

Keycode() не работает в IDLE процедуре

Сообщение kreator » 15 Ноябрь 2019, 14:06

Кстати, ещё момент. MouseX(), MouseY() работают в IDLE процедуре?
We are hard at work… for you. :)

Аватара пользователя
ingasoftplus
Старожил
Сообщения: 278
Зарегистрирован: 26 Декабрь 2006, 17:07
Откуда: Оттуда :)

Keycode() не работает в IDLE процедуре

Сообщение ingasoftplus » 15 Ноябрь 2019, 14:31

kreator писал(а):
15 Ноябрь 2019, 14:06
Кстати, ещё момент. MouseX(), MouseY() работают в IDLE процедуре?
кстати не проверял

kreator
✯ Ветеран ✯
Сообщения: 3469
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

Keycode() не работает в IDLE процедуре

Сообщение kreator » 15 Ноябрь 2019, 16:17

ingasoftplus писал(а):
15 Ноябрь 2019, 14:31
kreator писал(а):
15 Ноябрь 2019, 14:06
Кстати, ещё момент. MouseX(), MouseY() работают в IDLE процедуре?
кстати не проверял
Может на самом фрейме в таймере поставить обработку mousex() и mousey()? Дёшево и сердито.
We are hard at work… for you. :)

Аватара пользователя
ingasoftplus
Старожил
Сообщения: 278
Зарегистрирован: 26 Декабрь 2006, 17:07
Откуда: Оттуда :)

Keycode() не работает в IDLE процедуре

Сообщение ingasoftplus » 15 Ноябрь 2019, 16:47

kreator писал(а):
15 Ноябрь 2019, 16:17
Может на самом фрейме в таймере поставить обработку mousex() и mousey()? Дёшево и сердито.
ну а если юзер в формах с клавиатуры работает?

причем, в главном фрейме то идл процедура ловит keycode, а вот в окнах чилдах - перестает.

Аватара пользователя
ingasoftplus
Старожил
Сообщения: 278
Зарегистрирован: 26 Декабрь 2006, 17:07
Откуда: Оттуда :)

Keycode() не работает в IDLE процедуре

Сообщение ingasoftplus » 15 Ноябрь 2019, 20:20

kreator писал(а):
15 Ноябрь 2019, 13:57
В ABC Free нет что-то такого?
сейчас посмотрел - не нашел такого. может как-то особенно называется?

kreator
✯ Ветеран ✯
Сообщения: 3469
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

Keycode() не работает в IDLE процедуре

Сообщение kreator » 16 Ноябрь 2019, 16:46

ingasoftplus писал(а):
15 Ноябрь 2019, 16:47
ну а если юзер в формах с клавиатуры работает?
ДОС что ли? Хочешь - не хочешь, всё равно мышкой дёрнешь. Ради интереса - MouseX и MouseY отрабатывают? Вот у меня в "Электронном Киоске" мыши нет. Пришлось в каждый экран прописывать код. Экранов мало, это нормально. Иначе писать шаблон.
We are hard at work… for you. :)

Аватара пользователя
Губин Игорь
✯ Ветеран ✯
Сообщения: 1320
Зарегистрирован: 16 Сентябрь 2005, 15:35
Откуда: Москва

Keycode() не работает в IDLE процедуре

Сообщение Губин Игорь » 18 Ноябрь 2019, 10:54

ingasoftplus писал(а):
15 Ноябрь 2019, 12:17
Есть Main frame, из него стартует IDLE процедура (по умолчанию по 1 секунде вызывается).

В IDLE процедуре тупой код на проверку активности юзера, а именно
IF Keycode()...

Простите за тупой вопрос, но разве keycode() как-то должен реагировать?! :idied:
Он же отрабатывает в активном окне!

ИМХО: тут или субклассить или добавлять код для обработки в каждое активное окно
Это я только кажусь дураком! На самом деле я полный идиот!

Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 1393
Зарегистрирован: 06 Ноябрь 2014, 12:48

Keycode() не работает в IDLE процедуре

Сообщение finsoftrz » 18 Ноябрь 2019, 12:04

Этот то вопрос как раз разумный. :-)
Рязань решает.

Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 1393
Зарегистрирован: 06 Ноябрь 2014, 12:48

Keycode() не работает в IDLE процедуре

Сообщение finsoftrz » 18 Ноябрь 2019, 12:04

И риторический.
Рязань решает.

Аватара пользователя
Губин Игорь
✯ Ветеран ✯
Сообщения: 1320
Зарегистрирован: 16 Сентябрь 2005, 15:35
Откуда: Москва

Keycode() не работает в IDLE процедуре

Сообщение Губин Игорь » 18 Ноябрь 2019, 12:10

finsoftrz писал(а):
18 Ноябрь 2019, 12:04
И риторический.
Потому и тупой! :cat:
Это я только кажусь дураком! На самом деле я полный идиот!

Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 1393
Зарегистрирован: 06 Ноябрь 2014, 12:48

Keycode() не работает в IDLE процедуре

Сообщение finsoftrz » 18 Ноябрь 2019, 12:10

MouseX и mouseY должны срабатывать. В кассовой программе, где мышь отключается, я прописывал проверку активности в каждом окне, где это нужно. По таймеру. Но это очень специфичный случай.
Рязань решает.

Аватара пользователя
vic7tar
Старожил
Сообщения: 260
Зарегистрирован: 09 Февраль 2017, 20:12

Keycode() не работает в IDLE процедуре

Сообщение vic7tar » 18 Ноябрь 2019, 15:46

ingasoftplus писал(а):
15 Ноябрь 2019, 12:17
Есть Main frame, из него стартует IDLE процедура (по умолчанию по 1 секунде вызывается).
Ну так в этом потоке проблем не будет. Ловить нажатие клавиш в другом потоке - тупик, никакой Idle не поможет.
ingasoftplus писал(а):
15 Ноябрь 2019, 12:17
Есть мысли, господа?
Может посмотреть в строну хуков?
C10, Win10x64

kreator
✯ Ветеран ✯
Сообщения: 3469
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

Keycode() не работает в IDLE процедуре

Сообщение kreator » 18 Ноябрь 2019, 16:29

Да зачем? Если по-простому не выходит, есть традиционный путь - шаблон, который впишет нужный код во все окна.
We are hard at work… for you. :)

Ответить