Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.79/29: Рейтинг темы: голосов - 29, средняя оценка - 4.79
0 / 0 / 0
Регистрация: 26.01.2010
Сообщений: 20

Как отловить скроллинг колесом мыши?

23.03.2010, 13:53. Показов 5590. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть форма, на ней кроме всего прочего есть список ListBox, перезаполненный т.е. со скроллбаром.
Нужно все кручения колесика мыши над формой передавать скроллированию этого списка, как такое сделать?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.03.2010, 13:53
Ответы с готовыми решениями:

Прокрутка колесом мыши изображения в PictureBox
объясню наглядно ? вот что нужно в picturebox

Как отловить колесо мыши?
Здравствуйте! Может кто-нибудь сталкивался... У меня клиенты просят, чтобы таблицу можно было прокручивать колесом мыши. Но MSFlexGrid...

В VBE не работает прокрутка колесом мыши редактора кода
Можно подправить VB6, чтобы в VBE работало колесико мыши? Достает, однако.

23
Comanche
23.03.2010, 14:21
Попробуйте через Spy++ определить, какие именно сообщения летят, когда крутится колесо. Потом с помощью замены оконной процедуры формы вы сможете их перехватить и перенаправить куда надо.
Comanche
23.03.2010, 16:29
Дайте ваш и-мейл - скину готовый код.
Comanche
23.03.2010, 16:43
Короче. Сохраните этот текст как файл Form1.frm:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
VERSION 5.00
Begin VB.Form Form1 
   Caption         =   'Form1'
   ClientHeight    =   3900
   ClientLeft      =   60
   ClientTop       =   345
   ClientWidth     =   8220
   LinkTopic       =   'Form1'
   ScaleHeight     =   3900
   ScaleWidth      =   8220
   StartUpPosition =   2  'CenterScreen
   Begin VB.TextBox txtLog 
      BackColor       =   &H00C0FFFF&
      Height          =   3375
      Left            =   120
      MultiLine       =   -1  'True
      ScrollBars      =   2  'Vertical
      TabIndex        =   3
      Top             =   420
      Width           =   2355
   End
   Begin VB.TextBox Text1 
      Height          =   315
      Left            =   4620
      TabIndex        =   1
      Text            =   'Фокус - здесь, а прокрутка - у листбокса !'
      Top             =   180
      Width           =   3375
   End
   Begin VB.ListBox List1 
      Height          =   3570
      Left            =   2640
      TabIndex        =   0
      Top             =   180
      Width           =   1875
   End
   Begin VB.Label Label2 
      AutoSize        =   -1  'True
      Caption         =   'Протокол:'
      Height          =   195
      Left            =   120
      TabIndex        =   4
      Top             =   240
      Width           =   780
   End
   Begin VB.Label Label1 
      Caption         =   'Крутите колесом над любым местом формы - например, ниже этой надписи:'
      Height          =   435
      Left            =   4620
      TabIndex        =   2
      Top             =   600
      Width           =   3510
   End
End
Attribute VB_Name = 'Form1'
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Private Declare Function SendMessage Lib 'user32' Alias 'SendMessageA' _
    (ByVal hwnd As Long, _
    ByVal wMsg As Long, _
    ByVal wParam As Long, _
    lParam As Any) As Long
 
Private Const WM_VSCROLL = &H115
Private Const SB_LINEDOWN = 1
Private Const SB_LINEUP = 0
 
Private Sub Form_Activate()
    Text1.SetFocus
End Sub
 
Private Sub Form_Load()
     Dim i As Integer
     ' Наполняем список двумя сотнями строк:
     For i = 10000 To 10200
        List1.AddItem CStr(i)
     Next i
     ' Ставим перехват:
     IMWheel_Hook
End Sub
 
Private Sub Form_Unload(Cancel As Integer)
    IMWheel_Unhook
End Sub
 
Public Sub WheelMoved(ByVal delta As Long, X As Long, Y As Long)
    sMsg = 'X=' + CStr(X) + ', Y=' + CStr(Y) + ', delta=' + CStr(delta)
    With txtLog
        .SelStart = Len(.Text)
        If .SelStart = 0 Then
            .Text = sMsg
        Else
            .SelText = vbNewLine + sMsg
        End If
    End With
    ' (просто имеем возможность знать координаты мыши в момент
    '  прокрутки её колеса)
    If delta > 0 Then
        SendMessage List1.hwnd, WM_VSCROLL, SB_LINEUP, 0
    Else
        SendMessage List1.hwnd, WM_VSCROLL, SB_LINEDOWN, 0
    End If
End Sub
А этот - как Module1.bas:
[code]
Attribute VB_Name = 'Module1'
Public Declare Function CallNextHookEx Lib 'user32' (ByVal hHook As Long, _
ByVal nCode As Long, ByVal wParam As Integer, lParam As Any) As Long

Public Declare Function GetCurrentThreadId Lib 'kernel32' () As Long

