设计自己的printpreviewdialog

王朝other·作者佚名  2006-01-09
宽屏版  字体: |||超大  

自己设计的一个printpreview程序,最大的特点是把页面设置,打印设置,字体设置整合到一个窗口中了。还有很多问题,希望高手指点一二。

源代码:

Imports System.Drawing.printing

Imports System.io

Public Class previewcontrol

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 PrintPreviewControl1 As System.Windows.Forms.PrintPreviewControl

Friend WithEvents printsetup As dbcbutton.dbcbutton

Private WithEvents pagesetup As dbcbutton.dbcbutton

Friend WithEvents Label1 As System.Windows.Forms.Label

Friend WithEvents Label2 As System.Windows.Forms.Label

Friend WithEvents Label3 As System.Windows.Forms.Label

Friend WithEvents openfile As dbcbutton.dbcbutton

Friend WithEvents setfont As dbcbutton.dbcbutton

Friend WithEvents printthis As dbcbutton.dbcbutton

Friend WithEvents pagecount As System.Windows.Forms.NumericUpDown

Friend WithEvents pageroom As System.Windows.Forms.ComboBox

<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()

Me.PrintPreviewControl1 = New System.Windows.Forms.PrintPreviewControl

Me.printsetup = New dbcbutton.dbcbutton

Me.pagesetup = New dbcbutton.dbcbutton

Me.pagecount = New System.Windows.Forms.NumericUpDown

Me.pageroom = New System.Windows.Forms.ComboBox

Me.Label1 = New System.Windows.Forms.Label

Me.Label2 = New System.Windows.Forms.Label

Me.Label3 = New System.Windows.Forms.Label

Me.openfile = New dbcbutton.dbcbutton

Me.setfont = New dbcbutton.dbcbutton

Me.printthis = New dbcbutton.dbcbutton

CType(Me.pagecount, System.ComponentModel.ISupportInitialize).BeginInit()

Me.SuspendLayout()

'

'PrintPreviewControl1

'

Me.PrintPreviewControl1.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.PrintPreviewControl1.AutoZoom = False

Me.PrintPreviewControl1.Location = New System.Drawing.Point(8, 40)

Me.PrintPreviewControl1.Name = "PrintPreviewControl1"

Me.PrintPreviewControl1.Size = New System.Drawing.Size(696, 280)

Me.PrintPreviewControl1.TabIndex = 0

Me.PrintPreviewControl1.Zoom = 0.3

'

'printsetup

'

Me.printsetup.BackColor = System.Drawing.SystemColors.Control

Me.printsetup.ButtonStyle = dbcbutton.dbcbutton.Style.RectStyle

Me.printsetup.GrayColor = System.Drawing.Color.BurlyWood

Me.printsetup.LightColor = System.Drawing.Color.White

Me.printsetup.Location = New System.Drawing.Point(168, 8)

Me.printsetup.mytext = "打印设置"

Me.printsetup.Name = "printsetup"

Me.printsetup.Size = New System.Drawing.Size(72, 24)

Me.printsetup.TabIndex = 1

'

'pagesetup

'

Me.pagesetup.BackColor = System.Drawing.SystemColors.Control

Me.pagesetup.ButtonStyle = dbcbutton.dbcbutton.Style.RectStyle

Me.pagesetup.GrayColor = System.Drawing.Color.BurlyWood

Me.pagesetup.LightColor = System.Drawing.Color.White

Me.pagesetup.Location = New System.Drawing.Point(256, 8)

Me.pagesetup.mytext = "页面设置"

Me.pagesetup.Name = "pagesetup"

Me.pagesetup.Size = New System.Drawing.Size(72, 24)

Me.pagesetup.TabIndex = 2

'

'pagecount

'

Me.pagecount.Location = New System.Drawing.Point(624, 11)

Me.pagecount.Minimum = New Decimal(New Integer() {1, 0, 0, 0})

Me.pagecount.Name = "pagecount"

Me.pagecount.Size = New System.Drawing.Size(40, 21)

Me.pagecount.TabIndex = 3

Me.pagecount.Value = New Decimal(New Integer() {1, 0, 0, 0})

'

'pageroom

'

Me.pageroom.Items.AddRange(New Object() {"25%", "50%", "75%", "100%"})

Me.pageroom.Location = New System.Drawing.Point(512, 12)

Me.pageroom.Name = "pageroom"

Me.pageroom.Size = New System.Drawing.Size(56, 20)

