cyberfan's blog

正其谊不谋其利,明其道不计其功

  IT博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  15 随笔 :: 489 文章 :: 44 评论 :: 0 Trackbacks
VB 中的打印一直是件比较头痛的事情。通常大家会采用两种方法实现打印功能,即使用 Printer 对象和别人制作的打印控件。

如果使用 Printer 对象需要自己去计算和控制打印位置,而在 VB中使用 Twip 作为长度单位的计算量是非常大的。想想,一毫米就有 56.7 Twip,一页 A4 纸的宽度是 210 毫米,就有 56.7 × 210 = 11907 Twip,如此大的计算量,非把头算晕不可。

如果使用控件,则有两个问题,一是网上的控件虽多,但往往没有详细的说明文档,使用的时候需要摸着石头过河;二是网上的通用控件有时候不能满足我们写打印程序的一些特殊要求,如不能设计比较复杂的表格等。

使用 VB 编程的程序员都习惯把控件往窗体上拖,这也是 VB 易用之所在。于是我们就有一种想法:如果设计打印报表也能这么做该多好?这种想法真的不错,而且也的确能够实现,因为 VB 的 Form 对象提供了 PrintForm 方法。PrintForm 方法会使用默认打印机打印当前 Form 中的可视内容,所以我们只需要设计一个合适的 Form,就可以非常容易地打印出理想的效果。

下面,我就以打印个人简历为例,说说如何使用 Form 实现打印以及需要注意些什么问题。

新建一个 Standard EXE 工程,将工程名改为 MyPrintForm,默认的 Form1 改名为 PrintForm。然后按下表修改其属性:

BorderStyle
0 - None
Width
10433

BackColor
&H00FFFFFF&
Height
14742

Font
宋体, 小五

其中,PrintForm 的大小是按 16 开纸的大小设置的。

然后,使用 Label、Shape 和 Line 控件在 PrintForm 中绘制出个人简历表格。

个人简历绘制完成后直接就可以打印,随便在窗体中放一个按钮 Command1,在其 Click 事件中写两行代码即可:

Me.Command1.Visible = False

Me.PrintForm

然而,使用这种方法用于打印实在有些不正规。而且,那么大一个 PrintForm 显示在屏幕上,既不能滚动也不能改变位置,实在有些难受——现在是该使用 MDIForm 的时候了。添加一个新的 MDIForm,命名为 MDIFormMain;将 PrintForm 的 MDIChild 属性改为 True;这时候运行程序,是不是非常漂亮的预览效果?如果运行的时候 PrintForm 没有显示出来,请设置 MDIFormMain 的 AutoShowChldren 属性为 True。

现在我们只需要为 MDIFormMain 添加菜单或者按钮以便选择打印。添加菜单的方法相对比较简单,所以就添加一个菜单吧:名称 MenuPrint,标题为“打印(&P)”。不过菜单的代码当然不会还是 Me.PrintForm 了,应该改为

Me.ActiveForm.PrintForm

至此,简单的打印功能已经完成了。但是对于个人简历表格,你是宁愿填好了再打印还是打印好了再填呢?用惯了计算机打印的人恐怕都不太喜欢动笔,所以,如果能直接在 PrintForm 上填写内容,再将填好的表格打印出来就更好了。

要办到这一点并不难,只需要在每个需要填写内容的地方放上一个 TextBox 按控件即可,当然,这个控件要设置一下:

Appearance
0 - Flat
BorderSytle
0 - None

然后记得清空它们的 Text 属性,放适当的调整位置和大小。

再打印一次试试,结果并不如想象的那么好:TextBox 中的文本不是按矢量图打印的,而是按位图打印的,所以字体看起来非常不光滑。唯一的解决办法就是在放置 TextBox 的地方,放置一个同样大小同样位置 Label 控件,并使之置于 TextBox 之下。然后修改打印菜单的 Click 事件:

With Me.ActiveForm

Label1.Caption = TextBox1.Text

TextBox1.Visible = False

……

.PrintForm.

End With

从代码可以看出来,就是把每个 TextBox 的 Text 值赋予对应的 Label 的 Caption 属性。然后再把这些 TextBox 隐藏掉。看看,这次打印出来是不是非常令人满意了!
posted on 2005-08-12 14:34 cyberfan 阅读(568) 评论(0)  编辑 收藏 引用 所属分类: vb
只有注册用户登录后才能发表评论。