| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1335 人关注过本帖
标题:关于EJECT命令的两点困惑
只看楼主 加入收藏
月沐庭轩
Rank: 9Rank: 9Rank: 9
来 自:京城
等 级:贵宾
威 望:17
帖 子:393
专家分:1106
注 册:2011-7-24
收藏
得分:0 
试试这个:
CLOSE TABLES ALL
USE tt
SET DEVICE TO PRINTER
SET PRINT ON
GO TOP
k=0
DO WHILE NOT EOF( )

    IF k=40
        EJECT
        k=0
    ENDIF
    @ PROW(),0 SAY tt.成绩表单
    k=k+1
    SKIP
ENDDO
EJECT    &&最后一页不满40个记录,多加加一个走纸命令,让最后一页走完。
SET PRINT OFF
SET DEVICE TO SCREEN
应该是打印了四十行时就分页。

[ 本帖最后由 月沐庭轩 于 2012-11-15 23:14 编辑 ]

坚持学习vfp,QQ:306805680
2012-11-15 23:03
茵梦湖
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:31
帖 子:545
专家分:2180
注 册:2009-4-25
收藏
得分:0 

其实, 并不是非要用eject~  换页时, 只需将行号改为起始行号, 也可达到换页目的~  例:

     
程序代码:
@ 3,0 say " >>> 打单中...   起讫页码: &lspgs →&lspge"
     set prin on
     set devi to prin
     jgrow =iif(rowpp=40, 1.15,1.4)
     jgleft=4
     scan
        if mqh+"期"$ztxt
           set prin font "黑体",10
           @ 2, 4 say trim(ztxt)  && 借此达到换页~
           loop
        endif
        set prin font "黑体",11
        @ prow()+jgrow,jgleft say trim(ztxt)
     endscan
     set devi to scre
     set prin off

2012-11-16 12:05
whddg4910
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2012-11-15
收藏
得分:0 
回复 8楼 qjbzjp
我用的是WIN8操作系统,不知这该怎么让它从第二页的起始位置开始打印?希望能得到您的指点。
2012-11-16 13:25
whddg4910
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2012-11-15
收藏
得分:0 
回复 11楼 月沐庭轩
非常感谢!我试试~~
2012-11-16 13:27
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11780
专家分:43421
注 册:2006-5-13
收藏
得分:0 
以下是引用whddg4910在2012-11-16 13:25:02的发言:

我用的是WIN8操作系统,不知这该怎么让它从第二页的起始位置开始打印?希望能得到您的指点。
因为针式打印机不能退行打印,只要你指定的打印行小于打印机当前页面的当前行,打印机就会换到下页继续打印。也就是说,打印完本页的页尾之后,只要返回打印页标题的内容,而在页标题中指定绝对行号而不是相对行号,就可以实现换页。最后打印结束时再发一个换页命令。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2012-11-16 13:38
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册

授人以渔,不授人以鱼。
2012-11-16 14:42
jsyg
Rank: 2
等 级:论坛游民
威 望:1
帖 子:75
专家分:38
注 册:2012-10-20
收藏
得分:0 
以前在UCDOS时弄过,现在不存在这问题
2012-11-20 03:15
cxzbzgz
Rank: 8Rank: 8
来 自:云南楚雄
等 级:贵宾
威 望:24
帖 子:296
专家分:808
注 册:2012-6-15
收藏
得分:0 
楼主这段代码的问题出在纸张定位和走纸不准,先是每页必须从新的起点开始定位纸张,另外,满40条记录就得走纸而重新定位纸张,所以必须要有两层循环才行,如果解决了这两点,就解决了问题所在。楼主试试下面这段代码:
CLOSE TABLES ALL
USE tt
SET DEVICE TO PRINTER
SET PRINTER ON
GO TOP      
DO WHILE NOT EOF( )
    k=0
   DO WHILE NOT EOF( ) AND k<=40  &&如果记录大于40或者已经到数据库尾时就走纸换页
      @ Prow(),0 SAY tt.成绩表单  &&记录满40时,重新定位纸张
      k=k+1
      SKIP
    ENDDO &&这是内层循环
      EJECT  
   ENDDO
SET PRINTER off
SET DEVICE TO SCREEN

学习交流VFP,QQ:248561326。
2012-11-20 09:25
sdzhjf
Rank: 1
等 级:新手上路
帖 子:18
专家分:4
注 册:2012-9-7
收藏
得分:0 
EJECT 好象要跟纸张选择有关,选对了才能走正确。
DOS的要看打印机说明书,???...格式码....

如果WINDOWS系统,直接用报表就好了。
2012-11-20 12:49
sdzhjf
Rank: 1
等 级:新手上路
帖 子:18
专家分:4
注 册:2012-9-7
收藏
得分:0 
如果一定要用上述的语句,建议在最后才用EJECT
做个测试:
FOR i=1 TO 100
  ?i
ENDFOR
EJECT

如果1-40是你的打印区域,40-45应该是空白,41就是下页的1位置。
即打40行,跳5行。程序改为:
CLOSE TABLES ALL
USE tt
SET DEVICE TO PRINTER
SET PRINT ON
GO TOP
k=1
DO WHILE NOT EOF( )
    @ PROW(),0 SAY tt.成绩表单
    IF K%40 && 到了页尾,打印页间的空行
        *---如果位置还有些大半行,或小半行
        *---可以在这位置加 ???字体 (增大或减少一号字体)
        FOR i=1 to 5
          ?
        NEXT
        *---??? 恢复原来的字体
    ENDIF

    SKIP
    k=k+1
ENDDO

EJECT    &&最后一页不满40个记录,多加加一个走纸命令,让最后一页走完。
SET PRINT OFF
SET DEVICE TO SCREEN
2012-11-20 12:59
快速回复:关于EJECT命令的两点困惑
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023929 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved