Printing a Picture Box (non standard questions) [surely RESOLVED]
I want to print a picture box using PainPicture but I have a few questions I could not find answered on the forum.
1. What if the Picture Box is larger than the form it is on (a part of it is cut off)? Will it still print the whole picture?
2. If I have labes with text (captions) embeded in the picture box along with the picture, will they be printed too? If not, how can that be achieved?
i suggested the simplest method
anyways here you go
VB Code:
Option Explicit
Private Declare Function SendMessage Lib "user32.dll" Alias _
"SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
Private Const WM_PAINT = &HF
Private Const WM_PRINT = &H317
Private Const PRF_CLIENT = &H4& ' Draw the window's client area
Private Const PRF_CHILDREN = &H10& ' Draw all visible child
Private Const PRF_OWNED = &H20& ' Draw all owned windows
'Note - Box could also be a Form, if desired.
Public Sub PrintPictureBox(Box As PictureBox, _
Optional X As Single = 0, _
Optional Y As Single = 0)
Dim rv As Long
Dim ar As Boolean
On Error GoTo Exit_Sub
With Box
'Save ReDraw value
ar = .AutoRedraw
'Set persistance
.AutoRedraw = True
'Wake up printer
Picture2.Print
'Draw controls to picture box
rv = SendMessage(.hwnd, WM_PAINT, .hDC, 0)
rv = SendMessage(.hwnd, WM_PRINT, .hDC, _
PRF_CHILDREN Or PRF_CLIENT Or PRF_OWNED)
'Refresh image to picture property
.Picture = .Image
'Copy picture to Printer
Picture2.PaintPicture .Picture, X, Y
'Restore backcolor (Re-load picture if picture was used)
Box.Line (0, 0)-(.ScaleWidth, .ScaleHeight), .BackColor, BF
'Restore ReDraw
.AutoRedraw = ar
End With
Exit_Sub:
If Err.Number Then MsgBox Err.Description, vbOKOnly, "Printer Error!"
End Sub
'USAGE - Add two picture boxes(Picture1,Picture2) and a command button (Command1) to a new form.
' Add various controls to the picture box.
' Run this code, and press the button to print.
Private Sub Command1_Click()
PrintPictureBox Picture1, 1000, 1000
End Sub