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