Me.pageroom.TabIndex = 4

Me.pageroom.Text = "缩放"

'

'Label1

'

Me.Label1.Location = New System.Drawing.Point(456, 16)

Me.Label1.Name = "Label1"

Me.Label1.Size = New System.Drawing.Size(48, 16)

Me.Label1.TabIndex = 5

Me.Label1.Text = "缩放:"

Me.Label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter

'

'Label2

'

Me.Label2.Location = New System.Drawing.Point(584, 16)

Me.Label2.Name = "Label2"

Me.Label2.Size = New System.Drawing.Size(32, 16)

Me.Label2.TabIndex = 6

Me.Label2.Text = "第"

Me.Label2.TextAlign = System.Drawing.ContentAlignment.MiddleCenter

'

'Label3

'

Me.Label3.Location = New System.Drawing.Point(672, 16)

Me.Label3.Name = "Label3"

Me.Label3.Size = New System.Drawing.Size(32, 16)

Me.Label3.TabIndex = 7

Me.Label3.Text = "页"

Me.Label3.TextAlign = System.Drawing.ContentAlignment.MiddleCenter

'

'openfile

'

Me.openfile.BackColor = System.Drawing.SystemColors.Control

Me.openfile.ButtonStyle = dbcbutton.dbcbutton.Style.RectStyle

Me.openfile.GrayColor = System.Drawing.Color.BurlyWood

Me.openfile.LightColor = System.Drawing.Color.White

Me.openfile.Location = New System.Drawing.Point(8, 8)

Me.openfile.mytext = "选择文件"

Me.openfile.Name = "openfile"

Me.openfile.Size = New System.Drawing.Size(72, 24)

Me.openfile.TabIndex = 8

'

'setfont

'

Me.setfont.BackColor = System.Drawing.SystemColors.Control

Me.setfont.ButtonStyle = dbcbutton.dbcbutton.Style.RectStyle

Me.setfont.GrayColor = System.Drawing.Color.BurlyWood

Me.setfont.LightColor = System.Drawing.Color.White

Me.setfont.Location = New System.Drawing.Point(88, 8)

Me.setfont.mytext = "设置字体"

Me.setfont.Name = "setfont"

Me.setfont.Size = New System.Drawing.Size(72, 24)

Me.setfont.TabIndex = 9

'

'printthis

'

Me.printthis.BackColor = System.Drawing.SystemColors.Control

Me.printthis.ButtonStyle = dbcbutton.dbcbutton.Style.RectStyle

Me.printthis.GrayColor = System.Drawing.Color.BurlyWood

Me.printthis.LightColor = System.Drawing.Color.White

Me.printthis.Location = New System.Drawing.Point(344, 8)

Me.printthis.mytext = "开始打印"

Me.printthis.Name = "printthis"

Me.printthis.Size = New System.Drawing.Size(72, 24)

Me.printthis.TabIndex = 10

'

'previewcontrol

'

Me.AutoScaleBaseSize = New System.Drawing.Size(6, 14)

Me.ClientSize = New System.Drawing.Size(712, 325)

Me.Controls.Add(Me.printthis)

Me.Controls.Add(Me.setfont)

Me.Controls.Add(Me.openfile)

Me.Controls.Add(Me.Label3)

Me.Controls.Add(Me.Label2)

Me.Controls.Add(Me.Label1)

Me.Controls.Add(Me.pageroom)

Me.Controls.Add(Me.pagecount)

Me.Controls.Add(Me.pagesetup)

Me.Controls.Add(Me.printsetup)

Me.Controls.Add(Me.PrintPreviewControl1)

Me.Name = "previewcontrol"

Me.Text = "previewcontrol"

CType(Me.pagecount, System.ComponentModel.ISupportInitialize).EndInit()

Me.ResumeLayout(False)

End Sub

#End Region

Private printstream As StreamReader

Private printfont As Font

Dim newprintdocument As New PrintDocument

Private totalpage As Single = 0 '存放总页数

Private Sub previewcontrol_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

AddHandler newprintdocument.PrintPage, AddressOf newprintdocument_printpage

End Sub

'页面的printpage函数

Private Sub newprintdocument_printpage(ByVal sender As Object, ByVal ev As PrintPageEventArgs)

Try

totalpage += 1

If printstream.ReadLine Is Nothing Then

MsgBox("无内容")

Exit Sub

End If

If printfont Is Nothing Then

printfont = New Font("宋体", 12)

