XTreme Logo

If you appreciate these tips, please consider a small donation:

General Tip - Intermediate

How to to tile a picture on a form
Applies to: Visual Basic 5.0 and 4.0

The following steps and code will demonstrate how to tile a picture, wallpaper-style, on a form, and maintain it if the form is resized or repainted.  Similar code could be use to place multiple pictures in varying patterns and sizes, by way of creating a simple screensaver.

1 - Start a new Visual Basic project.
2 - Add a BAS module and in it place the following code:

Public Sub TileForm(ByVal FormName As Form, ByVal PicBox As Control)
Dim numacross, numdown As Integer
Dim d, x, y As Integer
'Determine the number of rows and columns required
'to cover the form
numacross = Int(FormName.Width / PicBox.Width) + 1
numdown = Int(FormName.Height / PicBox.Width) + 1
'Loop through each row down
For d = 0 To numdown - 1
   y = PicBox.Height * d
   For i = 0 To numacross - 1
      'Within each down iteration, loop and populate the
'columns across
      x = i * PicBox.Width
      'Here's where we put the picture at each consecutive position!
      FormName.PaintPicture PicBox.Picture, x, y
End Sub

3 - On Form1, draw a picturebox, Picture1, and set its Visible property to false and its AutoSize property to true.
4 - Set the Picture property of Picture1 to a small bitmap or an icon; not something so large that tiling would be pointless.
5 - Leave the AutoRedraw property of Form1 set to False.
6 - Place the following code in both the Paint and Resize events of Form1:

'Pass the form to be affected and the source
'picture object to the tiling routine

Call TileForm(Form1, Picture1)

7 - Test what we have so far.  Watch the behavior when the form is resized or covered by another window and then uncovered again.  Now stop the project and let's take it further.
8 - Add another form, Form2.  In the click event of Form1, code to show Form2.
9 - On Form2, draw a picturebox, Picture1, and set its Visible property to False and its AutoSize property to True.  Note that an image control may also be used in this example.
10 - Set the AutoRedraw property of Form2 to True.
11 - In only the Resize event of Form2, place the following code:

Call TileForm(Form2, Picture1)

12 - Test the project.  When Form1 comes up, click on it to show Form2.  Put both forms through their paces, and note the difference.  Either method is viable for tiling and keeping things updated, but the flicker that can occur with tiling implemented in the Paint event may make use of AutoRedraw more pleasing.

With the generic routine in a module, it's now ready to plug into any project and be applied with minimal effort.

[ Back To The Top ]

Contact: web@xtremecomp.com
All contents copyright XTreme Computing unless noted otherwise.