::VB大世界 -> 经验技巧::

来源:百度文库 编辑:神马文学网 时间:2024/06/06 15:08:02
VB中的打印一直是件比较头痛的事情。通常大家会采用两种方法实现打印功能,即使用Printer对象和别人制作的打印控件。如果使用 Printer对象需要自己去计算和控制打印位置,而在VB中使用 Twip作为长度单位的计算量是非常大的。想想,一毫米就有56.7 Twip,一页 A4 纸的宽度是 210毫米,就有 56.7 × 210 = 11907 Twip,如此大的计算量,非把头算晕不可。
如果使用控件,则有两个问题,一是网上的控件虽多,但往往没有详细的说明文档,使用的时候需要摸着石头过河;二是网上的通用控件有时候不能满足我们写打印程序的一些特殊要求,如不能设计比较复杂的表格等。
使用 VB编程的程序员都习惯把控件往窗体上拖,这也是VB易用之所在。于是我们就有一种想法:如果设计打印报表也能这么做该多好?这种想法真的不错,而且也的确能够实现,因为VB 的 Form 对象提供了 PrintForm方法。PrintForm方法会使用默认打印机打印当前Form中的可视内容,所以我们只需要设计一个合适的Form,就可以非常容易地打印出理想的效果。
下面,我就以打印个人简历为例,说说如何使用Form实现打印以及需要注意些什么问题。
新建一个 StandardEXE 工程,将工程名改为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隐藏掉。看看,这次打印出来是不是非常令人满意了!