End If

Dim pagelines As Single '存放每页可打印的行数

Dim lineheight As Single = printfont.GetHeight(ev.Graphics) '存放行高

Dim xpos As Single = 0 '存放每行打印的X坐标

Dim ypos As Single = 0 '存放每行打印的Y坐标

Dim linecount As Single = 0 '存放已经打印的行数

Dim strformat As New StringFormat

Dim left As Single = ev.MarginBounds.Left

Dim top As Single = ev.MarginBounds.Top

strformat.FormatFlags = StringFormatFlags.LineLimit

Dim printbrush As Brush

printbrush = New SolidBrush(Color.Black)

pagelines = ev.MarginBounds.Height / lineheight

Dim strline As String = Nothing

Do While linecount < pagelines

strline = printstream.ReadLine

If strline Is Nothing Then

Exit Do

End If

top = ev.MarginBounds.Top + linecount * lineheight

ev.Graphics.DrawString(strline, printfont, printbrush, left, top, strformat)

linecount = linecount + 1

Loop

If strline Is Nothing Then

ev.HasMorePages = False

Else

ev.HasMorePages = True

End If

Catch ex As Printing.InvalidPrinterException

MsgBox(ex.Message, MsgBoxStyle.OKOnly, "打印出错")

MsgBox(ex.Source)

Catch ex1 As Exception

MsgBox(ex1.Message)

MsgBox(ex1.Source)

End Try

pagecount.Maximum = totalpage

pagecount.Minimum = 1

End Sub

'打开文件,读取文件流,开始填充打印页面

Private Sub openfile_onclick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles openfile.Click

totalpage = 0

If Not (printstream Is Nothing) Then

printstream.Close()

End If

Dim filedialog As New OpenFileDialog

If filedialog.ShowDialog = DialogResult.OK Then

printstream = New StreamReader(filedialog.FileName)

PrintPreviewControl1.Document = newprintdocument

PrintPreviewControl1.Zoom = 1

End If

End Sub

'字体设置对话框

Private Sub setfont_onclick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles setfont.Click

Dim setfontdialog As New FontDialog

If setfontdialog.ShowDialog = DialogResult.OK Then

totalpage = 0

printstream.BaseStream.Seek(0, SeekOrigin.Begin)

printfont = setfontdialog.Font

PrintPreviewControl1.InvalidatePreview()

Me.Refresh()

End If

End Sub

'打印设置对话框

Private Sub printsetup_onclick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles printsetup.Click

Dim printsetup As New PrintDialog

printsetup.Document = newprintdocument

If printsetup.ShowDialog = DialogResult.OK Then

totalpage = 0

printstream.BaseStream.Seek(0, SeekOrigin.Begin)

PrintPreviewControl1.InvalidatePreview()

Me.Refresh()

End If

End Sub

'页面设置对话框

Private Sub pagesetup_onclick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles pagesetup.Click

Dim pagesetup As New PageSetupDialog

pagesetup.Document = newprintdocument

If pagesetup.ShowDialog = DialogResult.OK Then

totalpage = 0

printstream.BaseStream.Seek(0, SeekOrigin.Begin)

PrintPreviewControl1.InvalidatePreview()

Me.Refresh()

End If

End Sub

'打印文档

Private Sub printthis_onclick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles printthis.Click

newprintdocument.Print()

End Sub

'当窗口关闭时关闭文档流

Private Sub previewcontrol_onclose(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Closed

If Not (printstream Is Nothing) Then

printstream.Close()

End If

End Sub

'改变当前显示的页面

Private Sub NumericUpDown1_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles pagecount.ValueChanged

PrintPreviewControl1.StartPage = pagecount.Value - 1

End Sub

'改变显示比例

Private Sub pageroom_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles pageroom.SelectedIndexChanged

Select Case pageroom.Items(pageroom.SelectedIndex)

Case "25%"

PrintPreviewControl1.Zoom = 0.25

PrintPreviewControl1.Refresh()

Me.Refresh()

Case "50%"

PrintPreviewControl1.Zoom = 0.5

PrintPreviewControl1.Refresh()

Me.Refresh()

Case "75%"

PrintPreviewControl1.Zoom = 0.75

PrintPreviewControl1.Refresh()

Me.Refresh()

Case "100%"

PrintPreviewControl1.Zoom = 1

PrintPreviewControl1.Refresh()

Me.Refresh()

End Select

End Sub

End Class

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有