|   |   | 
| 
 | v7: FormEx: ПриНажатииКнопкиКлавиатуры | ☑ | ||
|---|---|---|---|---|
| 0
    
        AL CAPONE 21.11.11✎ 15:17 | 
        Имеется код
  Процедура ПриНажатииКнопкиКлавиатуры(Код,Альт,Шифт,Контрл,Символ,Флаг) Если Форма.АктивныйЭлемент() = "Сумма" Тогда Если Код = 77 Тогда Сообщить("Нажали ""m"" "); Сумма = Сумма * 1000; КонецЕсли; КонецЕсли; КонецПроцедуры Принажатии на клаве "m" месага выскакивает, но сумма не изменяется. Если же к примеру повесить на кнопку Сумма = Сумма * 1000; всё отрабатывает безупречно. В чём всё таки загвоздка ? | |||
| 1
    
        AL CAPONE 21.11.11✎ 15:18 | 
        Сумма - реквизит табличной части типа "Число.15.0"     | |||
| 2
    
        Ткачев 21.11.11✎ 15:20 | 
        Что то мне кажется что Функцию надо и Возврат (Сумма * 1000);     | |||
| 3
    
        AL CAPONE 21.11.11✎ 15:23 | 
        (2)
  не, в FormEx это предопределённая процедура Процедура ПриНажатииКнопкиКлавиатуры(<?>,,,,,) КонецПроцедуры Синтаксис: Процедура ПриНажатииКнопкиКлавиатуры(<КодКлавиши>,<Alt>,<Shift>,<Ctrl>,<Символ>,<ФСО>) КонецПроцедуры Назначение: Предопределенная процедура при нажатии кнопки клавиатуры. Параметры: <КодКлавиши> - код нажатой кнопки клавиатуры. <Alt> - флаг нажатия кнопки <Shift> - флаг нажатия кнопки <Ctrl> - флаг нажатия кнопки <Символ> - символ нажатой кнопки в формате ASCII. <ФСО> - флаг стандартной обработки. Изначально равен 1. Если в теле процедуры сбросить значение в 0, то стандартная обработка события не вызывается. | |||
| 4
    
        Tatitutu 21.11.11✎ 15:25 | 
        в том что это реквизит табличной части     | |||
| 5
    
        akaBrr 21.11.11✎ 15:25 | 
        (0) Как отображается сумма?     | |||
| 6
    
        Tatitutu 21.11.11✎ 15:27 | 
        Попробуй так:
  НовоеЗначение = Сумма * 1000; УстановитьАтрибут("Сумма",НовоеЗначение) | |||
| 7
    
        antoneus 21.11.11✎ 15:27 | 
        умврчяднт?     | |||
| 8
    
        AL CAPONE 21.11.11✎ 15:31 | 
        (4)
  но по кнопке то отрабатывает (5) т.е. ? (6) Процедура не обнаружена (УстановитьАтрибут) | |||
| 9
    
        FN 21.11.11✎ 15:36 | 
        Форма.Обновить() - ?     | |||
| 10
    
        Ёпрст гуру 21.11.11✎ 15:38 | 
        В ПриОтжатииКнопкиКлавы делай.     | |||
