Страницы: 1
RSS
Как программно отключить колесико мыши
 
Добрый день!

Есть необходимость отключать / включать в макросе колесико мыши. Прочитал в интернете, на одном из форумов, что это можно реализовать используя функции API, но кода так и не нашел. Если у кого имеется код как отключать колесико (и включать) - поделитесь.
 
Добрый! А при чем здесь Excel?
«Бритва Оккама» или «Принцип Калашникова»?
 
Отключение должно происходить из макроса, макрос находиться в файле Excel.
 
Ясно. Хотим в общих чертах, тогда так.
«Бритва Оккама» или «Принцип Калашникова»?
 
Evgenyy, какова цель отключения колесика? Может, можно обойтись другими средствами, например как тут: https://www.mrexcel.com/forum/excel-questions/803712-disabling-mouse-scroll-wheel.html

А тут DLL специальная: http://www.lebans.com/mousewheelonoff.htm
Изменено: Казанский - 07.04.2019 18:13:00
 
Казанский, в общем тема такая: закрепление нижней части таблицы (несколько строк с итогами).
Убираем вертикальный ScrollBar. Вверху и внизу кнопки вместо ScrollBar. На кнопках  макросы вращают таблицу вверх и вниз. Верхняя часть таблицы закреплена, а нижняя жестко плавает. Середина таблицы вращается вверх-вниз. В принципе всё работает. Осталось только допилить отключение прокрутки листа мышью, чтобы не сдвигалась нижняя часть колесом мыши.
 
Evgenyy, так может проще не колесом управлять, а Scrolarea определять ? Тем более, что есть возможность скролить мышкой без колеса.
Изменено: БМВ - 07.04.2019 19:10:27
По вопросам из тем форума, личку не читаю.
 
БМВ, а колесом не надо управлять, его надо отключать. Таблица 800 строк и строки то удаляются, то добавляются новые. Как определять Scrollarea? На данном этапе я хочу реализовать свои задумки именно через отключение прокрутки листа мышью.
Изменено: Evgenyy - 07.04.2019 19:21:01
 
Цитата
Evgenyy написал:
БМВ , а колесом не надо управлять, его надо отключать.
я имел в виду управлять реакцией на колесо.
По вопросам из тем форума, личку не читаю.
 
Добрый день!

Сходил по указанным выше ссылкам, почитал, но так и не понял что, где и как применить, поэтому снова поднимаю эту тему.
Мне не надо отслеживать события мыши и как-то на них реагировать, мне просто надо ОТКЛЮЧАТЬ МЫШИНОЕ КОЛЕСО!
Есть простой переключатель в него надо вставить код, задекларировать функции API, добавить какие-либо процедуры и т.д. Кто-то на форуме может помочь в решении этого вопроса?
Код
Private Sub TurnOn4()
    If Flag4 Then
        Flag4 = False
        
'       здесь должно происходить отключение
'       колеса прокрутки мыши
        
        ActiveWindow.DisplayVerticalScrollBar = False
        Shp9.Visible = True: Shp10.Visible = True
        Shp8.TextFrame.Characters.Font.ColorIndex = 3
    Else
        Flag4 = True
        
'       здесь должно происходить включение
'       колеса прокрутки мыши


        Shp9.Visible = False: Shp10.Visible = False
        ActiveWindow.DisplayVerticalScrollBar = True
        Shp8.TextFrame.Characters.Font.ColorIndex = xlAutomatic
    End If
End Sub
Изменено: Evgenyy - 09.04.2019 15:33:48
 
Цитата
Evgenyy написал:
таблица 800 строк и строки то удаляются, то добавляются новые. Как определять Scrollarea?
В предыдущей ващей теме мы находили последнюю видимую строку, при условии скрытых ……. Если я правильно помню, то шапку и подвал нужно было оставить недвижимыми. И это как раз и будет область возможной прокрутки, вы б нарисовали пример крохотный, что хотите реализовать, может так бы дело пошло лучше, ведь , как я написал, скролить можно не колесом, а нажал на него, как на кнопку и отпутстил,

появилась возможность скролить. и всё что было сделано прахом идет.
По вопросам из тем форума, личку не читаю.
 
БМВ, за предыдущую тему благодарю, разобрался - всё работает.
По поводу реализации написал в #6. И сейчас в принципе все работает, но иногда задеваешь колесо и нижняя часть таблицы съезжает, поэтому и хочу отключать колесо, когда скролю макросами.
 