Public Declare Funct
0 / 0 / 0
Регистрация: 26.01.2010
Сообщений: 20
23.03.2010, 16:43  [ТС]
было бы хорошо
commilfo#rbcmail.ru
0
0 / 0 / 0
Регистрация: 26.01.2010
Сообщений: 20
23.03.2010, 16:43  [ТС]
спасибо!
0
0 / 0 / 0
Регистрация: 26.01.2010
Сообщений: 20
23.03.2010, 16:53  [ТС]
пока что - не работает
кручу, не реагирует
если фокус передать списку, и проскроллить, чуть дергается и тут же вылетает с overflow в hook (IMWheel)
0
Comanche
23.03.2010, 17:06
Странно: у меня всё работает.
Spy++ проверяли? Те же сообщения надо ловить (MSWHEEL_ROLLMSG)?
0 / 0 / 0
Регистрация: 26.01.2010
Сообщений: 20
23.03.2010, 17:08  [ТС]
вылетало из-за того что в
Public Declare Function CallNextHookEx Lib 'user32' (ByVal hHook As Long, _
ByVal nCode As Long, ByVal wParam As Long, lParam As Any) As Long

wParam был as Integer

так - не вылетает
но скроллит только если фокус на списке
0
0 / 0 / 0
Регистрация: 26.01.2010
Сообщений: 20
23.03.2010, 17:23  [ТС]
по Spy++,
у меня происходят WM_MOUSEMOVE при движении мышки, но при скролле колесом - их не происходит, только появляются 4 event-a на перерисовку списка (всякие hBrush)

смотрел на ехе-шнике из этого самого проекта, этой же формой

как же он скроллит, если Spy++ не замечает?
0
0 / 0 / 0
Регистрация: 16.12.2009
Сообщений: 12
23.03.2010, 18:34
Если нужно всего лишь скролировать список в листбоксе, то не проще ли поставить драйвера для мыши?
Заодно решится проблема со скролингом в других компонентах.
0
0 / 0 / 0
Регистрация: 16.12.2009
Сообщений: 12
23.03.2010, 18:35
Или скролирование идет именно над формой, а не над контролом?
0
0 / 0 / 0
Регистрация: 26.01.2010
Сообщений: 20
23.03.2010, 20:25  [ТС]
скроллинг колесом работает когда фокус на списке
а нужно скроллить вне зависимости от фокуса
0
Comanche
23.03.2010, 20:27
Я вот снёс у себя фирменные дрова от колёсной мыши - и Spy++ тоже перестал ловить MSWHEEL_ROLLMSG. Т.е. дело - в драйвере мыши: или он у тебя не стоит, или стоит 'криво'.
0 / 0 / 0
Регистрация: 26.01.2010
Сообщений: 20
23.03.2010, 20:50  [ТС]
у меня последняя версия драйвера от микрософта, на прошлой неделе скачал
мышь Wheel Optical
хм...
0
Comanche
23.03.2010, 20:54
Но зато (когда я без 'дров') ловится мессадж MS_MOUSEWHEEL (см. Spy++), с теми же wParam и lParam. Т.е. можешь и не ставить фирменный драйвер мыши, а просто переставить перехват на другое сообщение - т.е. на это самое MS_MOUSEWHEEL.
0 / 0 / 0
Регистрация: 16.12.2009
Сообщений: 12
23.03.2010, 20:59
Проблема не решится установкой драйверов, т.к. как я понял хочется скролировать лист без установленного на него фокуса. Т.е. фокус на любом другом контроле формы, а скролится лист.
Это дровами не решить.
Нужно обрабатывать ручками скролинг над формой.
0
Comanche
23.03.2010, 21:01
Paksly, ё-моё, ты топик-то читал хоть?
'Нужно обрабатывать ручками скролинг над формой'...

А я тут для чего, по-твоему, код выложил? Для красоты?
В нём скроллинг над формой и обрабатывается!

))
0 / 0 / 0
Регистрация: 26.01.2010
Сообщений: 20
23.03.2010, 21:05  [ТС]
только чего-то у меня event скролинга не ловится даже Spy++, хотя в винде везде скролл нормально работает
0
Comanche
23.03.2010, 21:08
А у тебя везде в Spy++ 'галочки' стоят?
Т.е. он настроен на отлов ВСЕХ сообщений? включая 'неизвестные'?
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.03.2010, 21:08
Помогаю со студенческими работами здесь

Скроллинг мыши в среде разработки VB6
Как настроить среду разработки VB6, чтобы при прокрутке ролика мыши окно с текстом программы прокручивалось?

Скроллинг колесом мыши в подчиненном отчете
Добрый день. Проблема со скроллингом в подчиненном отчете, который находиться на форме Есть ли какие способы оживить его? Т.е...

Как обрабатывать скролл колесом мыши?
Собственно сабж. Каким образом в Lazarus обрабатывать скролл колесом мыши ? если вдруг это важно то нужно это для компонента TImage

Как перемещать форму колесом мыши?
Ну то есть скрол бар на Form с помощью колесика перемещался. (Скорее всего вопрос глупый)Но тем не менее интересно.)

2003 Акс, как сделать прокрутку колесом мыши в полях MEMO?
Собственно вопрос, на форме есть поле MEMO, в нем есть полоса вертикальной прокрутки, так как все данные на экран не помещаются. Как можно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru