Introduction
This is sample code to save image of the VB 6.0 form to a file.
Background
Normally the Form.image property only provides the drawing and printed
text in the bitmap image. However if there are image controls, buttons,
icons etc on the form then this code pictures those too.
Using the code
There is one single procedure SaveFormImageToFile which is self explainatory. The API BitBlt is used to convert form image to a picture and assign it to picture box. Then the image property of the picture box is used to store the picture using SavePicture methode.
Add a separate Picture box and command button on the form with its properties as given below:
Private Declare Function BitBlt Lib "gdi32" _
(ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, _
ByVal nWidth As Long, ByVal nHeight As Long, _
ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, _
ByVal dwRop As Long) As Long
Public Sub SaveFormImageToFile(ByRef ContainerForm As Form, _
ByRef PictureBoxControl As PictureBox, _
ByVal ImageFileName As String)
Dim FormInsideWidth As Long
Dim FormInsideHeight As Long
Dim PictureBoxLeft As Long
Dim PictureBoxTop As Long
Dim PictureBoxWidth As Long
Dim PictureBoxHeight As Long
Dim FormAutoRedrawValue As Boolean
With PictureBoxControl
'Set PictureBox properties
.Visible = False
.AutoRedraw = True
.Appearance = 0 ' Flat
.AutoSize = False
.BorderStyle = 0 'No border
'Store PictureBox Original Size and location Values
PictureBoxHeight = .Height: PictureBoxWidth = .Width
PictureBoxLeft = .Left: PictureBoxTop = .Top
'Make PictureBox to size to inside of form.
.Align = vbAlignTop: .Align = vbAlignLeft
DoEvents
FormInsideHeight = .Height: FormInsideWidth = .Width
'Restore PictureBox Original Size and location Values
.Align = vbAlignNone
.Height = FormInsideHeight: .Width = FormInsideWidth
.Left = PictureBoxLeft: .Top = PictureBoxTop
FormAutoRedrawValue = ContainerForm.AutoRedraw
ContainerForm.AutoRedraw = False
DoEvents
'Copy Form Image to Picture Box
BitBlt .hDC, 0, 0, _
FormInsideWidth / Screen.TwipsPerPixelX, _
FormInsideHeight / Screen.TwipsPerPixelY, _
ContainerForm.hDC, 0, 0, _
vbSrcCopy
DoEvents
SavePicture .Image, ImageFileName
DoEvents
ContainerForm.AutoRedraw = FormAutoRedrawValue
DoEvents
End With
End Sub
Private Sub Command1_Click()
SaveFormImageToFile frmSaveFormImageToFile, Picture1, "C:\Temp.bmp"
End Sub
Otherwise the code will set it.
Points of Interest
Image of the form in VB 6 along with the controls and their images is new.
History
This code is my first upload