gifts2017

Пример реализации прокрутки для тач-интерфейса.

Опубликовал Станислав Раташнюк (stanru1) в раздел Программирование - Работа с интерфейсом

Обработка + внешняя компонента, которые позволяют добиться того, что так нужно любому тач-интерфейсу: прокрутки списков пальцем!

     Пример, который я хочу вам предложить, не претендует на новизну, свежий взгляд или самое красивое решение. Возможно, это даже очередной велосипед. Возможно, содержит ошибки, как логические, так и методические. Однако, на Инфостарте я не нашел обработки, которая помогла бы мне решить текущую задачу, а именно - нарисовать удобный тач интерфейс для моноблока с сенсорным экраном. Поэтому, как умел, сделал сам. Возможно, кому-то мой опыт покажется полезным.

    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. Для корректной работы прокрутки необходимо у таблицы формы выставить следующие свойства:

Разрешить начало перетаскивания - Истина

Разрешить перетаскивание - Ложь

Скачать файлы

Наименование Файл Версия Размер
Обработка + ВК 87
.epf 17,25Kb
12.04.13
87
.epf 17,25Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Александр Тарасов (Sholl) 28.03.13 11:04
Классная штука.
+1
Вопрос: можно ли убрать предупреждение: внешняя компонента успешно установлена?
2. Станислав Раташнюк (stanru1) 28.03.13 23:50
(1) обновил обработку, теперь почем зря предупреждение не выскакивает.
3. Юрий Осипов (yuraos) 29.03.13 06:21
(2) stanru1,

1С 8.2 и управляемые формы достаточно гибки (особенно вспоминая ужас работы с интерфейсом 7.7).


И в чем именно этот "ужас" заключался ???
4. Станислав Раташнюк (stanru1) 29.03.13 08:52
(3) эти слова - не огульное обвинение 7.7, а беззлобное подтрунивание
если серьезно, то в 7.7, например, формы надо было рисовать, расставляя элементы управления в нужном порядке. в 8.2 платформа сама их размещает. Не было в 7.7 динамических списков. Не было настоек условного оформления.
Разумеется, владея formex можно было сделать многое, но в 8.2 это делать удобнее.
5. Юрий Осипов (yuraos) 29.03.13 19:12
(4) stanru1,
а ... это ты про штатные возможности 1с-7.7.

ну да, в 1с-7.7 интерфейсные возможности более чем скромны.
сам использовал formex для их разнообразия.

мне почему-то показалось
что ты сравниваешь обычный интерфейс 1с-8.2 с управляемым

и я сразу изготовился поднять тему
о "кошмариках" управляемого приложения
:)
6. Юрий Осипов (yuraos) 29.03.13 19:14
stanru1,
классный у тебя котяра!
;)
7. Hellgga 29.03.13 20:48
(6) yuraos, Это вроде не котяра, а манул...
Вот ещё один :)
Прикрепленные файлы:
8. Станислав Раташнюк (stanru1) 29.03.13 21:29
(6) yuraos, спасибо! Этот котяра был в подарках "контакта". Оттуда я его и уволок.

(7) Hellgga, именно манул это и есть.
9. Юрий Осипов (yuraos) 29.03.13 22:13
10. Александр Тарасов (Sholl) 11.04.13 18:48
А можно добавить свойство "Чувствительность"?
Типа на сколько движений мыши будет один скролл.
Или ограничение количества сколлов в секунду.
11. Станислав Раташнюк (stanru1) 12.04.13 12:17
(10) добавил свойство "Чувствительность". При Ч. = 1 скролл происходит "по умолчанию". При увеличении Ч. - замедляется.
12. tdsk tdsk (tdsk) 06.02.14 14:52
Выложите пожалуйста dll. Пытаюсь переписать на 8.1 и никак не могу вытащить ВК из обработки, винд 7 не хочет её регистрировать
Прикрепленные файлы:
13. dindzilin@yandex.ru (dindzilin) 26.02.14 19:01
Насколько помню, компоненты по технологии NativeAPI не нуждаются в регистрации в этом их фишка. А вот может ли 8.1 с ними работать - не уверен, по моему нет. Проще переписать на технологию COM.
Виталик; +1 Ответить
14. dindzilin@yandex.ru (dindzilin) 03.03.14 16:30
Есть вопрос автору - есть идеи как реализовать то же самое только на табличном документе?
15. Неран Гкреси (LeaNaeD) 06.04.14 16:25
Присоединяюсь по поводу табличного документа. Но больше всего хотелось бы посмотреть рабочий пример сенсорной прокрутки самой формы или данных панели. Тыцкать пальцем за ползунок и тянуууууть - невеселое занятие это все.
Прикрепленные файлы:
16. Edgar (Edgar70) 16.12.14 11:52
Аналогично, вопрос по прокрутке формы... можно ли это реализовать? или хотябы кнопку которая эмулирует прокрутку колесом мышки?
17. Дмитрий Смирнов (ParabolParabola) 16.12.14 15:03
Вообще не понятно как она работает. На Windows 8, что с этой обработкой, что без нее, ничего не меняется, справочники не листаются.
18. Edgar (Edgar70) 17.12.14 07:26
(17) ParabolParabola, Насчет журнала справочников не знаю, а вот динамические списки листает прекрасно и в win 7 и в win 8(.1)
По сути, для прокрутки формы проблема заключается только в том, как активировать захват мышки без выделения какого либо элемента
19. Дмитрий Смирнов (ParabolParabola) 16.02.15 11:08
На windovs server 2008, не регистрируется MouseEvents.dll, как можно зарегистрировать эту dll?
20. Edgar (Edgar70) 25.03.15 09:59
(19) ParabolParabola, Запустить от имени админа 1ску?
(2) stanru1, Возникла проблема на планшете - при частом пролистывании компонента подвисает :(
и при активном открытии/закрытии форм может вылететь и больше не включиться... автор, подскажи плиз, как можно усовершенствовать? повысить стабильность? сверхнеобходимая штука! :)
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа