分享
 
 
 

VB中实现“所见即所得”功能

王朝厨房·作者佚名  2007-01-04
窄屏简体版  字體: |||超大  

作者: 王锋

来源:www.ccidnet.com

Windows程序大多数具有“所见即所得”(WYSIWYG,What You See Is What You Get)的功能。“所见即所得”是指软件打印输出效果和屏幕显示效果完全一致。“所见即所得”是Windows程序的一个主要优点之一。

本文将介绍如何使用Visual BASIC(以下简称VB)编写具有“所见即所得”功能的Windows程序。

一、方法概述

为了在屏幕上模拟打印效果,我们使用VB的一个窗体来模拟一张打印纸。在VB中,每一个窗体都有一个PrintForm方法。使用PrintForm方法可以把一个窗体的内容完全一样地通过打印机打印出来。由于PrintForm方法在打印窗体内容的时候,对于窗体内的文字和图形都是同样地打印。所以通过简单的编程,使用PrintForm方法可以非常方便地实现图文混合打印。

①确定用户可以使用的显示与打印双功能字模

“所见即所得”程序中用户可以使用的字模必须是同时支持Windows的显示设备和打印设备的双功能字模。只有这些字模才可以在屏幕和打印机上产生一样的效果。因此,程序必须首先获得这些显示与打印双功能字模的名称。

②在屏幕上设置“纸张”窗体的大小

通过读取Windows打印管理器纸张尺寸的设置,在VB里建立一个与打印纸具有同样尺寸比例关系的窗体,作为屏幕上模拟打印效果的“纸张”,让用户在屏幕上就可以看到文字和图形在打印纸上的位置分布。

③用户在屏幕“纸张”上模拟打印效果

在模拟打印的窗体中通过使用Print、Line、Circle等方法绘制文字和图形的,还可以使用图形框、Graph.VBX、OLE等控件绘制图形、统计图表、公式、艺术字型等。

④将屏幕“纸张”的内容输出到打印机

使用窗体的PrintForm方法把第③步所绘制的文字和图形输出到打印机,得到和屏幕显示一模一样的打印拷贝,实现“所见即所得”。

二、打印机字模和显示器字模的精确匹配

Windows的字模分为两类:打印机字模和显示器字模。各种TrueType字模(如宋体、黑体字模)都是显示与打印双功能字模。其他的非TrueType字模就只能用于显示或打印。

如果在模拟打印窗体的文字输出中使用了只能用于显示的字模,那么当PrintForm方法执行的时候,Windows就只能在打印字模中查找一个尽量和这个显示字模字型匹配的字模来进行打印。这样将导致得到的打印拷贝与屏幕显示不一致。

为了使程序获得“所见即所得”的能力,必须在窗体输出中使用显示与打印双功能字模。因此,程序获得“所见即所得”能力的一个关键是:确保在屏幕输出中只使用显示与打印双功能字模。

在VB中提供了两个全局对象:屏幕对象Screen和打印机对象Printer。两个对象都提供了FontCount属性和Fonts属性。FontCount属性提供了可使用字模的数量,而Fonts属性提供了可使用字模的名称。在程序中,我们可以取出Screen对象和Printer对象所共同拥有的字模,这些字模就是所有的显示与打印双功能字模。

具体的程序如下:

首先设置一个列表框,取名List1,然后调用下面的GetFont函数,在List1中就存放所有显示与打印双功能字模的名称。

Sub GetFont()

For i=0 To Screen.FontCount-1

For j=0 To Printer.FontCount-1

If Screen.Fonts(i)=Printer.Fonts(j) Then

List1.Add1tem (Sereen.Fonts(i))

End If

Next j

Next i

End Sub

三、窗体大小和纸张尺寸的匹配

为了在屏幕上可以清楚地看到文字和图形在打印纸上的位置和大小关系,必须使VB显示窗口的大小比例和打印纸张的大小比例是一致的。打印纸张的大小可以使用Printer对象的Width和Height属性来获得。根据获得的属性值可以设置VB显示窗体的大小比例,使之合乎纸张的比例大小。

下面的程序中有一个变量Size,其取值的范围为0-1。它的作用是控制打印图形的大小。当Size的值为1的时候,打印图形将和Windows设定的纸张一样大小。具体程序如下:

Sub Form_Load ()

Dim SizeAS INTECER

Size=0.95

Form1.Height=Printer.Height*Size

Form1.Wdth=Printer.Width*Size

End Sub

四、模拟打印和打印输出

下面的一段程序演示了在显示窗体上模拟打印文字和图形的方法,以及使用PrintForm把显示窗体中的文字和图形输出到打印机的方法。

注意的是:为了使用PrintForm方法,必须把显示窗体的AutoRedraw属性设置为True。

由于PrintForm方法打印窗体的内容是使用bit-by-bit的拷贝方法,因此在窗体里的所有文字和图形都可以被原样打印出来。作为例子,我们可以使用OLE控件来显示Word公式编辑器里编辑的公式,使用Picture和Graph控件来显示图形和统计图。然后使用PrintForm方法将它们打印出来。

具体程序如下:

Sub PrintOnScreen ()

Form1.Scale(0,0)-(100,100) ’ 设置坐标

Form1.Line(100,0)-(0,100) ’ 显示画线

Form1.CurrentX=0

Form1.CurrentY=0

Form1.FontName="宋体" ’ 输出文字

Form1.FontSize=20

Form1.Print "模拟打印"

Picture1.Picture=LoadPicture("setup.bmp") ’输出图形

Form1.PrintForm ’ 将显示窗体的内容送到打印机

Printer.EndDoc ’ 开始打印

End Sub

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有