用vb.net实现写字板程序报告(四)完

原创 2003年10月27日 02:06:00

所有源代码均在这里下载:

http://www.up2e.com/resource.php

用vb.net实现写字板程序报告(四)完 ---by zigz (LuHai)
luluhai@eastday.com

5)有关打印预览<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

起初以为很简单,但最后发现预览总是无法预览到实际文件,最终还是在微软站点上获得了相关信息,并很好的利用他到本应用程序中,而且十分成功,可以成功预览了。为了怕自己误导别人,所以把它原文也打印出来。

 

下面是两幅图片用来演示打印预览的效果。

5在RichTextBox中的文本
6打印预览中的文本

打印预览相关代码:

(注意!以下有关打印的代码均来自微软技术文档中)

' 必须确定所有的打印事件都是针对同一个 PrintDocument

    Private WithEvents pdoc As New PrintDocument()

    ' 打印文件是一个函数性的打印事件,每当要打印时该事件被触发

    ' 下面是一个非常快速和有用的精确计算要打印的文本是否能够被包括到整张打印页面

    '是我从微软站点上得到的资料,我把它应用到了我的程序中

    Private Sub pdoc_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles pdoc.PrintPage

        ' Declare a variable to hold the position of the last printed char. Declare

        ' as static so that subsequent PrintPage events can reference it.

        Static intCurrentChar As Int32

        ' Initialize the font to be used for printing.

        Dim font As New font("Microsoft Sans Serif", 24)

        Dim intPrintAreaHeight, intPrintAreaWidth, marginLeft, marginTop As Int32

        With pdoc.DefaultPageSettings

            ' Initialize local variables that contain the bounds of the printing

            ' area rectangle.

            intPrintAreaHeight = .PaperSize.Height - .Margins.Top - .Margins.Bottom

            intPrintAreaWidth = .PaperSize.Width - .Margins.Left - .Margins.Right

 

            ' Initialize local variables to hold margin values that will serve

            ' as the X and Y coordinates for the upper left corner of the printing

            ' area rectangle.

            marginLeft = .Margins.Left ' X coordinate

            marginTop = .Margins.Top ' Y coordinate

        End With

        ' If the user selected Landscape mode, swap the printing area height

        ' and width.

        If pdoc.DefaultPageSettings.Landscape Then

            Dim intTemp As Int32

            intTemp = intPrintAreaHeight

            intPrintAreaHeight = intPrintAreaWidth

            intPrintAreaWidth = intTemp

        End If

        ' Calculate the total number of lines in the document based on the height of

        ' the printing area and the height of the font.

        Dim intLineCount As Int32 = CInt(intPrintAreaHeight / font.Height)

        ' Initialize the rectangle structure that defines the printing area.

        Dim rectPrintingArea As New RectangleF(marginLeft, marginTop, intPrintAreaWidth, intPrintAreaHeight)

 

        ' Instantiate the StringFormat class, which encapsulates text layout

        ' information (such as alignment and line spacing), display manipulations

        ' (such as ellipsis insertion and national digit substitution) and OpenType

        ' features. Use of StringFormat causes MeasureString and DrawString to use

        ' only an integer number of lines when printing each page, ignoring partial

        ' lines that would otherwise likely be printed if the number of lines per

        ' page do not divide up cleanly for each page (which is usually the case).

        ' See further discussion in the SDK documentation about StringFormatFlags.

        Dim fmt As New StringFormat(StringFormatFlags.LineLimit)

        ' Call MeasureString to determine the number of characters that will fit in

        ' the printing area rectangle. The CharFitted Int32 is passed ByRef and used

        ' later when calculating intCurrentChar and thus HasMorePages. LinesFilled

        ' is not needed for this sample but must be passed when passing CharsFitted.

        ' Mid is used to pass the segment of remaining text left off from the

        ' previous page of printing (recall that intCurrentChar was declared as

        ' static.

        Dim intLinesFilled, intCharsFitted As Int32

        e.Graphics.MeasureString(Mid(rtbox.Text, intCurrentChar + 1), font, _

                    New SizeF(intPrintAreaWidth, intPrintAreaHeight), fmt, _

                    intCharsFitted, intLinesFilled)

 

        ' Print the text to the page.

        e.Graphics.DrawString(Mid(rtbox.Text, intCurrentChar + 1), font, _

            Brushes.Black, rectPrintingArea, fmt)

 

        ' Advance the current char to the last char printed on this page. As

        ' intCurrentChar is a static variable, its value can be used for the next

        ' page to be printed. It is advanced by 1 and passed to Mid() to print the

        ' next page (see above in MeasureString()).

        intCurrentChar += intCharsFitted

 

        ' HasMorePages tells the printing module whether another PrintPage event

        ' should be fired.

        If intCurrentChar < rtbox.Text.Length Then

            e.HasMorePages = True

        Else

            e.HasMorePages = False

            ' You must explicitly reset intCurrentChar as it is static.

            intCurrentChar = 0

        End If

    End Sub

 

    Private Sub printpreview()

        Dim ppd As New PrintPreviewDialog()

        Try

            ppd.Document = pdoc

            ppd.ShowDialog()

        Catch exp As Exception

            MessageBox.Show("有错误发生!!不能预览 " & _

                "确信现在你是否能够 " & _

                "连接到一个打印机?" & _

                "然后预览才可以.", Me.Text, _

                 MessageBoxButtons.OK, MessageBoxIcon.Error)

        End Try

    End Sub

 

    Private Sub mPrintpreview_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mPrintpreview.Click

        printpreview()

