1
Answer

I need help with a print form code

JUlius

JUlius

16y
9.9k
1

 Hello Everyone:

I need some assistance on a print code that I have:

I would like to when I click on the print button and it print my form to printed as "Lanscape" automatically.  What am I missing:

Here is the code that I have.

' create a printing component
   Private WithEvents pd As Printing.PrintDocument
  
' storage for form image
   Dim formImage As Bitmap
  
' create API prototype
   Private Declare Function BitBlt Lib "gdi32.dll" Alias _
      
"BitBlt" (ByVal hdcDest As IntPtr, _
      
ByVal nXDest As Integer, ByVal nYDest As _
      
Integer, ByVal nWidth As Integer, _
      
ByVal nHeight As Integer, ByVal _
      hdcSrc
As IntPtr, ByVal nXSrc As Integer, _
      
ByVal nYSrc As Integer, _
      
ByVal dwRop As System.Int32) As Long
 ' Callback from PrintDocument component to
   ' do the actual printing
   Private Sub pd_PrintPage(ByVal sender As Object, _
      
ByVal e As System.Drawing.Printing.PrintPageEventArgs) _
      
Handles pd.PrintPage
      e.Graphics.DrawImage(formImage, 100, 100)
  
End Sub

   Private Sub Form1_Load(ByVal sender As Object, _
    
ByVal e As System.EventArgs) Handles MyBase.Load
      
' create an instance of the PrintDocument component
      pd = New Printing.PrintDocument
      
Me.StartPosition = FormStartPosition.CenterScreen
  
End Sub

   Private Sub btnPrintForm_Click(ByVal sender As _
      System.Object,
ByVal e As System.EventArgs) _
      
Handles btnPrintForm.Click
      
' initiate the printdocument component
      GetFormImage()
      pd.Print()
  
End Sub

Private Sub GetFormImage()
      
Dim g As Graphics = Me.CreateGraphics()
      
Dim s As Size = Me.Size
      formImage =
New Bitmap(s.Width, s.Height, g)
      
Dim mg As Graphics = Graphics.FromImage(formImage)
      
Dim dc1 As IntPtr = g.GetHdc
      
Dim dc2 As IntPtr = mg.GetHdc
      ' added code to compute and capture the form
      ' title bar and borders

      
Dim widthDiff As Integer = _
         (
Me.Width - Me.ClientRectangle.Width)
      
Dim heightDiff As Integer = _
         (
Me.Height - Me.ClientRectangle.Height)
      
Dim borderSize As Integer = widthDiff \ 2
      
Dim heightTitleBar As Integer = heightDiff - borderSize
      BitBlt(dc2, 0, 0, _
        
Me.ClientRectangle.Width + widthDiff, _
        
Me.ClientRectangle.Height + heightDiff, dc1, _
         0 - borderSize, 0 - heightTitleBar, 13369376)

      g.ReleaseHdc(dc1)
      mg.ReleaseHdc(dc2)
  
End Sub

Answers (1)