| 11
    
        AL CAPONE 21.11.11✎ 15:41 | 
        (9,10)
  не помогает :( | |||
| 12
    
        AL CAPONE 21.11.11✎ 15:43 | 
        Отладчик показывает, что значение Сумма увеличилось на 3 нуля, но на форме сумма не изменяется.     | |||
| 13
    
        FN 21.11.11✎ 15:57 | 
        (12) ну тогда точно Форма.Обновить()
  Для проверки - нажми в документ "м", сохрани/закрой док и открой заново | |||
| 14
    
        Ёпрст гуру 21.11.11✎ 16:02 | 
        Процедура ПриНажатииКнопкиКлавиатуры(Код,Альт,Шифт,Контрл,Символ,Флаг)
  Если Форма.АктивныйЭлемент() = "Сумма" Тогда Если Код = 77 Тогда Флаг=0; Сообщить("Нажали ""m"" "); Сумма = Сумма * 1000; Форма.Обновить(0); КонецЕсли; КонецЕсли; КонецПроцедуры | |||
| 15
    
        Ёпрст гуру 21.11.11✎ 16:02 | 
        (13) Достаточно по строкам "побегать"     | |||
| 16
    
        AL CAPONE 21.11.11✎ 16:05 | 
        Добавил Форма.Обновить(), но это ПЗДЦ
  Захожу в сумму, набираю "1", жму "m", нихера, в процедуру заходит, значение Суммы увеличивает на 3 нуля, на форме "1". Если перед этим тискануть на кнопку с формулой Сумма = Сумма * 1000;, на форме становится "1.000.000", потом стать в поле суммы и нажать "m", начинает отрабатывать и на форме нормально, становится "1.000.000" и т.д. | |||
| 17
    
        FN 21.11.11✎ 16:10 | 
        >Захожу в сумму, набираю "1", <ЖМУ ЭНТЕР> жму "m"...
  Иначе переписывай через сендкей "0","0","0" | |||
| 18
    
        FN 21.11.11✎ 16:11 | 
        (17)+ Либо делай ложное закрытие формы (тогда "1" запишется в значение реквизита), а потом *1000     | |||
| 19
    
        AL CAPONE 21.11.11✎ 16:13 | 
        (17)
  нет, Enter-а там нету, сразу после цифры жму забитую в проге кнопку "m", процедура отрабатывает, но форма не обновляется; если же перед этим тискануть на кнопку с формулой Сумма = Сумма * 1000, на форме 1.000, и далее уже после "m" 1.000.000 1.000.000.000 и т.д. | |||
| 20
    
        Ёпрст гуру 21.11.11✎ 16:15 | 
        (16) дословно скопируй код из (14) и проверь     | |||
| 21
    
        AL CAPONE 21.11.11✎ 16:22 | 
        (20)
  Хз почему, но не работает :( Попробовал так Перем ЗапретЗакрытияФормы; Процедура ПриНажатииКнопкиКлавиатуры(Код,Альт,Шифт,Контрл,Символ,Флаг) Если Форма.АктивныйЭлемент() = "Сумма" Тогда Если Код = 77 Тогда Сообщить("m"); Сумма = Сумма * 1000; ЗапретЗакрытияФормы = 1; Форма.Закрыть(0); КонецЕсли; КонецЕсли; КонецПроцедуры Процедура ПриЗакрытии() Если ЗапретЗакрытияФормы = 1 Тогда Активизировать("Сумма",1); ЗапретЗакрытияФормы = 0; СтатусВозврата(0); Возврат; КонецЕсли; КонецПроцедуры ЗапретЗакрытияФормы = 0; При входе в сумму жму "1", далее "m", ничего не происходит, но курсор становится перед цифрой 1, после второго и последующих нажатий "m" наконец-то получается 1.000 , 1.000.000 и т.д. | |||
| 22
    
        Ёпрст гуру 21.11.11✎ 16:24 | 
        (21) ты читать то умеешь ? Скопируй дословно код из (14).     | |||
| 23
    
        AL CAPONE 21.11.11✎ 16:30 | 
        (22)
  НЕ РАБОТАЕТ ЭТОТ КОД, ну не обновляет форму и всё тут | |||
| 24
    
        Ёпрст гуру 21.11.11✎ 16:30 | 
        (23) врешь. я проверил - всё работает     | |||
| 25
    
        AL CAPONE 21.11.11✎ 16:31 | 
        (24)
  ну значит форма какая-то заколдованная | |||
| 26
    
        zuza 21.11.11✎ 16:31 | 
        (23) флаг в ноль поставь
  Флаг = 0; | |||
| 27
    
        AL CAPONE 21.11.11✎ 16:33 | 
        (26)
  да пробовал дословно, ну не отрабатывает как надо :((( | |||
| 28
    
        FN 21.11.11✎ 16:39 | 
        Перем ЗапретЗакрытияФормы;
  Процедура ПриНажатииКнопкиКлавиатуры(Код,Альт,Шифт,Контрл,Символ,Флаг) Если Форма.АктивныйЭлемент() = "Сумма" Тогда Если Код = 77 Тогда Флаг=0;ЗапретЗакрытияФормы = 1; Форма.Закрыть(0); Сумма = Сумма * 1000;Форма.Обновить(0); КонецЕсли; КонецЕсли; КонецПроцедуры Процедура ПриЗакрытии() Если ЗапретЗакрытияФормы = 1 Тогда Активизировать("Сумма",1); ЗапретЗакрытияФормы = 0; СтатусВозврата(0); Возврат; КонецЕсли; КонецПроцедуры ЗапретЗакрытияФормы = 0; Должно работать и в процессе редактирования реквизита и просто при активном элементе. | |||
| 29
    
        AL CAPONE 21.11.11✎ 16:42 | 
        (24)
  Отрабатывает твоя процедура, но уже на сохранённом значении Суммы. Если же вводится в сумму новое значение "1", то после нажатия "m" процедура отрабатывает, но на форме в сумме становится "0" о_О Если же в ячёйке Суммы уже 1 и ячейка сохранена, то при нажатии "m" на ней становится 1.000 и т.д. | |||
| 30
    
        AL CAPONE 21.11.11✎ 16:50 | 
        (28)
  это то же самое, что у меня в (21), работает но только после второго нажатия "m", после первого только и всего, что курсор становится перед числом. | |||
| 31
    
        FN 21.11.11✎ 17:17 | 
        вот так будет работать, но это не надежно - есть вариант, что за эту секунду изменится текущая строка.
  Процедура Добавить1000() Форма.обработкаОжидания("Добавить1000",0); Кво=Кво*1000; Форма.Обновить(0); КонецПроцедуры // Добавить1000 Процедура ПриНажатииКнопкиКлавиатуры(Код,Альт,Шифт,Контрл,Символ,Флаг) Если Форма.АктивныйЭлемент() = "Кво" Тогда Если Код = 77 Тогда Флаг=0;ЗапретЗакрытияФормы = 1; Форма.Закрыть(0); Форма.обработкаОжидания("Добавить1000",1); КонецЕсли; КонецЕсли; КонецПроцедуры Процедура ПриЗакрытии() Если ЗапретЗакрытияФормы = 1 Тогда Активизировать("Кво",0); ЗапретЗакрытияФормы = 0; СтатусВозврата(0); Возврат; КонецЕсли; КонецПроцедуры | |||
| 32
    
        AL CAPONE 21.11.11✎ 17:57 | 
        (31)
  мудрёно, попробую, спасибо за помощь ! | |||
| 33
    
        Ёпрст гуру 21.11.11✎ 17:59 | 
        (29) ясен пень, а ты как хотел ? Ввод еще не окончен, в реквизите Сумма =0 еще при этом.     | |||
| 34
    
        AL CAPONE 22.11.11✎ 09:15 | 
        (33)
  ну вот, а юзверь хочет как раз на лету эти цифры добавлять, когда в ячейке ещё числа и не было сохранено | |||
| 35
    
        Ёпрст гуру 22.11.11✎ 09:17 | 
        (34) тогда придЁтся отлавливать каждое нажатие, и запоминать полученное значение в своей переменной. Потом уже умножать на значение этой переменной.     | |||
| 36
    
        Ёпрст гуру 22.11.11✎ 09:19 | 
        +35 либо по нажатию на "m" посылать ентер в начале (рули флагом фсо отмены в предопределенной проце), чтоб ввод был зафиксирован и потом уже помножать.     | |||
| 37
    
        AL CAPONE 22.11.11✎ 09:19 | 
        (35)
  что-то типа проверять каждое значение в поле в диапазоне {0..9} и сразу копировать его в переменную ? | |||
| 38
    
        AL CAPONE 22.11.11✎ 09:21 | 
        (36)
  посылать Энтер - это чем же ? | |||
| 39
    
        Ёпрст гуру 22.11.11✎ 09:24 | 
        (38) тем же формексом     | |||
| 40
    
        Ёпрст гуру 22.11.11✎ 09:25 | 
        (37) да.
  ЗЫ: если будешь эммулировать клавиатуру и посылать ентер, нужно будет втыкать еще "защиту от АЛьФа" - чтоб бесконечного цикла не получилось : нажимаешь-ловишь-нажимаешь-ловишь.. | |||
| 41
    
        AL CAPONE 22.11.11✎ 09:29 | 
        (39)
  попробовал так Попытка WSHShell = СоздатьОбъект("WScript.Shell"); WSHShell.SendKeys("{ENTER}"); Исключение КонецПопытки; Сумма = Сумма * 100; Форма.Обновить(0); после ввода 1 ячейка суммы Enter-ится, но значение в ней 0 | |||
| 42
    
        AL CAPONE 22.11.11✎ 09:55 | 
        Возможно всё не очень красиво, но вообщем работает так: объявил "Сум" глобальной переменной
  Если Код = 96 Тогда //НАКАПЛИВАЕМ ЦИФИРИ Сум = Число(Строка(Сум) + Строка("0")); КонецЕсли; Если Код = 97 Тогда Сум = Число(Строка(Сум) + Строка("1")); КонецЕсли; Если Код = 98 Тогда Сум = Число(Строка(Сум) + Строка("2")); КонецЕсли; Если Код = 99 Тогда Сум = Число(Строка(Сум) + Строка("3")); КонецЕсли; Если Код = 100 Тогда Сум = Число(Строка(Сум) + Строка("4")); КонецЕсли; Если Код = 101 Тогда Сум = Число(Строка(Сум) + Строка("5")); КонецЕсли; Если Код = 102 Тогда Сум = Число(Строка(Сум) + Строка("6")); КонецЕсли; Если Код = 103 Тогда Сум = Число(Строка(Сум) + Строка("7")); КонецЕсли; Если Код = 104 Тогда Сум = Число(Строка(Сум) + Строка("8")); КонецЕсли; Если Код = 105 Тогда Сум = Число(Строка(Сум) + Строка("9")); КонецЕсли; Если Код = 13 Тогда //СУММА ПОДТВЕРЖДЕНА Сум = 0; КонецЕсли; Если Код = 111 Тогда // ПО НАЖАТИИ "/" СУММА УМНОЖАЕТСЯ НА 100 Флаг = 0; Сум = Сум * 100; Сумма = Сум; Форма.Обновить(0); ИначеЕсли Код = 106 Тогда // ПО НАЖАТИИ "*" СУММА УМНОЖАЕТСЯ НА 1000 Флаг = 0; Сум = Сум * 1000; Сумма = Сум; Форма.Обновить(0); КонецЕсли; Всё как просил юзверь =) | |||
| 43
    
        Ёпрст гуру 22.11.11✎ 09:56 | 
        Можно так:
  Перем РасшФ; Процедура УвеличитьСумму() Расшф.ОбработкаОжидания("УвеличитьСумму",0); Сумма = Сумма * 1000; Форма.Обновить(0); КонецПроцедуры Процедура ПриНажатииКнопкиКлавиатуры(Код,Альт,Шифт,Контрл,Символ,Флаг) Если Форма.АктивныйЭлемент() = "Сумма" Тогда Если Код = 77 Тогда Если Сумма = 0 Тогда Сервис = СоздатьОбъект("Сервис"); Сервис.ЭмулироватьКлавиатуру("{ENTER}"); Расшф = СоздатьОбъект("РасширениеФормы"); Расшф.УстановитьФорму(Форма); Расшф.ОбработкаОжидания("УвеличитьСумму",10); Возврат; КонецЕсли; Флаг=0; Сумма = Сумма * 1000; Форма.Обновить(0); КонецЕсли; КонецЕсли; КонецПроцедуры | |||
| 44
    
        Ёпрст гуру 22.11.11✎ 09:58 | 
        (42) ты не учитываешь выделение мышой + кнопки del и BackSpace + возможность вставки цифры в середине числа.     | |||
| 45
    
        Ткачев 22.11.11✎ 10:05 | 
        Сумма = Форма.Сумма;
  Сумма = Сумма * 1000; Форма.Сумма = Сумма; не пробовали ? | |||
| 46
    
        Ёпрст гуру 22.11.11✎ 10:08 | 
        (45) Сумма - не реквизит формы, это раз,Форма.Сумма = Сумма; - это никогда не будет работать, даже если Сумма была бы реквизитом формы, а не документа, это два.     | |||
| 47
    
        Ткачев 22.11.11✎ 10:15 | 
        (46)>Сумма - не реквизит формы
  А где тогда он сумму набирает ? ... Если Форма.АктивныйЭлемент() = "Сумма" Тогда | |||
| 48
    
        AL CAPONE 22.11.11✎ 10:18 | 
        (43)
  отрабатывает нормуль только 1 раз. Если нужно 6 нулей, уже не хочет. (44) хм, даже не подумал ... | |||
| 49
    
        AL CAPONE 22.11.11✎ 10:26 | 
        (44)
  а вот и лекарство для BackSpace Если Код = 8 Тогда Сум = Число(Лев(Строка(Сум),СтрДлина(Строка(Сум)) - 1)); КонецЕсли; | |||
| 50
    
        Ёпрст гуру 22.11.11✎ 10:26 | 
        (47) сумма  - это реквизит табличной части документа.
  Не путай теплое с мягким (48) в смысле ? У меня работает.. проверено. Сколько раз m нажал, столько и помножит, не зависимо от того, когда вводить начали | |||
| 51
    
        AL CAPONE 22.11.11✎ 10:37 | 
        (50)
  по первому нажатию "m" поле теряет фокус почему-то, и второе соотв. не срабатывает. Юзверя всё устроило, уря, оставлю пожалуй свой вариант проги, как-то он понятнее, без обид Ёпрст3. Всем спасибо за помощь ! | |||
| 52
    
        Ёпрст гуру 22.11.11✎ 11:32 | 
        (51) ну дык, сделай тогда
  Сервис.ЭмулироватьКлавиатуру("{ENTER 2}"); + еще нажатие end или home чтоб курсор был там где надо Будет тебе реквизит в режиме редактирования всегда | |||
| 53
    
        ChMikle 22.11.11✎ 12:48 | 
        (15) ЗА оффтопик извините , но читал вчера ваш пример на инфостате об изменении шрифтов на форме посредством вышеуказанной компоненты ,  набил все это у себя , ругается на неизвестный объект "Зум" , не вразумите , может еще какие библиотеки надо подключать ....     | |||
| 54
    
        FN 22.11.11✎ 12:55 | 
        (53) Может это про какой-то мой пример? а то у меня есть класс Зум и он как раз на инфостарте лежит...     | |||
| 55
    
        ChMikle 22.11.11✎ 13:33 | 
        был вроде Епрст , ну подскажите вы буду благодарен     | |||
| 56
    
        ChMikle 22.11.11✎ 13:43 | 
        http://infostart.ru/public/60448/ вобщем хелп (тихо так, глядя в моник) :)     | |||
| 57
    
        Ёпрст гуру 22.11.11✎ 13:54 | 
        (56) для работы этого класса нужно загрузить 1cpp.dll и formex.dll     | |||
| 58
    
        ChMikle 22.11.11✎ 14:29 | 
        (57)Загрузил , на закладке параметры появились обе библиотЭки,и пример вбил в исходник формы , но ругается .... хотя другой пример с бибилиотекой Formex работал     | |||
| 59
    
        Ёпрст гуру 22.11.11✎ 14:30 | 
        (58) это ты автора класса спрашивай, мне лень глядеть что там.     | |||
| 60
    
        antoneus 22.11.11✎ 14:31 | 
        ругается на неизвестный объект "Зум"? класс-то зарегистрировал?     | |||
| 61
    
        ChMikle 22.11.11✎ 15:22 | 
        да вроде да , буду в районе 19 часов за базой подробно напишу , вы на связи не будете , а то идея классная и как раз мне нужна , там форму подбора для сенсерного экрана одного размер шрифта табличной части , а для операторского другого , вот хочется этой библиотекой воспользоваться     | |||
| 62
    
        FN 22.11.11✎ 15:32 | 
        (61) Это я автор. Если будут вопросы - пиши на fn()inbox.ru     | |||
| 63
    
        ChMikle 22.11.11✎ 15:33 | 
        а вы в 19 на форуме будуте или в аське ....     | |||
| 64
    
        ChMikle 22.11.11✎ 15:41 | 
        19 часов :)     | |||
| 65
    
        FN 22.11.11✎ 15:41 | 
        в 19 по Москве я наверное смогу быть только в гугл-толке     | |||
| 66
    
        ChMikle 22.11.11✎ 15:44 | 
        а после 19 часов по мск , я с 19 до 21 буду около базы , отписался бы ... :) по почте долго , а ссылок нет на описание функционала     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |