Страницы: 1
RSS
Включаем прокрутку колёсиком мышки для ListBox и ComboBox на x86 и x64
 
Привет друзья.
Выкладываю готовое решение для того чтобы включить прокрутку колёсиком мыша на ListBox и ComboBox на Userform.
В примере изобразил два варианта прокрутки. Кому какой нравится.
Как внедрить в свой проект:
- Перетаскиваем в свой проект модуль SCROLL_MOUSE_T или SCROLL_MOUSE_L методом Drag and Drop.
- Далее в своей форме указываем в процедуре наведения мыши MouseMove какой контрол хотим прокручивать.
Например, для Listbox будет выглядеть так:
Код
Private Sub ListBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Call HookListBoxScroll(Me, Me.ListBox1)
End Sub

Для Combobox так:
Код
Private Sub ComboBox1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Call HookListBoxScroll(Me, Me.ComboBox1)
End Sub

Тестировал на системах:
Windows 7 x86 Office 2010 x86
Windows 7 x64 Office 2013 x64
Windows 10 x64 Office 2013 x64
Если кто не понял как внедрить в свой проект, то можно посмотреть в видео

ПРИМЕЧАНИЕ:
Более стабильную версию смотри в Пост 16
Изменено: Alemox - 19.07.2020 21:28:01
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
105 роликов/уроков - это сильно.
«Бритва Оккама» или «Принцип Калашникова»?
 
Прокрутка, это хорошо.
А работать с ним как?
 
RAN, примерно так
По вопросам из тем форума, личку не читаю.
 
Скрытый текст
«Бритва Оккама» или «Принцип Калашникова»?
 
Виталий, расход сметаны больше чем напряжение на выходе :-).
По вопросам из тем форума, личку не читаю.
 
Alemox, приветствую! Значит я не ошибся  на YouTube :D
Годные штуки - заберу к себе. Спасибо!  :idea:
Цитата
RAN: А работать с ним как?
там же в видео подробно описано - перенести модуль к себе и вызывать
Изменено: Jack Famous - 25.11.2019 09:07:10
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Я так понимаю, этот код не работает на форме, на Page, в TextBox?
«Бритва Оккама» или «Принцип Калашникова»?
 
Конечно, если скрол самоцель, то все в порядке.
Но, обычно, для работы с листбоксом используют Click, или Change. А вот с этим напряг.
 
На Frame тестировал ещё, всё работало. На Textbox не тестировал.
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
На Frame работает. На TextBox, Page, UserForm - у меня прокрутка ScrollBars не взлетела. На UserForm тоже работает.
Изменено: bedvit - 25.11.2019 15:23:29
«Бритва Оккама» или «Принцип Калашникова»?
 
Не то написал.  :D
А на Userform ага тоже проверил. Для Userform отдельно допиливал чуть по другому дома вариант.
Изменено: Alemox - 25.11.2019 16:51:16
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
:(
 
RAN, Для этого случая сделан вариант TI, который осуществляет прокрутку по Topindex.
Немного поясню. Вариант L-это прокрутка осуществляется за счёт выделения по ListIndex. Вариант T-это прокрутка осуществляется по верхнему положению TopIndex.
Изменено: Alemox - 25.11.2019 19:28:16
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Второй не смотрел, каюсь.  :)
 
Обновил прокрутку для ListBox и ComboBox.
Сделал более стабильную версию.
Мышку ставим в нужный ListBox или ComboBox и елозим колёсиком.
Тестировал на системах:
Windows 7 x86 Office 2010 x86
Windows 7 x64 Office 2013 x64
Windows 10 x64 Office 2013 x64
Работает стабильнее чем первый вариант в пост 1.
Как внедрить в свой проект:
- Перетаскиваем в свой проект модуль Scroll_Mouse методом Drag and Drop.
- Далее в своей форме указываем в процедуре отпускания кнопки мыши MouseUp какой контрол хотим прокручивать.
- В форме в код QueryClose вставляем строку UnHookScroll
Пример для UserForm:
Код
Option Explicit