End Sub

 

其它比如状态栏的状态提示,字体对话框,颜色对话框等等不细说了,请参考源代码。

 

      总结:

总体来说,本程序达到了windows写字板85%的功能,很可惜就是没有做标尺的效果,也有些思路,就是利用拖动控件代码,设置两个控件,左右对称。规定这两个控件只能在一条水平线上拖动,根据两个控件的移动来确定Richtextbox中文本前后间距的空间大小,大致思路就是这样。

 

 

全文完。

 

by zigz(LuHai)

luluhai@eastday.com

操作系统实验六 设备管理

实验六 设备管理一、实验目的1、 理解设备管理的概念和任务。2、 掌握独占设备的分配、回收等主要算法的原理并编程实现。二、实验内容与基本要求1、 在Windows系统中,编写程序实现对独占设备的...
  • u011303443
  • u011303443
  • 2015年12月15日 12:57
  • 1681

VB.Net之旅—报表的制作(RDLC)

我们在这里以机房收费系统周结账单为例,讲解一下VS2008报表的制作 新建一个窗体,从工具箱中拖一个MicrosoftReportViewer 控件到窗体中,点击MicrosoftReportView...
  • u010073895
  • u010073895
  • 2014年08月24日 22:42
  • 1799

javaGUI设计简单计算器实验报告

课程实验报告 课程名称 面向对象 程序设计 班级 计算143 实验日期 2016.05.21 姓名 周...
  • zhouchao959734239
  • zhouchao959734239
  • 2016年06月07日 17:14
  • 2424

用vb.net实现写字板程序报告

  • 2010年01月08日 14:06
  • 111KB
  • 下载

vb.net创建写字板的源文件

  • 2009年08月08日 13:49
  • 862KB
  • 下载

Vb.Net 写字板

  • 2010年06月21日 13:49
  • 136B
  • 下载

写字板程序C#.net 文档

  • 2009年03月07日 10:55
  • 61KB
  • 下载

vb.net写字板 vb,net作业

  • 2012年07月21日 15:13
  • 313KB
  • 下载

VB.net开发写字板

  • 2007年03月30日 11:22
  • 36KB
  • 下载

利用C#.net编写的windows写字板

  • 2010年04月18日 20:34
  • 2.16MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用vb.net实现写字板程序报告(四)完
举报原因:
原因补充:

(最多只允许输入30个字)