Привет друзья. Выкладываю готовое решение для того чтобы включить прокрутку колёсиком мыша на 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
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок. А в том, чтобы писать программы, работающие при любом количестве ошибок.
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
На Frame тестировал ещё, всё работало. На Textbox не тестировал.
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок. А в том, чтобы писать программы, работающие при любом количестве ошибок.
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок. А в том, чтобы писать программы, работающие при любом количестве ошибок.
RAN, Для этого случая сделан вариант TI, который осуществляет прокрутку по Topindex. Немного поясню. Вариант L-это прокрутка осуществляется за счёт выделения по ListIndex. Вариант T-это прокрутка осуществляется по верхнему положению TopIndex.
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок. А в том, чтобы писать программы, работающие при любом количестве ошибок.
Обновил прокрутку для 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 вызвало ошибку. Закрыть" Жаль.
По идее норм, там опознание разрядности системы 64/32. --------------
Я делал разлинованные таблицы в форме на основе генерируемых Label с прокруткой кликом по верхней/нижней "строке" этой таблицы. Соответственно весь этот выводимый массив меток перезаписывался при таком "скроллинге". Можно настроить шаг скролла. Если нужно, то могу на домашнем компе глянуть. Но там вроде ничего сложного.
-------------------------------------- Котовое колесо заинтересовало. У меня как раз несколько потенциальных генераторов жирком дома обрастает...
да — это штатное обозначение НЕРАБОЧЕГО на ДАННОЙ СИСТЕМЕ, но КОРРЕКТНО ОБРАБОТАННОГО кода (#If). При компиляции и работе ошибок не вызовет, комментировать ничего не надо.
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Евгений Киреев, завтра посмотрю. Там все это дело включено в довольно сложный многопроцедурный код. Нужно время чтобы вычленить нужное без потери его работоспособности)
Что имеем: - выгружаемый на форму массив с ограничением по количеству строк и размеру шрифта + массив заголовков (двумерный) - верхняя строка Label's с полезными данными (сразу после заголовков таблицы) - клик на этой строке приводит к скроллингу вверх на одну строку - нижняя строка контролов - скролл на одну строку вниз - клик по любому из заголовку - сортировка всей таблицы по текущей колонке. первый клик - сортировка по возрастанию, второй - по убыванию.
С размером шрифтов особо не экспериментировал, наверняка потребуется настройка процедуры вывода и расчета размеров формы, т.к. там все не так однозначно как хотелось бы. Сортировщики используются текст/числа. Собственно определение типа данных тоже идет в этом ключе, т.е. либо текст, либо число. Если наполнение таблицы будет разношерстными данными в рамках отдельно взятой колонки, то лучше переделать на универсальный сортер - он есть в модуле с процедурами.
Настраиваемый шаг скролла поленился делать)
П.С.: Второй файл скачал из первого поста - все работает. Автору - СПАСИБО!
Супер! Спасибо огромное! Как альтернатива кнопкам клавиатуры: pageup и pagedown (они работают по умолчанию, кто не знал). Видео в ютуб не доступно, его нет, но итак все предельно просто и понятно.