Keycode() не работает в IDLE процедуре
Добавлено: 18 Ноябрь 2019, 16:40
Ну да, самый простой и самый надёжный путь -> шаблон.
Место общения программистов, форум разработчиков БД на Clarion
https://forum.clarionlife.net/
Это кто вам такое сказал???Губин Игорь писал(а): 18 Ноябрь 2019, 10:54но разве keycode() как-то должен реагировать?!
Он же отрабатывает в активном окне!
поток - тотже самый.
Код: Выделить всё
S CString(1000)
SetTarget( , SYSTEM{Prop:Active } )
S = 0{ Prop:Text }
LOOP Field# = FIRSTFIELD() TO LASTFIELD()
S = S & Field#{ PROP:ScreenText}
END
SetTarget
Тем, что один раз напишешь код, а дальше всё само, только подключать не забывай.
Конечно, не кошерно! Поэтому и костыль с idle процедурой. А как вам вот такой вариант. Из дочерних окон генерить какое-нибудь пользовательское событие во фрейме. А во фрейме уже всё отрабатывать.finsoftrz писал(а): 19 Ноябрь 2019, 10:16 Кстати, а чем шаблон поможет? Все равно придется либо вешать таймер, либо сабклассить. Что в контексте MDI приложения совсем не кошерно делать для всех окон. А могут быть и фоновые процессы запущены.
Большое красивое окно "Отправлять данные в налоговую? Да/Нет"kreator писал(а): 19 Ноябрь 2019, 11:56Из дочерних окон генерить какое-нибудь пользовательское событие во фрейме
Я не про это. Что будет этот шаблон размещать в оконных процедурах? Там все равно в accept упрешься. Если не сабклассить и не вешать таймер. Даже в этом случае не все гладко будет, так как клавиатурный буфер еще чистить надо не понятно в каких ситуациях. Я хочу сказать, что сам подход с использованием keycode() для определения активности пользователя в mdi не корректен. В то время, как задача решается с пол пинка на уровне винды.Губин Игорь писал(а): 19 Ноябрь 2019, 11:37Тем, что один раз напишешь код, а дальше всё само, только подключать не забывай.
И что? Шаблон тем и хорош, что может, практически, всё. А остальное - дело алгоритма. Тут напредлагали массу всего. Пусть думает
Выражаясь шахматной терминологией, в таких случаях надо вначале оценить позицию, а уж потом намечать ходы-кандидаты. То есть вся эта тема концептуально сомнительная. Блокировать отдельное mdi приложение, а нафига? Определять бездействие пользователя нужно на уровне ОС. И блокировать доступ к компьютеру, а не к отдельному запущенному приложению. Мне кажется, это очевидно. Поэтому обсуждение данной темы из разряда "скучно, почему бы не поболтать".Губин Игорь писал(а): 19 Ноябрь 2019, 12:21И что? Шаблон тем и хорош, что может, практически, всё. А остальное - дело алгоритма. Тут напредлагали массу всего. Пусть думает
IMM даже не нужно, если только на большие контролы ТЕКСТ. Проверять в акцепте ивенты и всё. А вот с мышкой без таймера не обойтись, наверно.Губин Игорь писал(а): 19 Ноябрь 2019, 12:12 По идее - вешаем на все поля ввода IMM и получаем событие по любому изменению. Ну и таймер. Если, скажем, за 10 секунд не обновился счётчик - пользователь уснул. Реализация в шаблоне - дело пары часов с отладкой. Можно, наверное, даже и IMM шаблоном вешать
И как он это себе представляет? У пользователя могут быть открыты разные отчеты в разных нитях. Взять и вырубить все, пусть потом заново формирует?kreator писал(а): 19 Ноябрь 2019, 14:21А кто-то говорил про блокирование? У меня, например, выход из окна. Ещё, например, заказчик просит, чтобы был автоматический выход из программы при неактивности пользователя. Мы пока отбиваемся, т.к. это он (заказчик) хочет на лицензиях сэкономить.
Не все действия пользователя сопровождаются генерацией эвентов.kreator писал(а): 19 Ноябрь 2019, 14:21 IMM даже не нужно, если только на большие контролы ТЕКСТ. Проверять в акцепте ивенты и всё. А вот с мышкой без таймера не обойтись, наверно.