计算机等级考试二级VFP报表设计
1、与打印有关的12个系统变量
VFP提供了12个与打印有直接关系的系统变量:
_BOX 是否打印文字边框,.T.=打印
_GETNPD 指定或保存打印机接口驱动程序的文件名。
_PADVANCE设定打印纸进纸方式,=FORMFEED(默认)整张进纸。
_PAGENO 设定或保存当前的打印页号。
_PBPAGE 设定或返回打印的起始页号。
_PEPAGE 设定或返回打印的终止页号。
_PCOLNO 设定或返回当前打印头的列。
_PLINENO 设定或返回当前打印头的行。
_PCOPIES 设定或返回打印份数。
_PLENGTH 设定或返回打印纸的页长,默认=66行长。
_PPITCH 设定打印机的打印密度。
_PQUALITY设定打印机的打印质量。
还有其它的,不太常用
2、
常用的打印命令
(1).打印指定的页
REPORT FORM tem.frt RANGE 3,10 TO PRINTER &;&;第3起打至第10页
(2).计算总页数,以实现“第?页/总?页”
在打印前根据细节区所打印的记录条数,先进行计算,然后再打印,具体代码:
PUBL wfpage
SELE XXX &;&;xxx=供打印的数据表
XX=10 &;&;XX=细节区所打印的记录条数
mPAGE=IIF(RECCOUNT()%XX=0,INT(RECCOUNT()/XX),INT(RECCOUNT()/XX)+1)
wfpageE就是总页数,在需要总页数时就可直接引用mPAGE变量。
(3).如何使报表打满一页
如果打印的记录不足一页,“页注脚”会自动上移,影响报表的美观,解决的办法和上面的差不多,即补足一页中所缺少的记录(补足空白记录):
SELE XXX &;&;xxx=供打印的数据表
XX=10 &;&;XX=一页细节区所打印的记录条数
mI=RECCOUNT()%XX &;&;取得缺少的记录条数
FOR I=1 to mI
APPEND BLANK
ENDF
(4).出现“XXX 带区太大不能放入页中”等提示,而且无法正常退出(尤其是对自定义纸张大小的
程序),这是为什么呢?
我们用报表设计器设计的打印程序,保存退出后,磁盘上就会出现 .frx和.FRT文件,我们的所有
设计均保存在这两个文件中。在VFP中 .frx相当于.DBF表,.FRT相当于.FPT备注型文件,我们用USE XXX.frx 可以象打开.DBF文件一样打开.frx文件,在.frx文件中有个Expr备注型字段名,在这个字段名中有如下内容:其中()内是我所加的译文
RIVER=winspool
DEVICE=Epson LQ-1600K
OUTPUT=LPT1:
ORIENTATION=0
PAPERSIZE=256 (纸张大小)
PAPERLENGTH=1000 (纸张长度)
PAPERWIDTH=1600 (纸张宽度)
DEFAULTSOURCE=8 (默认来源)
PRINTQUALITY=180 (打印质量)
COLOR=2
YRESOLUTION=180
TTOPTION=1
从这个Expr备注型字段里可以看出:PAPERSIZE=256 这里的256表示是自定义纸张,如果:
PAPERSIZE=9 为A4、11为A5 具体数据见VFP帮助的Pr
intfo()一节, 而:
PAPERLENGTH=1000 (纸张长度)
PAPERWIDTH=1600 (纸张宽度)
则分别代表自定义纸张的长度和宽度。 之所以会出现上面提到的问题,是因为系统重新安装打印机后,WIN系统一般默认的是A4打印纸,与我们设计时保存在.frx文件里的纸张不符,因而造成这种情况。 那么如何避免出现这个
问题呢?
下面是一段检测纸张类型的代码:
这段代码必须放在执行report form ... 命令前。
use xxx.frx in 0 ALIAS mPrint &;&;在空闲
工作区以mPrint别名打开xxx.frx文件
x=atcline('PAPERSIZE',mPrint.Expr)&;&;取得PAPERSIZE在Expr字段中的行
sSIZE=subs(mline(mPrint.Expr,x),11) &;&;取得设计时保存的纸张类型
mSIZE=allt(str(Prtinfo(2))) &;&;取得当前打印机默认的纸张类型
x=atcline('PAPERLENGTH',mPrint.Expr) &;&;取得纸张长度在Expr字段中的行
sLEN=subs(mline(mPrint.Expr,x),13) &;&;取得纸张长度
x=atcline('PAPERWIDTH',mPrint.Expr)&;&;取得纸张宽度在Expr字段中的行
sWIDTH=subs(mline(mPrint.Expr,x),12)