I have a frame with a picture within it, and I am able to do the mouse scroll with the code below, but when i scroll with the mouse there are no limits so the picture seems like it could scroll through for eternity. What am I missing? Also with this it diables my scrollbar usage the code for that is below the asterix'.

Option Explicit

Private Const PM_REMOVE = &H1

Private Type POINTAPI
    X As Long
    Y As Long
End Type

Private Type Msg
    hWnd As Long
    Message As Long
    wParam As Long
    lParam As Long
    time As Long
    pt As POINTAPI
End Type

Private Declare Function PeekMessage Lib "user32" Alias "PeekMessageA" (lpMsg As Msg, ByVal hWnd As Long, ByVal wMsgFilterMin As Long, ByVal wMsgFilterMax As Long, ByVal wRemoveMsg As Long) As Long
Private Declare Function WaitMessage Lib "user32" () As Long
Private bCancel As Boolean
Private Const WM_MOUSEWHEEL = 522
'**************************************
Private Sub ProcessMessages()

Dim Message As Msg

Do While Not bCancel
    WaitMessage
    If PeekMessage(Message, Me.hWnd, WM_MOUSEWHEEL, WM_MOUSEWHEEL, PM_REMOVE) Then
        If Message.wParam < 0 Then 
            Picture1.Top = Picture1.Top + 240 'scrolls up
        Else
            Picture1.Top = Picture1.Top - 240 'scrolls down
        End If
    End If
    DoEvents
Loop

End Sub
'**************************************
Private Sub Form_Load()

Picture1.AutoRedraw = True
Picture1.Print "Please use  mouse wheel To move this Picture."
Me.Show
ProcessMessages

End Sub
Private Sub Form_Unload(Cancel As Integer)

bCancel = True

End Sub

****************************

'also in the Form_load
    Picture1.AutoSize = True
    Picture1.Top = 0
    Picture1.Left = 0
    Picture1.Width = fraScrollBox.Width
    
    VScroll1.Top = fraScrollBox.Top
    VScroll1.Left = fraScrollBox.Left + fraScrollBox.Width
    VScroll1.Height = fraScrollBox.Height
    VScroll1.Min = 0
    VScroll1.Max = Picture1.Height - fraScrollBox.Height
    VScroll1.SmallChange = 1500
    VScroll1.LargeChange = 2500

Private Sub VScroll1_Change()
    Picture1.Top = VScroll1.Value * -1
End Sub

Hi,
Check the condition that Picturebox1.Top is positive. if it is negative, it will be top of the frame. Dont let the PictureBox1.Top to negative. Similarly dont let the PictureBox1.Top + PictureBox1.Height greater than fraScrollBox.Height

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.