Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Русский_Проект: Изучение Visual Basic


Информационный Канал Subscribe.Ru

Здравствуйте!

Visual Basic 6.0

Сообщения Windows

Сообщение WM_MOUSEWHEEL

Const WM_MOUSEWHEEL = &H20A

Сообщение WM_MOUSEWHEEL посылается окну, имеющему фокус при прокрутке колесика мыши, через функцию обратного вызова WindowProc

Пример

' Перемещаем форму по экрану при помощи колесика мыши
' Поместите код в модуль,
' т.к. используется функция обратного вызова
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" _
(ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, _
ByVal msg As Long, ByVal wParam As Long, _
ByVal lParam As Long) As Long
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
(ByVal hwnd As Long, ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long

Public Const GWL_WNDPROC = (-4)
Public Const WM_MOUSEWHEEL = &H20A

Dim PrevProc As Long


Public Sub HookForm(Button As Long)
    PrevProc = SetWindowLong(Button, GWL_WNDPROC, AddressOf WindowProc)
End Sub


Public Sub UnHookForm(Button As Long)
    SetWindowLong Button, GWL_WNDPROC, PrevProc
End Sub


Public Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
 ' Скроллируем форму. wParam - величина перемещения
   If uMsg = WM_MOUSEWHEEL Then
          Form1.scrollmove (wParam)
    End If

    WindowProc = CallWindowProc( _
        PrevProc, hwnd, uMsg, wParam, lParam)
End Function


' Поместите код для Form1
Private Sub Form_Load()
    HookForm Me.hwnd
End Sub


Private Sub Form_Unload(Cancel As Integer)
    UnHookForm Me.hwnd
End Sub


Public Sub scrollmove(wParam As Long)
 ' Ограничим перемещение формы до края экрана
    
    ' Также отслеживаем состояние формы.
    ' Если окно развернуто, то не двигаем форму
    If Me.WindowState = vbMaximized Then Exit Sub
    
    If wParam < 0 Then
        If Me.Top <= 60 Then
            Me.Top = 0
            Exit Sub
        Else
            Me.Top = Me.Top - 200
        End If
        
    Else
        If (Screen.Height - Me.Top) <= Me.Height Then
            Me.Top = Screen.Height - Me.Height
        Else
            Me.Top = Me.Top + 200
        End If
    End If
  
End Sub

Это и другие сообщения можно изучить при помощи справочника по сообщениям Windows (только для зарегистрированных пользователей)

Советы

Как выгрузить VB-форму нажатием Esc?

Эту задачу очень просто решить с помощью такого кода:

Private Sub Form_KeyPress(KeyAscii As Integer)  
  If KeyAscii = 27 Then  
   Unload Me  
  End If  
End Sub

Другие советы можно почитать на сайте

VB.NET 2003

Мои первые впечатления от VB.NET 2003

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

Всем удачи! Посещайте сайт Русского_Проекта и присылайте свои замечания и предложения!



http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное