Пример, который я хочу вам предложить, не претендует на новизну, свежий взгляд или самое красивое решение. Возможно, это даже очередной велосипед. Возможно, содержит ошибки, как логические, так и методические. Однако, на Инфостарте я не нашел обработки, которая помогла бы мне решить текущую задачу, а именно - нарисовать удобный тач интерфейс для моноблока с сенсорным экраном. Поэтому, как умел, сделал сам. Возможно, кому-то мой опыт покажется полезным.
1С 8.2 и управляемые формы достаточно гибки (особенно вспоминая ужас работы с интерфейсом 7.7). В принципе, почти все, что нужно, они сделать позволяют. Можно и кнопки большие реализовать, и шрифт. Остается одна принципиальная задача, я бы даже сказал, вызов - это прокрутка пальцем. Как пользователь планшета, я не понимаю, зачем существует тач интерфейс, если нет возможности пользоваться руками. Однако, проблема в том, что в 1С нельзя подписаться на события "MouseDown" и "MouseUp", а так же нельзя получить координаты курсора мыши. Палец же с точки зрения тач-интерфейса - это мышь. Поэтому, чтобы получить возможность прокручивать список, данные задачи стоит передать внешней компоненте.
Ок, данные от мыши получили. Встает следующая проблема :) 1С очень неловко (с точки зрения вмешательства) работает с табличным полем, которое привязано к динамическому списку. Нельзя ни получить общее количество строк, ни (в определенных случаях) получить номер текущей строки и увеличить его. Можно, конечно, пытаться как-нибудь выйти из положения с помощью скрытых колонок. Мне показалось, что лучшим вариантом будет "превратить" движения мыши вверх-вниз с зажатой кнопкой (= то есть движения пальца по экрану) в сообщения о прокрутке колеса мыши. 1С замечательно обрабатывает такие события без каких-либо ухищрений.
Итак, что представляет собой внешняя компонента?
Это dll по технологии NativeAPI, у которой есть 2 метода и 2 свойства.
Методы донельзя простые, это Включить() и Выключить()
Свойства тоже очевидны: Включен (чтение) и Активирован (чтение и запись).
Второе свойство служит для активации режима превращения MouseMove в MouseScroll.
С точки зрения Windows, компонента ставит глобальный хук на WH_MOUSE_LL. В случае активации блокирует сообщение WM_MOVE и шлет вместо него WM_MOUSEWHEEL.
Работа протестирована на УТ11 в средах Win7, WinXP, Win2003. Обработка умеет подключаться как дополнительная.
Компонента находится в макете обработки, приложенной к этой заметке. Сама обработка ничего толкового не делает - просто выводит список из 200 строк для тестирования прокрутки.
Для работы компоненты могут понадобиться C++ Redistributable.
12.04.2013
Добавлено свойство "Чувствительность". Параметр влияет на скорость прокрутки (то есть на скорость посыла сообщения для скролла). При Ч. = 1 скролл работает "по умолчанию" с "обычной" скоростью. При увеличении Ч. скролл замедляется. Тип параметра = целое число.
P.S. Для корректной работы прокрутки необходимо у таблицы формы выставить следующие свойства:
Разрешить начало перетаскивания - Истина
Разрешить перетаскивание - Ложь