在vfp中實(shí)現(xiàn)表單的輸出(一)時(shí)間:2007-05-09
- 說在前面 VB、Delphi 都為 Form 對(duì)象封裝了 PrintForm 方法,允許用戶方便的將 Form 轉(zhuǎn)換成為 BMP。這是一個(gè)不錯(cuò)的功能,在實(shí)際開發(fā)過程中是經(jīng)常有這種需求的,比如把統(tǒng)計(jì)圖表作為圖片保存下來…… 然而很不幸的是 Visual FoxPro(包括即將登場(chǎng)的 7.0) 并沒有為我們封裝此種功能。這個(gè)問題一定困擾著不少狐友吧,包括我。雖然我們知道使用 Win API 就可以解決問題,實(shí)際編程卻又談何容易? 很高興得到了 George Tasker 編寫的“OBJ2BMP”工具,并得到了所有原始代碼。George Tasker 為我們提供了一個(gè) Visual FoxPro 版的抓圖工具,但我認(rèn)為這個(gè)工具不見得實(shí)用——總不能在我們的應(yīng)用程序中老是要調(diào)用一個(gè)工具才能完成 PrintFrom 的工作吧,這樣既不專業(yè)也不美觀。于是我利用 George Tasker 提供的源代碼作了簡(jiǎn)單的二次開發(fā),重新封裝了部分功能,希望能這個(gè)很棒的工具更合適開發(fā)人員使用。 原始代碼版權(quán)屬于 George Tasker,本文及二次開發(fā)的版權(quán)屬于 BOE 數(shù)據(jù)網(wǎng)絡(luò)工作室。該軟件屬于免費(fèi)軟件,您可以隨意使用,但如果造成什么不良后果,我們不承擔(dān)任何責(zé)任。 以下所有討論均以“象素”為單位?。。?/p> 使用 OBJ2BMP 工具 先讓我們來看看怎樣使用 George Tasker 為我們提供的 OBJ2BMP 工具吧! 編譯項(xiàng)目成為 obj2bmp.app 使用 obj2bmp.app 工具 新建一個(gè)表單,設(shè)定表單的 alwaysOnTop屬性為 .t.或者設(shè)定 alwaysOnBottom 屬性為.t.,運(yùn)行表單。 在“命令窗口”中鍵入如下命令,并執(zhí)行: oObjPicker=.null. 如下圖:
右面的表單就是抓圖工具,請(qǐng)注意它下方的按下拉式列表框中列示了兩個(gè)對(duì)象:“抓圖”和“Select Object”(目的表單的Caption 屬性)。“抓圖”是指左面的表單,“Select Object”就是它自己。由于我們?cè)谙吕搅斜砜蛑羞x擇了“抓圖”表單,所以列表框中就列示了“抓圖”中的所有可視控件:表單、Olecontrol、Command,您可以選擇要抓拍的控件的名稱,按下“Capture”按鈕,您將得到該控件的當(dāng)前模樣的圖片。 對(duì)于畫面的質(zhì)量您也可以控制,24 Bit Color 質(zhì)量最好。 FormPrint 類的使用詳解 從開發(fā)人員的角度看“obj2bmp”工具,好像實(shí)用性不大,于是我對(duì)源代碼進(jìn)行了簡(jiǎn)單的封裝。 必備的支持文件
關(guān)于 Foxtools.fll 的說明。Foxtools.fll 是 Visual FoxPro 自帶的 API 庫(kù),默認(rèn)存放在 Home() 目錄下。在建立 FormPrint 類實(shí)例時(shí)(init 事件)檢測(cè)是否已對(duì) Foxtools.fll 引用,如果沒有則執(zhí)行如下命令: set library to (home()+"foxtools.fll") addi 請(qǐng)務(wù)必保證 Home() 目錄下有此文件,如果您想把 Foxtools.fll放在其它地方,請(qǐng)修改以上語句。 引用 Foxtools.fll 的目地在于得到表單的句柄,在 Visual FoxPro 7 中每個(gè)表單都有句柄屬性,就不用麻煩 Foxtools.fll 了。 FormPrint 類的用戶接口
有關(guān) cFileName 屬性的說明。在使用 makebitmap 方法前設(shè)定此屬性,可指定圖片文件的名稱及輸出路徑。如: obj.cFileName="C:\BMP\abc.bmp" 將圖片文件保存在C:\BMP目錄下,文件名稱是abc.bmp。 如果執(zhí)行makebitmap方法時(shí),目標(biāo)文件已經(jīng)存在,程序?qū)⒃诓煌ㄖ那闆r下覆蓋它;如果執(zhí)行 makebitmap 方法時(shí)文件不能建立(可能是目錄不存在、路徑無效、無法覆蓋已存在的文件……),程序?qū)⒅匦略O(shè)定圖片文件的名稱及保存目錄,新文件名及目錄是這樣確定: sys(5)+sys(2003)+"\"+left(sys(2015),8)+".bmp" 如果事先不設(shè)定 cFileName 屬性,使其保持默認(rèn)值 .null. 或設(shè)定 cFileName 為 .null. 值,程序也將使用“sys(5)+sys(2003)+"\"+left(sys(2015),8)+".bmp"”確定圖片的名稱及保存目錄。 每次圖片生成完畢,cFileName 屬性自動(dòng)設(shè)定為 .null. 值。 有關(guān) makebitmap(pnhWnd, pnBPP, pnTop, pnLeft, pnHeight, pnWidth)方法的說明。 所有六個(gè)參數(shù)均可省略,但我建議調(diào)用時(shí)不要省略前兩個(gè)參數(shù)。 ——pnhWnd 代表被輸出表單的句柄。如果 PrintForm 實(shí)例化以后其父對(duì)象是被輸出表單的話,傳遞 0 即代表打印當(dāng)前表單;如果要打印其他表單的話,請(qǐng)使用如下代碼得到它的句柄,并以此句柄作為 pnhwnd 傳遞: _WhTohWnd(_WFindTitl(cCaption)) && cCaption 代表被輸出表單的 Caption 屬性。 ——pnBPP 代表輸出圖片的質(zhì)量。有三種選擇:4,8,24,數(shù)字越大質(zhì)量越好。 輸出整個(gè)表單 新建表單(實(shí)例一),添加控件。別忘了把 PrintForm 類加入表單,使之成為表單的子對(duì)象。如圖:
A.最簡(jiǎn)單的應(yīng)用,在“輸出”按鈕的“Click”事件中加入如下代碼: ThisForm.printform1.makebitmap(0,24) B.指定輸出目的地,在“輸出”按鈕的“Click”事件中加入如下代碼: Thisform.printform1.cFileName="C:\ABC.BMP" C.輸出其他表單。 建立一新表單(實(shí)例二),加入控件,運(yùn)行。 在“實(shí)例一”表單的“輸出”按鈕的“Click”事件中加入如下代碼,運(yùn)行: ThisForm.printform1.makebitmap(_WhTohWnd(_WFindTitl("實(shí)例二"))
,24) 如圖:
|
|
|