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