Trucos Mover las barras de scroll de un mdi con el teclado

Veremos cómo podemos enviar mensajes a una ventana MDI para mover sus barras de scroll respondiendo al teclado. El mismo método se puede emplear también para, por ejemplo, hacer scroll automáticamente hasta el final cuando cargamos una nueva ventana hija.

En un módulo :

Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
      (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
       lParam As Any) As Long

Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, _
       ByVal wCmd As Long) As Long

Public Const SB_BOTTOM = 7
Public Const SB_LEFT = 6
Public Const SB_LINEDOWN = 1
Public Const SB_LINELEFT = 0
Public Const SB_LINERIGHT = 1
Public Const SB_LINEUP = 0
Public Const SB_PAGEDOWN = 3
Public Const SB_PAGELEFT = 2
Public Const SB_PAGERIGHT = 3
Public Const SB_PAGEUP = 2
Public Const SB_RIGHT = 7
Public Const SB_THUMBPOSITION = 4
Public Const SB_THUMBTRACK = 5
Public Const SB_TOP = 6
Public Const SB_ENDSCROLL = 8

Public Const WM_HSCROLL = &H114
Public Const WM_VSCROLL = &H115

Public Const GW_CHILD = 5


Public Sub processKey(KeyCode As Integer)
   Dim mdiclientwin As Long

   Select Case KeyCode
    Case vbKeyDown
      mdiclientwin = GetWindow(MDIForm1.hwnd, GW_CHILD)
      SendMessage mdiclientwin, WM_VSCROLL, SB_LINEDOWN, ByVal 0&

    Case vbKeyUp
      mdiclientwin = GetWindow(MDIForm1.hwnd, GW_CHILD)
      SendMessage mdiclientwin, WM_VSCROLL, SB_LINEUP, ByVal 0&

    Case vbKeyPageUp
      mdiclientwin = GetWindow(MDIForm1.hwnd, GW_CHILD)
      SendMessage mdiclientwin, WM_VSCROLL, SB_PAGEUP, ByVal 0&

    Case vbKeyPageDown
      mdiclientwin = GetWindow(MDIForm1.hwnd, GW_CHILD)
      SendMessage mdiclientwin, WM_VSCROLL, SB_PAGEDOWN, ByVal 0&

    Case vbKeyRight
      mdiclientwin = GetWindow(MDIForm1.hwnd, GW_CHILD)
      SendMessage mdiclientwin, WM_HSCROLL, SB_LINERIGHT, ByVal 0&

    Case vbKeyLeft
      mdiclientwin = GetWindow(MDIForm1.hwnd, GW_CHILD)
      SendMessage mdiclientwin, WM_HSCROLL, SB_LINELEFT, ByVal 0&

   End Select

End Sub


En los formularios hijos debemos incluir :

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
   processKey KeyCode
End Sub



Trucos Trucos

Visual Basic Página de Visual Basic

Página principal Página principal

www.jrubi.com