Using Scrollbars with Picture Boxes

by Developer.com Staff

Many Visual Basic programmers have problems with picture boxes and scroll bars.

Many programmers have problems with pictureboxes and scrollbars. Here's a solution for that problem:

1. Add to Form1: two pictureboxes (Picture1, Picture2) and one vertical scrollbar (VScroll1). The positions doesn't matter, the objects are positioned automatically by the program. There's only one property that must be set at designtime: AutoRedraw = True of Picture2 (that's very important)!

2. Add following code to Form1

Private Sub Form_Activate()

'Clip image of picture2 to picture1
ScrollPic Picture2, Picture1, VScroll1

End Sub

Private Sub Form_Load()

'Set the properties and positions 
'of the objects
With Me
.Height = 5000
.Width = 6500
End With

With VScroll1
.Left = 3200
.Top = 200
.Height = 1000
End With

With Picture1
.Left = 200
.Top = 200
.Width = 3000
.Height = 1000
End With

'AutoRedraw must be set to True!!!
With Picture2
.Left = 200
.Top = 1500
.Width = 3000
.Height = 2500
.Visible = False
End With

'Variables needed
TwipsX = Screen.TwipsPerPixelX
TwipsY = Screen.TwipsPerPixelY
DestPicx = Picture2.Width / TwipsX
DestPicY = Picture2.Height / TwipsY
VScroll1.Max = Picture2.Height / TwipsY _
- Picture1.Height / TwipsY

'Print A to L on Picture2
Dim i As Integer

For i = 0 To 11
Picture2.Print Chr$(65 + i)
Next i

End Sub
Private Sub VScroll1_Change()

ScrollPic Picture2, Picture1, VScroll1

End Sub
Private Sub VScroll1_Scroll()

ScrollPic Picture2, Picture1, VScroll1

End Sub
3. Add a module with following code:

Declare Function BitBlt Lib "gdi32" _
(ByVal hDestDC As Integer, ByVal x As Integer, _
ByVal y As Integer, ByVal nWidth As Integer, _
ByVal nHeight As Integer, ByVal _
hSrcDC As Integer, ByVal xSrc As Integer, _
ByVal ySrc As Integer, ByVal dwRop As _
Long) As Integer
Public Const SRCCOPY = &HCC0020
Public Const SRCAND = &H8800C6
Public Const SRCINVERT = &H660046

Public TwipsX As Long
Public TwipsY As Long
Public DestPicx As Long
Public DestPicY As Long

Public Sub ScrollPic(SourcePic As Object, _
DestPic As Object, Scroll As Object)

BitBlt DestPic.hDC, 0&, 0&, DestPicx, DestPicY, _
SourcePic.hDC, 0&, Scroll.Value, SRCCOPY

End Sub

Hope that it'll help many programmers!

This article was originally published on Tuesday Nov 19th 2002
Mobile Site | Full Site