在使用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)表。
|