主题:[原创]VFP的打印解决方案(可修改报表)及路径的完美解决示例
或移位。解决方法用WORD、EXCEL表来开放给用户。但打发票一次200多张转到EXCEL
中用不好。
VFP9的报表是柳暗花明,可保护性的开放给最终用户。我写后给用户试用反映效果好。
现写成一示例抛砖引玉。
使用修改的cPrint类方法,将类加入你的项目
*************************************
RELEASE oPreview &&如有同类变量名须先释放
PUBLIC oPreview &&声明公用变量
cReportName="prnfast" &&prnfast为打印报表名,可根据你的自行修改,不用加后缀。
*要做到报表的环境中表在当前目录,公用变量也已声明,不然出错。
Set Classlib To Cprint Additive &&指明类打开
oPreview=Creat([FrmReport],cReportName) &&创建报表浏览
oPreview.Show( ) &&显示报表浏览
CLEAR CLASSLIB Cprint &&关闭打开的类
*************************************
注:同时要注册mscomctl.ocx
目录树控件TREEVIEW、图像IMAGELIST控件在mscomctl.ocx(本目录中有),在其它机上用要注册它,可用打包软件处理。
也可手动注册:
在WINDOWS的开始菜单中《运行》处输入
regsvr32 路径\mscomctl.ocx (注册)
regsvr32 /u 路径\mscomctl.ocx (取消注册)
但你用我修改的简单类就不用注册mscomctl.ocx
报表是在cPrint类的基础上更改。鸣谢冰火提供SP1的汉化及其它不知名的大侠。
主要有以下一些:
1、解决路径的问题。我是以 VFPPRJ 第一层文件夹。下有 prg,form,data等文件夹。
a、在VFP的编程环境下
运行defaut.prg
cCurrentdir="D:\lab\dbftoword-excel" &&因是编程环境,要改写成你的绝对路径
SET DEFAULT TO (cCurrentdir) &&设置默认路径
DO prg\defpath.prg WITH (cCurrentdir)&&设置主目录下的有所文件夹路径defpath.prg放
*主目录的 prg\下
b、编成EXE用的main.prg加入以下几句
cPath=SYS(5)+SYS(2003)
SET DEFAULT TO (cPath) &&设置默认目录
DO prg\defpath WITH (cPath) &&设置VFP搜索目录
如果是局域中多机操作同一数据库,其路径也要加入。
2、VFP的DBF表转成EXCEL两方法,一是先创建EXCEL报表,加入DBF表资料。
另一是调用已创建的EXCEL模板,加入DBF表资料。做复杂报表可用此。
3、VFP的DBF表转成WORD两方法,一是先创建WORD报表,加入DBF表资料。
另一是调用已创建的WORD模板,加入DBF表资料。
4、自编写的报表预览
5、报表修改两方法,先将FRX和FRT报表文件在编程下创建发,用FileToStr()加入DBF的TEXT字段
预览修改是从数据库中用StrToFile()还原成报表,修改后退出时保存报表。如用户修改不能还
原时,预览修改之前选默认报表,可将最原始的报表从数据库调出覆盖。
方法1是用原cprint的VFP9自编功能,太复杂,不推荐此方法。
方法2是VFP9的保护性修改,我在例子中是只能移位置。
KEYBOARD "{ctrl+f10}" &&最大化窗口
MODIFY REPORT (oForm.cFrxName) IN SCREEN PROTECTED SAVE
我最中意及推荐此方法,所见既所得。如果你的用户习惯看中文,
****将表报的绑定临时DBF的字段名用中文**********
select 字段1 as 中文名 ... from 数据表 order by into table 临时表
6、自定义打印纸张,有的打印机须进入设置界面调用其自身的自定义。
我试过WINDOWS 2000系统中可加入0.5cm 高的纸,但没找到适合的打印机支持。打一行的此方法未找到。
以上例子只须run文件夹的文件和VFP9的运行库(不是SP1)就可以了。或者你可重编EXE。
(相关图片暂上不了)
示例:
2006/01/09:
1、 修正了速度的问题,在PⅡ400的CPU中运行速度不慢。
2、在自写浏览报表先设置环境
SET REPORTBEHAVIOR 90 ,转用系统浏览报表前要转换SET REPORTBEHAVIOR
3、用sys(1037,1)将自定义打印纸写入报表。在WIN2000,XP和WIN98下测试OK。
自定义打印纸一般是不支持网络打印机,我试了,只有EPSON LQ-300支持网络打印机添加方法。
激光打印机,HP 1020在WINDOWS下增加自定义打印纸也不会自动加入该打印机,用sys(1037,1)
调用本身的程序增加,按确定可将增加自定义打印纸写入报表。直接写FRX的方法,我试过没有此法好。
另有说明(在以前例子上改写)
http://www.programfan.com/club/showbbs.asp?id=118477
修正版-源码下载,2006/03/05重上传
[url]http://upload.programfan.com/upfile/200603052122516.rar[/url]