在使用VFP設(shè)計應(yīng)用系統(tǒng)的過程中,應(yīng)用系統(tǒng)的表格輸出部分一般都是在報表設(shè)計器下設(shè)計完成的,設(shè)計出來的表格,格式固定,位置固定。但在實踐中我們發(fā)現(xiàn):在一種打印機下調(diào)試設(shè)計出來的表格,換到另一種打印機時,表格的位置發(fā)生了變化,常常要靠移動紙張來解決。筆者經(jīng)過多次測試后,利用編程解決了這個問題。
筆者通過對VFP的報表文件進(jìn)行分析,發(fā)現(xiàn)報表文件其實同數(shù)據(jù)表的結(jié)構(gòu)是相同的。其中后綴為.frx的文件存放報表控件一些主要信息,而后綴為.frt的文件存放的是備注部份內(nèi)容。這些文件都可以使用數(shù)據(jù)表的操作命令,可以使用VFP的命令和函數(shù)來改變報表控件中一些值的大小,如在VFP命令窗口中對一個盤中已存在的名為“干部登記表"的報表文件進(jìn)行操作:
USE 干部登記表.frx
BROW
這時我們看到的是一個數(shù)據(jù)表的內(nèi)容列表方式,表中包含報表的字體、大小、顏色、對象性質(zhì)等信息。這里我們關(guān)心的是各對象的位置參數(shù),通過對這個數(shù)據(jù)表的測試、分析,可以得出objtype關(guān)鍵字段的信息。
Objtype代表的是報表中的各控件的類型,下面列出的是報表設(shè)計器中各控件在數(shù)據(jù)表文件中的objtype的值:
控件名 | objtype值 |
標(biāo)簽 | 5 |
域控件 | 8 |
線條 | 6 |
矩形 | 7 |
圓角矩形 | 7 |
圖片/active綁定控件 | 17 |
(其中圓角矩形offset值為16,矩形為0)
數(shù)據(jù)表中的vpos代表控件距報表左邊的距離,hpos值為距報表最上邊的距離,height值為控件的高度,width值為控件的寬度。
當(dāng)objtype為9時,為報表設(shè)計器中基本項,它們通過objcode來區(qū)分。下面是報表中的基本項的objcode的值:
基本項 | objtype值 |
標(biāo)題項 | 0 |
頁標(biāo)頭項 | 1 |
細(xì)節(jié)項 | 4 |
頁注腳項 | 7 |
總結(jié)項 | 8 |
以上這些項的vpos、hpos值都為0,height值為高度(距上一項目的高度),width值一般都為零,實際寬度是由打印設(shè)置中的紙張大小決定的。
當(dāng)我們了解這些字段所代表的內(nèi)容之后,在程序中我們只要增加或減少數(shù)據(jù)表中所有報表控件的vpos值,就可以增大或減小打印輸出中的左邊距;增加或減少數(shù)據(jù)表中所有報表控件的hpos值,同時增加或減少報表相關(guān)基本項的height值,就可以改變打印輸出中的上邊距。下面我們用一個簡單的例子演示程序操作過程。
一、利用報表設(shè)計器設(shè)計如圖1的程序報表,報表命名為“干部登記表”。
圖1 干部登記表
二、新建一個表單命名為“打印測試”,表單設(shè)計如圖2。
圖2 打印設(shè)置表單
表單中包括三個Lable控件,兩個微調(diào)按鈕,二個命令組按鈕。
在“改變位置”按鈕的Click. Event 事件中加入如下代碼,移動距離分別為上下移動數(shù)、左右移動數(shù)乘以392.7。
SELE 0
USE 干部登記表.frx
GO 2
REPL HEIGHT WITH HEIGHT+THISFORM.SXYD.VALUE*392.7
?。Γσ苿訕?biāo)題項或頁標(biāo)頭項的位置
REPL VPOS WITH VPOS+THISFORM.上下移動數(shù).VALUE*392.7 FOR (OBJTYPE>4 AND OBJTYPE<9) OR OBJTYPE=17
&&移動報表中各控件的上下位置,移動數(shù)為“上下移動數(shù)”微調(diào)按鈕中輸入的值,值為正數(shù)向下移動,負(fù)數(shù)向上移動。
REPL HPOS WITH HPOS+THISFORM.左右移動數(shù).VALUE*392.7 FOR (OBJTYPE>4 AND OBJTYPE<9) OR OBJTYPE=17
USE
?。ΓΥ蜷_報表庫后一定要關(guān)閉,不然在運行這個報表時要出錯。
THISFORM.上下移動數(shù).VALUE=0
&&執(zhí)行后上下移動數(shù)歸零
THISFORM.左右移動數(shù).VALUE=0
?。Γ?zhí)行后左右移動數(shù)歸零
“打印”命令按鈕的Click Event 事件中加入如下代碼:
REPO FORM 干部登記表 TO PRINT NOCO
“預(yù)覽”命令按鈕的Click Event 事件中加入如下代碼:
REPO FORM 干部登記表 PREV NOCO
“退出”命令按鈕的Click Event 事件中加入如下代碼:
THISFORM.RELEASE
在運行該程序后,在打印紙放置位置不變的情況下,只需改變上下移動數(shù)、左右移動數(shù)的值,就可以改變打印紙上輸出內(nèi)容的位置。
通過上面的介紹,我們可以在各類表格設(shè)計過程中,利用以上的方法,就可以生成靈活方便實用的各式報表。