|
Нетленка - перехват событий клавиатуры | ☑ | ||
---|---|---|---|---|
0
247tsm
27.10.14
✎
03:13
|
Доброй ночи, неспящим гуру 1С.
Уже долго бьюсь, но никак не получается перехватить нажатие на клавишу. У меня 1С8.1.15.14. Использую нетленку 2.2.1.193(СЕ). Задача с виду простая. В некотором приложении 1С нужно при простое, бездействии пользователя, например, 3 минуты запускать слайд-шоу, а при нажатии на любую клавишу остановить слайд-шоу. Вот код, где я хочу перехватить нажатие: Каталог = Константы.ПутьКслайдШоу.Получить(); ффф=0; Пока ффф=0 Цикл // Находим все файлы в выбранном каталоге НайденныеФайлы = НайтиФайлы(Каталог, "*"); Для каждого файл из НайденныеФайлы Цикл Если файл.ЭтоКаталог() Тогда Продолжить; КонецЕсли; Если ффф<>0 Тогда Прервать; КонецЕсли; ИмяФайла = Файл.ПолноеИмя; Картинка = Новый Картинка(ИмяФайла); Панель.Картинка = Картинка; глПауза(константы.ВремяПоказаСлайда.Получить()); КонецЦикла; КонецЦикла; Процедура Пауза(Сек) scr = Новый COMОбъект("WScript.Shell"); scr.Run("ping 127.0.0.1 -n "+СокрЛП(Число(Сек)+1),0,1); //нн = 1000 * Число(Сек); //Для н=1 по нн Цикл // р=1; //КонецЦикла; КонецПроцедуры При нажатии на клавишу я формирую ффф=5 и, по идее, циклы должны прерваться, но ничего не получается. Просто вечный цикл и всё. Если я просто без цикла вывожу одну картинку, то после ее вывода отслеживается нажатие клавиши. А в цикле ну никак не хочет. В процедуре Пауза я паузу делал разными способами, но всё равно не работает отслеживание нажатия, пока не закончится цикл. Что можно сделать? Может, у кого-нибудь есть работающий код для подобной задачи? Решение средствами Windows (screen saver) прошу не предлагать. |
|||
1
247tsm
27.10.14
✎
03:19
|
И вдогонку.
Я еще не знаю, как определить сам простой в 3 минуты. Время можно задать в константах. А дальше, наверно использовать процедуру отслеживания нажатия клавишей, или как-то по-другому? |
|||
2
lopus
27.10.14
✎
07:42
|
А обработчик ожидания не пойдет?
|
|||
3
lopus
27.10.14
✎
07:43
|
Ам сорри тут нужно обрабатывать нажатие
|
|||
4
Fragster
гуру
27.10.14
✎
08:01
|
как раз обработчик ожидания и подойдет
|
|||
5
dmpl
27.10.14
✎
08:09
|
(0) Пиши скрин-сейвер отдельно от 1С.
А вообще - ффф = 0 всегда, с чего вдруг оно на 5 сменится? |
|||
6
Torquader
27.10.14
✎
22:23
|
Открывайте слайд-шоу в "осле" поверх всего и там же ловите клавиши и закрываете "осла".
|
|||
7
User_Agronom
27.10.14
✎
22:37
|
Было давно, уже подзабыл: но прерывание опрашивающее клавиатуру можно было запустить двумя способами: первый ждал нажатие клавиши, а второй просто проверял нажата или нет.
На Turbo Pascacal была функция(?) keypressed и функция ReadKey() (точно функция) |
|||
8
247tsm
27.10.14
✎
23:17
|
(4) У меня такое впечатление, что перехватчик нажатия клавиши из НЕТЛЕНКИ работает только, когда программа простаивает. А в цикле не работает, т.к. не срабатывает внешнее событие формы.
Попробую обработчик ожидания. Но, наверно, нужны два обработчика. Один, чтобы организовать проверку времени простоя, а другой, чтобы организовать непосредственно слайд-шоу. Время следования слайдов буду задавать в константе. Обработчик ожидания будет в соответствии с этим временем запускать показ очередной картинки. А между показами программа будет простаивать и, значит, можно с помощью НЕТЛЕНКИ отследить нажатие клавиши. Наверно, так. (5) А зачем писать screen saver отдельно от 1С? Он уже есть - стандартный в windows. (6) Я не такой знаток 1С и не весь сленг понимаю. Что такое "осел"? |
|||
9
Torquader
27.10.14
✎
23:20
|
(8) А Screen Saver умеет плакаты показывать ?
P.S. писать Screen Saver очень просто - несколько экспортных функций и правильная обработка нажатия клавиш, ну и вывод чего-то на экран, причём поверх всех окон можно. |
|||
10
247tsm
27.10.14
✎
23:34
|
(9) А разве он не показывает картинки из заданной папки?
|
|||
11
247tsm
27.10.14
✎
23:55
|
А вообще, могут работать два обработчика ожидания сразу? Например, один вызывает процедуру каждые 5 минут, а другой - каждые 20 сек.
|
|||
12
247tsm
27.10.14
✎
23:57
|
Я имею в виду - второй вызывает другую процедуру, а ту же самую.
|
|||
13
Torquader
27.10.14
✎
23:57
|
(12) Обработчик будет один, только в нём будет условие когда и что вызывать - так проще.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |