电竞比分网-中国电竞赛事及体育赛事平台

分享

VFP動(dòng)態(tài)定位打印表格

 懶蟲 的 勤奮 2010-06-13

 

  在使用VFP設(shè)計(jì)應(yīng)用系統(tǒng)的過(guò)程中,應(yīng)用系統(tǒng)的表格輸出部分一般都是在報(bào)表設(shè)計(jì)器下設(shè)計(jì)完成的,設(shè)計(jì)出來(lái)的表格,格式固定,位置固定。但在實(shí)踐中我們發(fā)現(xiàn):在一種打印機(jī)下調(diào)試設(shè)計(jì)出來(lái)的表格,換到另一種打印機(jī)時(shí),表格的位置發(fā)生了變化,常常要靠移動(dòng)紙張來(lái)解決。筆者經(jīng)過(guò)多次測(cè)試后,利用編程解決了這個(gè)問(wèn)題。

  筆者通過(guò)對(duì)VFP的報(bào)表文件進(jìn)行分析,發(fā)現(xiàn)報(bào)表文件其實(shí)同數(shù)據(jù)表的結(jié)構(gòu)是相同的。其中后綴為.frx的文件存放報(bào)表控件一些主要信息,而后綴為.frt的文件存放的是備注部份內(nèi)容。這些文件都可以使用數(shù)據(jù)表的操作命令,可以使用VFP的命令和函數(shù)來(lái)改變報(bào)表控件中一些值的大小,如在VFP命令窗口中對(duì)一個(gè)盤中已存在的名為“干部登記表"的報(bào)表文件進(jìn)行操作:

  USE 干部登記表.frx

  BROW

  這時(shí)我們看到的是一個(gè)數(shù)據(jù)表的內(nèi)容列表方式,表中包含報(bào)表的字體、大小、顏色、對(duì)象性質(zhì)等信息。這里我們關(guān)心的是各對(duì)象的位置參數(shù),通過(guò)對(duì)這個(gè)數(shù)據(jù)表的測(cè)試、分析,可以得出objtype關(guān)鍵字段的信息。

  Objtype代表的是報(bào)表中的各控件的類型,下面列出的是報(bào)表設(shè)計(jì)器中各控件在數(shù)據(jù)表文件中的objtype的值:

控件名

objtype值

標(biāo)簽

5

域控件

8

線條

6

矩形

7

圓角矩形

7

圖片/active綁定控件

17

(其中圓角矩形offset值為16,矩形為0)


  數(shù)據(jù)表中的vpos代表控件距報(bào)表左邊的距離,hpos值為距報(bào)表最上邊的距離,height值為控件的高度,width值為控件的寬度。

  當(dāng)objtype為9時(shí),為報(bào)表設(shè)計(jì)器中基本項(xiàng),它們通過(guò)objcode來(lái)區(qū)分。下面是報(bào)表中的基本項(xiàng)的objcode的值:

基本項(xiàng) objtype值
標(biāo)題項(xiàng) 0
頁(yè)標(biāo)頭項(xiàng) 1
細(xì)節(jié)項(xiàng) 4
頁(yè)注腳項(xiàng) 7
總結(jié)項(xiàng) 8


  以上這些項(xiàng)的vpos、hpos值都為0,height值為高度(距上一項(xiàng)目的高度),width值一般都為零,實(shí)際寬度是由打印設(shè)置中的紙張大小決定的。

  當(dāng)我們了解這些字段所代表的內(nèi)容之后,在程序中我們只要增加或減少數(shù)據(jù)表中所有報(bào)表控件的vpos值,就可以增大或減小打印輸出中的左邊距;增加或減少數(shù)據(jù)表中所有報(bào)表控件的hpos值,同時(shí)增加或減少報(bào)表相關(guān)基本項(xiàng)的height值,就可以改變打印輸出中的上邊距。下面我們用一個(gè)簡(jiǎn)單的例子演示程序操作過(guò)程。

  一、利用報(bào)表設(shè)計(jì)器設(shè)計(jì)如圖1的程序報(bào)表,報(bào)表命名為“干部登記表”。


  圖1 干部登記表

  二、新建一個(gè)表單命名為“打印測(cè)試”,表單設(shè)計(jì)如圖2。


  圖2 打印設(shè)置表單

  表單中包括三個(gè)Lable控件,兩個(gè)微調(diào)按鈕,二個(gè)命令組按鈕。

  在“改變位置”按鈕的Click. Event 事件中加入如下代碼,移動(dòng)距離分別為上下移動(dòng)數(shù)、左右移動(dòng)數(shù)乘以392.7。

  SELE 0

   USE 干部登記表.frx

   GO 2

   REPL HEIGHT WITH HEIGHT+THISFORM.SXYD.VALUE*392.7

 ?。Γσ苿?dòng)標(biāo)題項(xiàng)或頁(yè)標(biāo)頭項(xiàng)的位置

   REPL VPOS WITH VPOS+THISFORM.上下移動(dòng)數(shù).VALUE*392.7 FOR (OBJTYPE>4 AND OBJTYPE<9) OR OBJTYPE=17

 ?。Γσ苿?dòng)報(bào)表中各控件的上下位置,移動(dòng)數(shù)為“上下移動(dòng)數(shù)”微調(diào)按鈕中輸入的值,值為正數(shù)向下移動(dòng),負(fù)數(shù)向上移動(dòng)。

   REPL HPOS WITH HPOS+THISFORM.左右移動(dòng)數(shù).VALUE*392.7 FOR (OBJTYPE>4 AND OBJTYPE<9) OR OBJTYPE=17

   USE

 ?。ΓΥ蜷_(kāi)報(bào)表庫(kù)后一定要關(guān)閉,不然在運(yùn)行這個(gè)報(bào)表時(shí)要出錯(cuò)。

   THISFORM.上下移動(dòng)數(shù).VALUE=0

   &&執(zhí)行后上下移動(dòng)數(shù)歸零

   THISFORM.左右移動(dòng)數(shù).VALUE=0

 ?。Γ?zhí)行后左右移動(dòng)數(shù)歸零

  “打印”命令按鈕的Click Event 事件中加入如下代碼:

  REPO FORM 干部登記表 TO PRINT NOCO

  “預(yù)覽”命令按鈕的Click Event 事件中加入如下代碼:

  REPO FORM 干部登記表 PREV NOCO

  “退出”命令按鈕的Click Event 事件中加入如下代碼:

  THISFORM.RELEASE

  在運(yùn)行該程序后,在打印紙放置位置不變的情況下,只需改變上下移動(dòng)數(shù)、左右移動(dòng)數(shù)的值,就可以改變打印紙上輸出內(nèi)容的位置。

  通過(guò)上面的介紹,我們可以在各類表格設(shè)計(jì)過(guò)程中,利用以上的方法,就可以生成靈活方便實(shí)用的各式報(bào)表。 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多