|
|
|
Отловить событие нажатия клавиши | ☑ | ||
|---|---|---|---|---|
|
0
Злобный Йожег
17.08.10
✎
08:26
|
Суть задачи в следующем. В ТЗ на форме содержится список документов. При переводе курсора на другую строку атрибуты формы перезаполняются соответствующими значениями реквизитов документа в тек. строке ТЗ. Для этого применяется 1СРР+Сервис, предопределенные процедуры ПриОтжатииЛевойКнопки, ПриНажатииКнопкиКлавиатуры. В первом случае все отрабатывается на 5, во втором есть небольшая проблема. Изначально система не успевала за сменой курсора, и потому при переходе на другую строку выдавались данные документа из предыдущей, на которой был установлен курсор. Эта проблема частично решилась, когда я стал отлавливать нажатие клавиш ВВерх-Вниз по коду, и т.о. получал ту строку, на которой нужно спозиционироваться в ТЗ. Вот код процедуры:
Процедура ПриНажатииКнопкиКлавиатуры(Код, Альт, Шифт, Контрол, Символ, ФСО) Если (Форма.АктивныйЭлемент() = "ТЗПартий") И (Найти("37_38_39_40", Строка(Код)) <> 0) Тогда ТекСтрокаТаблицы = ТЗПартий.ТекущаяСтрока(); Если ТекСтрокаТаблицы = 1 Тогда Шаг = ?(Код = 38, 0, ?(Код = 40, 1, 0)); ИначеЕсли ТекСтрокаТаблицы = ТЗпартий.КоличествоСтрок() Тогда Шаг = ?(Код = 38, -1, 0); Иначе Шаг = ?(Код = 38, -1, ?(Код = 40, 1, 0)); КонецЕсли; ТекСтрокаТаблицы = ТекСтрокаТаблицы+Шаг; ПереустановитьАтрибутыФормы(ТекСтрокаТаблицы); КонецЕсли; КонецПроцедуры НО! Остается еще 1 проблема: Т.к. юзер может перемещаться по ТЗ при помощи PageUp и PageDown, как в этом случае определить, на сколько шагов вверх/вниз он перешел? |
|||
|
1
Fragster
гуру
17.08.10
✎
08:35
|
здесь не нужет 1с++ с наворотами, достаточно на форму кинуть надпись с формулой
|
|||
|
2
Злобный Йожег
17.08.10
✎
08:40
|
(1) Была. Мы от нее специально уходим, ибо формула выполняется перманентно, пока открыта форма, и съедает больше памяти. Так что не вариант.
|
|||
|
3
1Сергей
17.08.10
✎
08:41
|
не понимаю, почему не используешь ТЗ.ТекущаяСтрока()?
|
|||
|
4
skunk
17.08.10
✎
08:41
|
||||
|
5
Злобный Йожег
17.08.10
✎
08:45
|
(3) Говорю же, когда переходишь в процедуре на другую строку и выполняешь в ней перерисовку реквизитов формы, 1с еще не успевает отловить номер новой строки.
|
|||
|
6
Злобный Йожег
17.08.10
✎
09:13
|
(4) Это опять-таки перманентное выполнение функции, которое будет всё так же вызывать доп. нагрузку на процессор.
|
|||
|
7
Fragster
гуру
17.08.10
✎
09:25
|
(2) если нормально написать - нагрузка будет минимальная
|
|||
|
8
Злобный Йожег
17.08.10
✎
09:26
|
(7) "А по-простому - это, простите, как?" (с) Собачье сердце
|
|||
|
9
smaharbA
17.08.10
✎
09:28
|
(0) запомнить прежнюю колонку и сравнить с текущей в тексте на форме
|
|||
|
10
smaharbA
17.08.10
✎
09:28
|
строку разумеется
|
|||
|
11
smaharbA
17.08.10
✎
09:30
|
на коньяк мпорил на адинесине об отлове строк и колонок по одному клику и тем более по кнопкам
|
|||
|
12
Злобный Йожег
17.08.10
✎
09:30
|
(9) блин... ну говорю же, в момент исполнения процедуры ПриНажатииКнопкиКлавиатуры() "прежняя" строка будет еще текущей.
|
|||
|
13
smaharbA
17.08.10
✎
09:37
|
(12)
|
|||
|
14
Злобный Йожег
17.08.10
✎
09:37
|
6ля... по ходу тут вообще никто не понимает, о чем речь
|
|||
|
15
smaharbA
17.08.10
✎
09:40
|
(14) все понимают
(13) в процедуре что на тексте на форме |
|||
|
16
Кириллка
17.08.10
✎
09:48
|
(14)при отжатии кнопки?
|
|||
|
17
Злобный Йожег
17.08.10
✎
09:49
|
(15) Т.е. предлагаешь вернуться к функции в формуле лейбла на форме? Так-то оно работает, и тормозит вроде меньше, но... Хотелось бы еще узнать про вариант решения вопроса в (0).
(16) ПриОтжатииКнопкиКлавиатуры()? такой процедуры вроде нет... |
|||
|
18
zuza
17.08.10
✎
09:53
|
(17) Процедура ПриОтжатииКнопкиКлавиатуры() КонецПроцедуры
Параметры: <КодКлавиши> - код нажатой кнопки клавиатуры. <Alt> - флаг нажатия кнопки <Shift> - флаг нажатия кнопки <Ctrl> - флаг нажатия кнопки <Символ> - символ нажатой кнопки в формате ASCII. <ФСО> - флаг стандартной обработки. Изначально равен 1. Если в теле процедуры сбросить значение в 0, то стандартная обработка события не вызывается. |
|||
|
19
Злобный Йожег
17.08.10
✎
09:57
|
(18) хм... А почему в СП о ней ни слова? Кстати, с какой версии 1С++ она появилась?
|
|||
|
20
smaharbA
17.08.10
✎
10:00
|
нафига тебе отлавливать нажатие - делается штатно
|
|||
|
21
smaharbA
17.08.10
✎
10:02
|
весь код сабжа
на форме ТЗ, текст с формулой КолонкаТЗ() и реквизиты формы НомерДок и ДатаДок
и ФСЁ ! |
|||
|
22
smaharbA
17.08.10
✎
10:03
|
и заполняет реквизиты формы и отслеживает одиночный клик и строку и колонку
|
|||
|
23
Злобный Йожег
17.08.10
✎
10:05
|
(22) А колесиком мыши если прокручивать? :)
|
|||
|
24
Ёпрст
гуру
17.08.10
✎
10:05
|
(19) это метод формекса, а не 1c++
|
|||
|
25
smaharbA
17.08.10
✎
10:06
|
Да хоть веретином !
|
|||
|
26
Злобный Йожег
17.08.10
✎
10:06
|
(24) Ну, какбэ формекс - это один из модулей 1С++?
|
|||
|
27
Ёпрст
гуру
17.08.10
✎
10:07
|
(26) нет, это отдельная ВК.
и только далеко в прошлом, было объединение 1с++ и формекса в 1 ВК.. с тех пор ужо хрен знает сколько лет прошло. |
|||
|
28
smaharbA
17.08.10
✎
10:11
|
||||
|
29
smaharbA
17.08.10
✎
10:16
|
а вообще тебе даже не надо (21)
текст на форме и заполняй в его функции реквизиты формы и опять же ФСЁ ! нафиг для (0) не надо клики и нажатия ловить |
|||
|
30
Злобный Йожег
17.08.10
✎
10:18
|
(29) Оно так и было!!
Единственное, что сделал после подсказок в этой ветке - добавил в функцию условие проверки по текущей строке. |
|||
|
31
Злобный Йожег
17.08.10
✎
10:42
|
Кстати, а сцылочкой на свежий релиз FormEx нихто не поделиццо?
|
|||
|
32
Ёпрст
гуру
17.08.10
✎
10:46
|
(31) www.dorex.ru
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |