| 
    
        
     
     | 
    
  | 
Нетленка - перехват событий клавиатуры | ☑ | ||
|---|---|---|---|---|
| 
    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) Обработчик будет один, только в нём будет условие когда и что вызывать - так проще.     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |