Kirjautuminen

Haku

Tehtävät

Koodit: VB.NET: Formin tulostaminen

Kirjoittaja: tnb

Kirjoitettu: 19.10.2004 – 19.10.2004

Tagit: koodi näytille, vinkki

Printtaa formin kokonaisena, as seen on screen.
Kokoonpantu seuraavista lähteistä:

Thanks to metty: http://weblogs.asp.net/mschiffer/archive/2004/07/13/181111.aspx

Also thanks to: Matthew MacDonald

Projekti on muuten vaan sub main:sta alkava (moduli1)

Form1 nimi on siis PrintTest, button1 on cmdPrint

Moduliin

Module Module1
    Public vormi As Form
    Public Sub main()
        vormi = New PrintTest
        vormi.ShowDialog()
    End Sub
End Module

Formiin

Imports System.Drawing.Printing

Public Class PrintTest
    Inherits System.Windows.Forms.Form

#Region " Windows Form Designer generated code "

    Public Sub New()
        MyBase.New()

        'This call is required by the Windows Form Designer.
        InitializeComponent()

        'Add any initialization after the InitializeComponent() call

    End Sub

    'Form overrides dispose to clean up the component list.
    Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
        If disposing Then
            If Not (components Is Nothing) Then
                components.Dispose()
            End If
        End If
        MyBase.Dispose(disposing)
    End Sub
    Friend WithEvents cmdPrint As System.Windows.Forms.Button

    'Required by the Windows Form Designer
    Private components As System.ComponentModel.IContainer

    'NOTE: The following procedure is required by the Windows Form Designer
    'It can be modified using the Windows Form Designer.
    'Do not modify it using the code editor.
    <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
        Me.cmdPrint = New System.Windows.Forms.Button
        Me.SuspendLayout()
        '
        'cmdPrint
        '
        Me.cmdPrint.Location = New System.Drawing.Point(16, 16)
        Me.cmdPrint.Name = "cmdPrint"
        Me.cmdPrint.Size = New System.Drawing.Size(148, 24)
        Me.cmdPrint.TabIndex = 0
        Me.cmdPrint.Text = "Print"
        '
        'PrintTest
        '
        Me.AutoScaleBaseSize = New System.Drawing.Size(5, 14)
        Me.ClientSize = New System.Drawing.Size(528, 342)
        Me.Controls.Add(Me.cmdPrint)
        Me.Font = New System.Drawing.Font("Tahoma", 8.25!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
        Me.Name = "PrintTest"
        Me.Text = "Print Status"
        Me.ResumeLayout(False)

    End Sub

#End Region

    Public formImage As Bitmap
    Private Const SRCCOPY As Integer = &HCC0020

    Private Declare Function BitBlt _
        Lib "gdi32.dll" ( _
        ByVal hdcDest As IntPtr, _
        ByVal x As Int32, _
        ByVal y As Int32, _
        ByVal Width As Int32, _
        ByVal Height As Int32, _
        ByVal hdcSrc As IntPtr, _
        ByVal xSrc As Int32, _
        ByVal ySrc As Int32, _
        ByVal dwRop As Int32 _
        ) As Boolean

    Private Sub cmdPrint_Click(ByVal sender As System.Object, _
      ByVal e As System.EventArgs) Handles cmdPrint.Click

        ' Create the document and attach an event handler.
        Dim MyDoc As PrintDocument = New PrintDocument
        AddHandler MyDoc.PrintPage, AddressOf MyDoc_PrintPage

        ' Allow the user to choose a printer and specify other settings.
        Dim dlgSettings As New PrintDialog
        dlgSettings.Document = MyDoc



        Dim formGraphics As Graphics = Me.CreateGraphics
        formImage = New Bitmap(Me.Width, Me.Height, formGraphics)
        Dim memGraphics As Graphics = Graphics.FromImage(formImage)

        ' Get the target and source device context handles (hDC)
        Dim sourceDC As IntPtr = formGraphics.GetHdc
        Dim targetDC As IntPtr = memGraphics.GetHdc


        ' Consider the border width and the titlebar height
        Dim widthDelta As Integer = (Me.Width - _
                                     Me.ClientRectangle.Width)
        Dim heightDelta As Integer = (Me.Height - _
                                      Me.ClientRectangle.Height)
        ' Copy the form including its titlebar and borders
        BitBlt(targetDC, _
               0, 0, _
               Me.ClientRectangle.Width + widthDelta, _
               Me.ClientRectangle.Height + heightDelta, _
               sourceDC, _
               0 - widthDelta \ 2, 0 - (heightDelta - widthDelta \ 2), _
               SRCCOPY)

        ' Release DCs and dispose objects
        formGraphics.ReleaseHdc(sourceDC)
        formGraphics.Dispose()
        memGraphics.ReleaseHdc(targetDC)
        memGraphics.Dispose()

        ' formImage now has the form's image. Print it before disposing it.

        Dim Result As DialogResult = dlgSettings.ShowDialog()

        ' If the user clicked OK, print the document.
        If Result = DialogResult.OK Then
            ' This method returns immediately, before the print job starts.
            ' The PrintPage event will fire asynchronously.
            MyDoc.Print()
        End If
        ' Finally dispose the image
        formGraphics.Dispose()
    End Sub

    Private Sub MyDoc_PrintPage(ByVal sender As Object, _
     ByVal e As PrintPageEventArgs)


        ' Define the font.
        Dim MyFont As New Font("Arial", 30)

        ' Determine the position on the page.
        ' In this case, we read the margin settings
        ' (although there is nothing that prevents your code
        '  from going outside the margin bounds.)
        Dim x As Single = e.MarginBounds.Left
        Dim y As Single = e.MarginBounds.Top

        ' Determine the height of a line (based on the font used).
        Dim LineHeight As Single = MyFont.GetHeight(e.Graphics)


        ' Draw an image.

        e.Graphics.DrawImage(formimage, x, y)


    End Sub



    Private Sub PrintTest_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
        Dim br As Brush = Brushes.Blue
        Dim ft As Font = Me.DefaultFont
        vormi.CreateGraphics.DrawString("Hello", ft, br, 200, 200)
    End Sub
End Class

Kommentit

Bill Keltanen [21.10.2004 08:44:56]

#

VB6 Form1.PrintForm.. tulostaa formin sisällön :p

remontti-reiska [23.10.2004 13:17:29]

#

Voihan sitä olla useampiakin vaihtoehtoja.

Kirjoita kommentti

Muista lukea kirjoitusohjeet.
Tietoa sivustosta