Private Sub ComboBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
HookScroll Me.ComboBox1
End Sub

Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
HookScroll Me.ListBox1
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
UnHookScroll
End Sub
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Предложение. Создать тему с описанием и примером - перекинем ее в Копилку.
 
У меня срабатывает ошибка на ComboBox'е при прокрутке. Мой комбобокс расположен ещё во Frame.
Сначала выскакивает ошибка с "Variable not set", а через секунду и вовсе: "Приложение MS Excel вызвало ошибку. Закрыть"
Жаль.
 
Alemox, Здравствуйте!
Открыл код модуля Scroll_Mouse и увидел там красноту. Это норм?
 
По идее норм, там опознание разрядности системы 64/32.
--------------


Я делал разлинованные таблицы в форме на основе генерируемых Label с прокруткой кликом по верхней/нижней "строке" этой таблицы. Соответственно весь этот выводимый массив меток перезаписывался при таком "скроллинге". Можно настроить шаг скролла. Если нужно, то могу на домашнем компе глянуть. Но там вроде ничего сложного.

--------------------------------------
Котовое колесо заинтересовало. У меня как раз несколько потенциальных генераторов жирком дома обрастает...
Изменено: Anchoret - 04.04.2023 01:22:58
 
Цитата
написал:
могу на домашнем компе глянуть
Если не затруднит, буду благодарен!
 
Цитата
написал:
разлинованные таблицы в форме на основе генерируемых Label
Вот это вкусно еще!
 
Цитата
Евгений Киреев: Это норм?
да — это штатное обозначение НЕРАБОЧЕГО на ДАННОЙ СИСТЕМЕ, но КОРРЕКТНО ОБРАБОТАННОГО кода (#If). При компиляции и работе ошибок не вызовет, комментировать ничего не надо.
Изменено: Jack Famous - 04.04.2023 09:42:50
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Евгений Киреев, завтра посмотрю. Там все это дело включено в довольно сложный многопроцедурный код. Нужно время чтобы вычленить нужное без потери его работоспособности)
 
Anchoret, подождем, ничего страшного!
 
Как-то так....

В итоге переписал заново)

Что имеем:
- выгружаемый на форму массив с ограничением по количеству строк и размеру шрифта + массив заголовков (двумерный)
- верхняя строка Label's с полезными данными (сразу после заголовков таблицы) - клик на этой строке приводит к скроллингу вверх на одну строку
- нижняя строка контролов - скролл на одну строку вниз
- клик по любому из заголовку - сортировка всей таблицы по текущей колонке. первый клик - сортировка по возрастанию, второй - по убыванию.

С размером шрифтов особо не экспериментировал, наверняка потребуется настройка процедуры вывода и расчета размеров формы, т.к. там все не так однозначно как хотелось бы. Сортировщики используются текст/числа. Собственно определение типа данных тоже идет в этом ключе, т.е. либо текст, либо число. Если наполнение таблицы будет разношерстными данными в рамках отдельно взятой колонки, то лучше переделать на универсальный сортер - он есть в модуле с процедурами.

Настраиваемый шаг скролла поленился делать)

П.С.: Второй файл скачал из первого поста - все работает. Автору - СПАСИБО!
Изменено: Anchoret - 08.04.2023 00:55:13 (Благодарности автору топика)
 
Alemox, подскажите, а что за "user32" в модуле в коде? Вставил, все работает, прокрутка. Но, пару раз эксель самопроизвольно закрывался, вылетал.
 
Супер! Спасибо огромное! Как альтернатива кнопкам клавиатуры: pageup и pagedown (они работают по умолчанию, кто не знал). Видео в ютуб не доступно, его нет, но итак все предельно просто и понятно.
Изменено: НСС - 28.07.2023 12:21:05
Страницы: 1
Наверх