In this first example we'll print an image 3 inches wide at the top of the page. The image has previously been loaded and is defined by vimage, a global variable that holds the image descriptor.
The second example prints text and an image and also makes use of a callback function to allow the user to cancel the print job. The implementation of a callback function uses the VB AddressOf operator available in VB v 5 or later.
........... Add these declarations to your Global module ...........
Declare Function printimage Lib "VIC32.DLL" (ByVal hWnd As Long, ByVal hdcprn As Long, ByVal mode As Long, image As imgdes, pRect As RECT, ByVal boxsiz As Long, ByVal dspfct As Long) As Long
Declare Sub RtlMoveMemory Lib "kernel32" (ByVal des As Long, ByVal src As Long, ByVal cnt As Long)
Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (des As Any, ByVal src As Long, ByVal cnt As Long)
............ Add this function to your .BAS module, not to a .FRM module ...........
Public Function print_an_image(hWnd As Long) As Long
Dim rcode As Long
Dim pRect As RECT
Dim boxsize As Long, mode As Long
Dim bm As BITMAPINFOHEADER
boxsize = 0 ' Size of frame around printed image
mode = 0 ' Use default print mode
' Get Bitmap info
CopyMemory bm, vimage.bmh, 40 ' 40=size of BITMAPINFOHEADER
pRect.top = 0 ' Position of printed area on printed page in 1/1000 inch units
pRect.left = 1000 ' One inch from left
pRect.right = pRect.left + 3000 ' Print image 3 inches wide
' Maintain aspect ratio of image
pRect.bottom = (pRect.right - pRect.left) * bm.biHeight / bm.biWidth
' Print the image
rcode = printimage(hWnd, Printer.hdc, mode, vimage, pRect, boxsize, 0)
print_an_image = rcode
End Function
........... Add these declarations to your Global module ........... Declare Function printimagenoeject Lib "VIC32.DLL" (ByVal hWnd As Long, ByVal hdcprn As Long, ByVal mode As Long, image As imgdes, pRect As RECT, ByVal boxsiz As Long, ByVal dspfct As Long) As Long Declare Sub RtlMoveMemory Lib "kernel32" (ByVal des As Long, ByVal src As Long, ByVal cnt As Long) Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (des As Any, ByVal src As Long, ByVal cnt As Long) Global cancelprt As Long ' Print-cancel flag, set to 1 when cancel button is clicked ............ Add these functions to your .BAS module, not to a .FRM module ........... Public Function displayprintcancelbox(ByVal progress As Long) As Long ' printimage() callback function If printprogress.Visible = True Then ' If dialog is visible, display band number printprogress.Label1 = LCase$("printing band number " & progress) End If ' Print-cancel flag is set to 1 when cancel button is clicked ' If return value is 1, printimage will cancel printing displayprintcancelbox = cancelprt End Function Public Function dotheprintwithcancelbox(hWnd As Long) As Long Dim rcode As Long Dim pRect As RECT Dim docname As String Dim boxsize As Long, mode As Long Dim dspfct As Long Dim bm As BITMAPINFOHEADER boxsize = 0 ' Size of frame around printed image mode = 0 ' Use default print mode docname = "Victor Library" 'Print Manager job name ' Get Bitmap info CopyMemory bm, vimage.bmh, 40 ' 40=size of BITMAPINFOHEADER pRect.top = 0 ' Position of printed area on printed page in 1/1000 inch units pRect.left = 1000 ' One inch from left pRect.right = pRect.left + 3000 ' Print image 3 inches wide ' Maintain aspect ratio of image pRect.bottom = (pRect.right - pRect.left) * bm.biHeight / bm.biWidth ' Print some text below the picture Printer.ScaleMode = 5 ' Inches Printer.CurrentX = 1 ' One inch from left Printer.CurrentY = (pRect.bottom + 1000 / 4) / 1000 ' 1/4 inch below picture Printer.Print "This is a Victor Image" Screen.MousePointer = 11 ' Display the hourglass mouse pointer. cancelprt = 0 ' Clear cancel printing flag printprogress.Show ' Display print progress dialog ' Print the image rcode = printimagenoeject(hWnd, Printer.hdc, mode, vimage, pRect, boxsize, AddressOf displayprintcancelbox) printprogress.Hide ' Hide print progress dialog Screen.MousePointer = 0 ' Restore mouse pointer If rcode <> NO_ERROR Then Printer.KillDoc ' Cancel printing if error End If Printer.EndDoc ' Handle any errors If rcode <> NO_ERROR Then MainWnd.error_handler rcode, "" End If dotheprintwithcancelbox = rcode End Function ............ Add to the printprogress.frm module ........... Private Sub Command1_Click() ' When the user clicks "Cancel" button in the print progress dialog box cancelprt = 1 End Sub
Victor Image Processing Library homepage | Victor Product Summary | more source code