回 帖 发 新 帖 刷新版面

主题:[原创]VFP的打印解决方案(可修改报表)及路径的完美解决示例

用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]

回复列表 (共15个回复)

沙发


[img]http://upload.programfan.com/upfile/200601092229463.rar[/img]

板凳


[img]http://upload.programfan.com/upfile/200601092235616.rar[/img]

3 楼


[img]http://upload.programfan.com/upfile/2006010922379.rar[/img]

4 楼

[img]http://upload.programfan.com/upfile/200601092238303.rar[/img]

5 楼

[img]http://upload.programfan.com/upfile/200601092240839.rar[/img]

6 楼

厉害.多谢!
顺便请教"VFP中显式地调用是什么含义?请教."

7 楼

方法也可以独立于任何事件而单独存在,此类方法必须在代码中被显式地调用。...
"显式地调用"是指什么?是不是还有隐式的调用?二者有何区别?

8 楼

你参考以下处的资料
http://218.92.102.6/NETKJ/files/xxxy/vfp1/text17.htm

9 楼

表格效果对我很有用,谢谢

10 楼


下载不了呀

我来回复

您尚未登录,请登录后再回复。点此登录或注册