www.pudn.com > PrinterPageSetting.rar > Form1.vb


Public Class Form1 
    Inherits System.Windows.Forms.Form 
 
#Region " Windows 窗体设计器生成的代码 " 
 
    Public Sub New() 
        MyBase.New() 
 
        '该调用是 Windows 窗体设计器所必需的。 
        InitializeComponent() 
 
        '在 InitializeComponent() 调用之后添加任何初始化 
 
    End Sub 
 
    '窗体重写 dispose 以清理组件列表。 
    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 
 
    'Windows 窗体设计器所必需的 
    Private components As System.ComponentModel.IContainer 
 
    '注意: 以下过程是 Windows 窗体设计器所必需的 
    '可以使用 Windows 窗体设计器修改此过程。 
    '不要使用代码编辑器修改它。 
    Friend WithEvents mainMenu1 As System.Windows.Forms.MainMenu 
    Friend WithEvents menuFile As System.Windows.Forms.MenuItem 
    Friend WithEvents menuFilePageSetup As System.Windows.Forms.MenuItem 
    Friend WithEvents menuFilePrintPreview As System.Windows.Forms.MenuItem 
    Friend WithEvents menuFilePrint As System.Windows.Forms.MenuItem 
    Friend WithEvents TextBox1 As System.Windows.Forms.TextBox 
     Private Sub InitializeComponent() 
        Me.mainMenu1 = New System.Windows.Forms.MainMenu 
        Me.menuFile = New System.Windows.Forms.MenuItem 
        Me.menuFilePageSetup = New System.Windows.Forms.MenuItem 
        Me.menuFilePrintPreview = New System.Windows.Forms.MenuItem 
        Me.menuFilePrint = New System.Windows.Forms.MenuItem 
        Me.TextBox1 = New System.Windows.Forms.TextBox 
        Me.SuspendLayout() 
        ' 
        'mainMenu1 
        ' 
        Me.mainMenu1.MenuItems.AddRange(New System.Windows.Forms.MenuItem() {Me.menuFile}) 
        ' 
        'menuFile 
        ' 
        Me.menuFile.Index = 0 
        Me.menuFile.MenuItems.AddRange(New System.Windows.Forms.MenuItem() {Me.menuFilePageSetup, Me.menuFilePrintPreview, Me.menuFilePrint}) 
        Me.menuFile.Text = "&File" 
        ' 
        'menuFilePageSetup 
        ' 
        Me.menuFilePageSetup.Index = 0 
        Me.menuFilePageSetup.Text = "Page Set&up" 
        ' 
        'menuFilePrintPreview 
        ' 
        Me.menuFilePrintPreview.Index = 1 
        Me.menuFilePrintPreview.Text = "Print Pre&view" 
        ' 
        'menuFilePrint 
        ' 
        Me.menuFilePrint.Index = 2 
        Me.menuFilePrint.Text = "&Print" 
        ' 
        'TextBox1 
        ' 
        Me.TextBox1.Anchor = CType((((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ 
                    Or System.Windows.Forms.AnchorStyles.Left) _ 
                    Or System.Windows.Forms.AnchorStyles.Right), System.Windows.Forms.AnchorStyles) 
        Me.TextBox1.Location = New System.Drawing.Point(8, 8) 
        Me.TextBox1.Multiline = True 
        Me.TextBox1.Name = "TextBox1" 
        Me.TextBox1.ScrollBars = System.Windows.Forms.ScrollBars.Both 
        Me.TextBox1.Size = New System.Drawing.Size(872, 408) 
        Me.TextBox1.TabIndex = 2 
        Me.TextBox1.Text = "'*****实现显示页面设置\打印机设置\打印预览对话框及分页的步骤*****" & Microsoft.VisualBasic.ChrW(13) & Microsoft.VisualBasic.ChrW(10) & Microsoft.VisualBasic.ChrW(13) & Microsoft.VisualBasic.ChrW(10) & "'第一步:申明并实例化,当然实例化对象可以放在构造函数中" & Microsoft.VisualBasic.ChrW(13) & Microsoft.VisualBasic.ChrW(10) & "Private " & _ 
        "printerPageSetting As New GoldPrinter.PrinterPageSetting" & Microsoft.VisualBasic.ChrW(13) & Microsoft.VisualBasic.ChrW(10) & Microsoft.VisualBasic.ChrW(13) & Microsoft.VisualBasic.ChrW(10) & "'第二步:写下面一个过程即实现打印的具体" & _ 
        "过程,实现PrintPage委托" & Microsoft.VisualBasic.ChrW(13) & Microsoft.VisualBasic.ChrW(10) & "Private Sub printDocument_PrintPage(ByVal sender As Object, By" & _ 
        "Val e As System.Drawing.Printing.PrintPageEventArgs)" & Microsoft.VisualBasic.ChrW(13) & Microsoft.VisualBasic.ChrW(10) & "    Dim g As System.Drawin" & _ 
        "g.Graphics = e.Graphics" & Microsoft.VisualBasic.ChrW(13) & Microsoft.VisualBasic.ChrW(10) & "    If Me.Draw(g) Then" & Microsoft.VisualBasic.ChrW(13) & Microsoft.VisualBasic.ChrW(10) & "        e.HasMorePages = True  " & _ 
        " '要分页打印" & Microsoft.VisualBasic.ChrW(13) & Microsoft.VisualBasic.ChrW(10) & "    Else" & Microsoft.VisualBasic.ChrW(13) & Microsoft.VisualBasic.ChrW(10) & "        e.HasMorePages = False  '打印结束" & Microsoft.VisualBasic.ChrW(13) & Microsoft.VisualBasic.ChrW(10) & "    End If" & Microsoft.VisualBasic.ChrW(13) & Microsoft.VisualBasic.ChrW(10) & "End Sub" & Microsoft.VisualBasic.ChrW(13) & Microsoft.VisualBasic.ChrW(10) & Microsoft.VisualBasic.ChrW(13) & Microsoft.VisualBasic.ChrW(10) & "'第三步:打印委托,当然也可以放在构造函数中" & Microsoft.VisualBasic.ChrW(13) & Microsoft.VisualBasic.ChrW(10) & "Private Sub Form1_Load(ByVal sender As System.Object, B" & _ 
        "yVal e As System.EventArgs) Handles MyBase.Load" & Microsoft.VisualBasic.ChrW(13) & Microsoft.VisualBasic.ChrW(10) & "    Me.printerPageSetting.Print" & _ 
        "PageValue = New GoldPrinter.PrintPageDelegate(AddressOf printDocument_PrintPage)" & _ 
        "" & Microsoft.VisualBasic.ChrW(13) & Microsoft.VisualBasic.ChrW(10) & "End Sub" & Microsoft.VisualBasic.ChrW(13) & Microsoft.VisualBasic.ChrW(10) & Microsoft.VisualBasic.ChrW(13) & Microsoft.VisualBasic.ChrW(10) & Microsoft.VisualBasic.ChrW(13) & Microsoft.VisualBasic.ChrW(10) & "'第四步:显示页面设置\打印机设置\打印预览对话框" & Microsoft.VisualBasic.ChrW(13) & Microsoft.VisualBasic.ChrW(10) & "Private Sub menuFilePageSetup_Click(By" & _ 
        "Val sender As System.Object, ByVal e As System.EventArgs) Handles menuFilePageSe" & _ 
        "tup.Click" & Microsoft.VisualBasic.ChrW(13) & Microsoft.VisualBasic.ChrW(10) & "    Me.printerPageSetting.ShowPageSetupDialog()" & Microsoft.VisualBasic.ChrW(13) & Microsoft.VisualBasic.ChrW(10) & "End Sub" & Microsoft.VisualBasic.ChrW(13) & Microsoft.VisualBasic.ChrW(10) & Microsoft.VisualBasic.ChrW(13) & Microsoft.VisualBasic.ChrW(10) & "Private S" & _ 
        "ub menuFilePrintPreview_Click(ByVal sender As System.Object, ByVal e As System.E" & _ 
        "ventArgs) Handles menuFilePrintPreview.Click" & Microsoft.VisualBasic.ChrW(13) & Microsoft.VisualBasic.ChrW(10) & "    Me.printerPageSetting.ShowPrin" & _ 
        "tPreviewDialog()" & Microsoft.VisualBasic.ChrW(13) & Microsoft.VisualBasic.ChrW(10) & "End Sub" & Microsoft.VisualBasic.ChrW(13) & Microsoft.VisualBasic.ChrW(10) & Microsoft.VisualBasic.ChrW(13) & Microsoft.VisualBasic.ChrW(10) & "Private Sub menuFilePrint_Click(ByVal sender As Sys" & _ 
        "tem.Object, ByVal e As System.EventArgs) Handles menuFilePrint.Click" & Microsoft.VisualBasic.ChrW(13) & Microsoft.VisualBasic.ChrW(10) & "    Me.pri" & _ 
        "nterPageSetting.ShowPrintSetupDialog()" & Microsoft.VisualBasic.ChrW(13) & Microsoft.VisualBasic.ChrW(10) & "End Sub" 
        ' 
        'Form1 
        ' 
        Me.AutoScaleBaseSize = New System.Drawing.Size(6, 14) 
        Me.ClientSize = New System.Drawing.Size(888, 425) 
        Me.Controls.Add(Me.TextBox1) 
        Me.Menu = Me.mainMenu1 
        Me.Name = "Form1" 
        Me.Text = "页面设置\打印设置\打印预览对话框(VB版)" 
        Me.ResumeLayout(False) 
 
    End Sub 
 
#End Region 
 
 
    ' 实现显示页面设置\打印机设置\打印预览对话框及分页的步骤 
    ' 作 者:周方勇 
    ' Email:flygoldfish@sina.com 
 
    'MIS金质打印王,各种报表、网格如DataGrid打印、DataTable、HtmlTable等二维形式全搞定,源码免费下载  
    '讨论:http://community.csdn.net/Expert/topic/3278/3278050.xml?temp=.5012934 
    '下载:http://www.alinksoft.com 
 
    '第一步:申明并实例化,当然实例化对象可以放在构造函数中 
    Private printerPageSetting As New GoldPrinter.PrinterPageSetting 
 
    '第二步:写下面一个过程即实现打印的具体过程,实现PrintPage委托 
    Private Sub printDocument_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) 
        Dim g As System.Drawing.Graphics = e.Graphics 
        If Me.Draw(g) Then 
            e.HasMorePages = True   '要分页打印 
        Else 
            e.HasMorePages = False  '打印结束 
        End If 
    End Sub 
 
    '第三步:打印委托,当然也可以放在构造函数中 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
        Me.printerPageSetting.PrintPageValue = New GoldPrinter.PrintPageDelegate(AddressOf printDocument_PrintPage) 
 
        '方法二:大家可以一试啊... 
        'Private WithEvents printDocument As System.Drawing.Printing.PrintDocument  '第一步:在申明窗口级变量 
        'Me.printDocument = Me.printerPageSetting.PrintDocument                     '第二步:在此将两个量联系起来 
        '将printDocument_PrintPage(...)加上    Handles printDocument.PrintPage       
 
    End Sub 
 
 
    '第四步:显示页面设置\打印机设置\打印预览对话框 
    Private Sub menuFilePageSetup_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles menuFilePageSetup.Click 
        Me.printerPageSetting.ShowPageSetupDialog() 
    End Sub 
 
    Private Sub menuFilePrintPreview_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles menuFilePrintPreview.Click 
        Me.printerPageSetting.ShowPrintPreviewDialog() 
    End Sub 
 
    Private Sub menuFilePrint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles menuFilePrint.Click 
        Me.printerPageSetting.ShowPrintSetupDialog() 
    End Sub 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
    '其它... 
    Private Function Draw(ByVal g As System.Drawing.Graphics) As Boolean 
        Return DrawText(g, Me.printerPageSetting.PrintDocument, Me.TextBox1.Text) 
    End Function 
 
 
 
 
    '这段代码改编自MSDN 
    Private Function DrawText(ByVal g As System.Drawing.Graphics, ByVal pdoc As System.Drawing.Printing.PrintDocument, ByVal text As String) As Boolean 
        Static intCurrentChar As Int32 
        Dim font As New Font("宋体", 11) 
 
        Dim intPrintAreaHeight, intPrintAreaWidth As Int32 
        With pdoc.DefaultPageSettings 
            intPrintAreaHeight = .PaperSize.Height - .Margins.Top - .Margins.Bottom 
            intPrintAreaWidth = .PaperSize.Width - .Margins.Left - .Margins.Right 
        End With 
 
        ' 横向打印,宽与高交换 
        If pdoc.DefaultPageSettings.Landscape Then 
            Me.Swap(intPrintAreaWidth, intPrintAreaHeight) 
        End If 
 
        '定义打印区域 
        Dim rectPrintingArea As New RectangleF(pdoc.DefaultPageSettings.Margins.Left, pdoc.DefaultPageSettings.Margins.Top, intPrintAreaWidth, intPrintAreaHeight) 
 
        Dim fmt As New StringFormat(StringFormatFlags.LineLimit) 
 
        Dim intLinesFilled, intCharsFitted As Int32 
        g.MeasureString(Mid(text, intCurrentChar + 1), font, _ 
                    New SizeF(intPrintAreaWidth, intPrintAreaHeight), fmt, _ 
                    intCharsFitted, intLinesFilled) 
 
        g.DrawString(Mid(text, intCurrentChar + 1), font, _ 
            Brushes.Black, rectPrintingArea, fmt) 
 
        intCurrentChar += intCharsFitted 
 
        If intCurrentChar < text.Length Then 
            Return True 
        Else 
            intCurrentChar = 0 
            Return False 
        End If 
    End Function 
 
    '两个数的值互换 
    Private Sub Swap(ByRef i As Int32, ByRef j As Int32) 
        Dim tmp As Int32 = i 
        i = j 
        j = tmp 
    End Sub 
 
End Class