Evgenyy, как организовано скрытие и открытие строк и скролинг? Программно. Это означает, что перед действием scrollarea снимается, и после устанавливается нужная, если это необходимо, а может и просто зафиксировать можно. См. пример
По вопросам из тем форума, личку не читаю.
 
Off. Коты обленились совсем: мышиная тема, а они ни гу-гу...
Владимир
 
sokol92, Владимир, да ваще, отдуваюсь за них :-)
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
да ваще, отдуваюсь за них
Offtop
Пашите медведи, белая ночь почти на носу :)
 
БМВ, посмотрел ваш пример. Если использовать Scrollarea, то придётся вносить много изменений в уже написанный код. Ваш вариант имеет право на существование, но у меня другая логика и сейчас я вижу реализацию поставленной задачи через функции WinAPI. Если я даже не найду решения на форуме - не беда. Решение данной задачи лишь небольшой штрих, который бы являлся завершением всей картины.
Изменено: Evgenyy - 10.04.2019 01:02:13
 
Evgenyy, Не хотите показать Ваш проект (можно частным образом)? Мне кажется переделок окажется не так много. Я в примере  использовал статический регион, просто для простоты, но ведь если блокировка такая Вас устраивает, то достаточно ( как и в случае с защитой листа) просто отключать и включать обратно, на время работы кода. Но вам решать. мне кажется с API будет больше проблем, а корректно обрабатывать события, в том числе и например зависание Excel и его аварийное закрытие. которое приведет к отключению колеса для других приложений, может оказаться и невозможным.
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
которое приведет к отключению колеса для других приложений
Ну, если идти таким путём, то комбинация: изменение в реестре, ну и обновление при помощи SystemParametersInfo. Описание как это возможно работает для смены курсора в системе здесь.
 
Уважаемый Evgenyy!
Интересно, этот Алгоритм для КОГО?
Для Юзера или Лично для Вас?  :D
 
Мотя, это лично для меня.

БМВ, оставьте адрес электронной почты в личных сообщениях. Потестирую ещё, уберу мелкие недочёты и на следующей неделе предоставлю.
 
отправил, но достаточно и не чистового варианта, просто нужно посмотреть, что у Вас  когда срабатывает и что не должно скролится.
По вопросам из тем форума, личку не читаю.
 
Имхо плохая практика трогать системщину за пределами пользовательского окна программы. Правильно делать - перехватывать сообщения от системы (драйвера, winapi в пределах окна вашего приложения, и что-делать или не делать на ваш выбор, ссылку я вам высылал выше). А если вы отключите мыша, как предложил Андрей (Андрей привет) через реестр, то при краше вашего приложения или переключения окна, к примеру на почту, я увижу что у меня не работает колесико или кнопки мыши, и  это очень меня не порадует, как пользователя, как заказчика, да и как спеца.
«Бритва Оккама» или «Принцип Калашникова»?
 
bedvit, ходил по Вашей ссылке, не разобрался. Если бы Вы подробно разжевали что и как, было бы замечательно. Не все такие спецы как Вы.  
 
bedvit, так и я об этом.
Цитата
БМВ написал:
будет больше проблем, а корректно обрабатывать события, в том числе и например зависание Excel и его аварийное закрытие. которое приведет к отключению колеса для других приложений,
Одно дело установить навсегда, а туда сюда дергать - ни к чему хорошему не приведет. Если прибавить, что SystemParametersInfo равносильно
rundll32.exe user32.dll,UpdatePerUserSystemParameters в XP,  а это означает перечитать все подобные настройки то дерготня лишняя.
По вопросам из тем форума, личку не читаю.
 
БМВ, согласен.
Evgenyy, winapi довольно специфический раздел программирования, это довольно низкоуровневые функции. С ними не просто, нужно помнить о том, что они могут зависеть от ряда параметров: разрядность системы, версии, юникод/ansi могут и не зависеть, нужно читать матчасть. Поэтому их сложнее обслуживать на широком спектре систем или больше писать кода. Поэтому если можно сделать проще, почему нет (см. подпись). Тем более вам БМВ,  предлагает помочь. Если совсем станет невмоготу, посмотрю чем можно помочь, но времени мало и мне хватило их напиливать в графике, когда делал одну из программ.
«Бритва Оккама» или «Принцип Калашникова»?
Страницы: 1
Наверх