淺談VFP報(bào)表打印的問(wèn)題

時(shí)間:2022-02-21 18:32:51 好文 我要投稿

淺談?dòng)嘘P(guān)VFP報(bào)表打印的問(wèn)題

  1.如何打印指定的頁(yè)

  通常情況下,VFP默認(rèn)打印當(dāng)前報(bào)表的全部?jī)?nèi)容,這給使用者帶來(lái)不便,那么如何實(shí)現(xiàn)讓系統(tǒng)打印指定范圍的內(nèi)容呢?其實(shí)很簡(jiǎn)單,只需在報(bào)表打印語(yǔ)句中加上關(guān)于打印范圍限制的關(guān)鍵字短語(yǔ)RANGE即可。如:打印報(bào)表XXX.FRX的第2至第5頁(yè),可使用如下命令

  REPORT FORM XXX.FRX RANGE 2,5 TO PRINTER

  為增強(qiáng)該語(yǔ)句功能的靈活性,可引入表示欲打印范圍的兩個(gè)參數(shù)x和y,分別代表打印的起始和終止頁(yè)碼,將打印命令改寫(xiě)為

  REPORT FORM XXX.FRX RANGE x,y TO PRINTER

  2.如何計(jì)算總頁(yè)數(shù),以實(shí)現(xiàn)每頁(yè)均打印“第x頁(yè) 共y頁(yè)”字樣

  VFP系統(tǒng)變量 _PAGENO 可提供當(dāng)前的打印頁(yè)號(hào),但卻沒(méi)有能返回總頁(yè)數(shù)的系統(tǒng)變量,若要實(shí)現(xiàn)在報(bào)表的`每一頁(yè)均打印“第x頁(yè) 共y頁(yè)”字樣,打印前可根據(jù)細(xì)節(jié)區(qū)所打印的記錄條數(shù),進(jìn)行計(jì)算,然后再打印,實(shí)現(xiàn)方法如下:

  PUBLIC mPAGE

  SELE XXX   && XXX為欲打印報(bào)表的數(shù)據(jù)源

  XX=35     && XX為每頁(yè)報(bào)表細(xì)節(jié)區(qū)所打印的記錄條數(shù)

  mPAGE=IIF(MOD(RECC(),XX)=0,RECC()/XX,INT(RECC()/XX)+1) &&mPAGE為報(bào)表總頁(yè)數(shù)

  在報(bào)表頁(yè)腳注(或其他合適位置)添加如下信息即可:

  "第 "+allt(str(_pageno))+" 頁(yè)  共 "+allt(str(mPAGE))+" 頁(yè)"

  3.如何使計(jì)算機(jī)打印紙張類(lèi)型適合于所設(shè)計(jì)報(bào)表

  報(bào)表在設(shè)計(jì)時(shí)能夠正常打印,可是安裝到其他計(jì)算機(jī)或重裝系統(tǒng)后,就會(huì)出現(xiàn)“XXX 帶區(qū)太大不能放入頁(yè)中”等提示,而且無(wú)法正常退出(尤其是對(duì)報(bào)表設(shè)計(jì)時(shí)采用自定義紙張的程序),這是為什么呢?現(xiàn)作如下解釋?zhuān)?/p>

  我們用報(bào)表設(shè)計(jì)器設(shè)計(jì)的報(bào)表打印程序,保存退出后,磁盤(pán)上就會(huì)出現(xiàn) .FRX和.FRT文件,我們的所有設(shè)計(jì)均保存在這兩個(gè)文件中。在VFP中 .FRX相當(dāng)于.DBF表,.FRT相當(dāng)于.FPT備注型文件,我們用USE XXX.FRX可以象打開(kāi).DBF文件一樣打開(kāi).FRX文件,在.FRX文件中有個(gè)Expr備注型字段名,在這個(gè)字段名中有如下與打印設(shè)置相關(guān)的內(nèi)容(不同設(shè)置內(nèi)容稍有差別):

  DRIVER=winspool

  DEVICE=Epson LQ-1600K

  OUTPUT=LPT1:

  ORIENTATION=0

  PAPERSIZE=256

  PAPERLENGTH=2800

  PAPERWIDTH=2400

  DEFAULTSOURCE=8

  PRINTQUALITY=180

  YRESOLUTION=180

  TTOPTION=1

  其中:

  DEVICE=Epson LQ-1600K 表示系統(tǒng)默認(rèn)打印機(jī)類(lèi)型為Epson LQ-1600K

  PAPERSIZE=256    該值256表示是自定義紙張(若=9 表示A4紙張、=13表示B5紙張)

  PAPERLENGTH=2800   表示報(bào)表設(shè)計(jì)時(shí)紙張長(zhǎng)度

  PAPERWIDTH=2400   表示報(bào)表設(shè)計(jì)時(shí)紙張寬度

  實(shí)際打印時(shí)之所以會(huì)上述提到的問(wèn)題,是因?yàn)樵谟脩?hù)環(huán)境中或Windows系統(tǒng)重新安裝后,系統(tǒng)一般默認(rèn)的是A4打印紙,與我們?cè)O(shè)計(jì)時(shí)保存在.frx文件里的紙張類(lèi)型不符,因而造成打印出錯(cuò)。為此,筆者編寫(xiě)了如下一段檢測(cè)紙張類(lèi)型的代碼,這段代碼可以幫助我們很好地解決因紙張類(lèi)型不符所帶來(lái)的問(wèn)題。

  USE xxx.frx IN 0 ALIAS mFrx      &&在空閑工作區(qū)以mFrx別名打開(kāi)xxx.frx文件

  x=atcline(#39;PAPERSIZE#39;,mFrx.Expr)    &&取得參數(shù)PAPERSIZE在Expr字段中的行

  mTYPE_1=subs(mline(mFrx.Expr,x),11)  &&取得設(shè)計(jì)時(shí)保存的紙張類(lèi)型

  mTYPE_2=allt(str(Prtinfo(2)))      &&取得當(dāng)前打印機(jī)默認(rèn)的紙張類(lèi)型

  x=atcline(#39;PAPERLENGTH#39;,mFrx.Expr)  &&取得紙張長(zhǎng)度在Expr字段中的行

  mLEN=subs(mline(mFrx.Expr,x),13)    &&取得紙張長(zhǎng)度

  x=atcline(#39;PAPERWIDTH#39;,mFrx.Expr)   &&取得紙張寬度在Expr字段中的行

  mWIDTH=subs(mline(mFrx.Expr,x),12)  &&取得紙張寬度

  use in #39;mFrx#39;              &&關(guān)閉xxx.frx文件

  if mTYPE_1=mTYPE_2        &&如果相符,則正常打印

  report form xxx.frx to printer noconsole

  else

  Messagebox(#39;請(qǐng)?jiān)O(shè)置打印機(jī)紙張類(lèi)型為自定義:長(zhǎng)=#39;+mLEN+#39;,寬=#39;+mWIDTH,0+48+0,#39;提示#39;)

  report form xxx.frx to printer prompt

  end

【淺談?dòng)嘘P(guān)VFP報(bào)表打印的問(wèn)題】相關(guān)文章:

幼兒飲食應(yīng)注意的問(wèn)題02-19

淺談?wù)f課的六要四忌02-19

男人健身時(shí)要注意的問(wèn)題02-19

網(wǎng)絡(luò)上癮成兒童首要的問(wèn)題02-19

關(guān)于孩子上戶(hù)口的問(wèn)題范文02-19

離婚孩子的撫養(yǎng)權(quán)問(wèn)題介紹02-19

身體出現(xiàn)問(wèn)題的8個(gè)征兆02-19

關(guān)于高速公路開(kāi)車(chē)的常見(jiàn)問(wèn)題02-19

騎單車(chē)時(shí)要注意哪些問(wèn)題02-19

橙子能解決哪些皮膚小問(wèn)題02-19