午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

在vfp中實現(xiàn)表單的輸出(一)

 happyngkmw 2012-09-08

在vfp中實現(xiàn)表單的輸出(一)

時間:2007-05-09
-

說在前面

VB、Delphi 都為 Form 對象封裝了 PrintForm 方法,允許用戶方便的將 Form 轉(zhuǎn)換成為 BMP。這是一個不錯的功能,在實際開發(fā)過程中是經(jīng)常有這種需求的,比如把統(tǒng)計圖表作為圖片保存下來……

然而很不幸的是 Visual FoxPro(包括即將登場的 7.0) 并沒有為我們封裝此種功能。這個問題一定困擾著不少狐友吧,包括我。雖然我們知道使用 Win API 就可以解決問題,實際編程卻又談何容易?

很高興得到了 George Tasker 編寫的“OBJ2BMP”工具,并得到了所有原始代碼。George Tasker 為我們提供了一個 Visual FoxPro 版的抓圖工具,但我認(rèn)為這個工具不見得實用——總不能在我們的應(yīng)用程序中老是要調(diào)用一個工具才能完成 PrintFrom 的工作吧,這樣既不專業(yè)也不美觀。于是我利用 George Tasker 提供的源代碼作了簡單的二次開發(fā),重新封裝了部分功能,希望能這個很棒的工具更合適開發(fā)人員使用。

原始代碼版權(quán)屬于 George Tasker,本文及二次開發(fā)的版權(quán)屬于 BOE 數(shù)據(jù)網(wǎng)絡(luò)工作室。該軟件屬于免費軟件,您可以隨意使用,但如果造成什么不良后果,我們不承擔(dān)任何責(zé)任。

 以下所有討論均以“象素”為單位?。?!

使用 OBJ2BMP 工具

先讓我們來看看怎樣使用 George Tasker 為我們提供的 OBJ2BMP 工具吧!

編譯項目成為 obj2bmp.app

使用 obj2bmp.app 工具

新建一個表單,設(shè)定表單的 alwaysOnTop屬性為 .t.或者設(shè)定 alwaysOnBottom 屬性為.t.,運行表單。

在“命令窗口”中鍵入如下命令,并執(zhí)行:

oObjPicker=.null.
DO Obj2Bmp.app WITH oObjPicker

如下圖:

右面的表單就是抓圖工具,請注意它下方的按下拉式列表框中列示了兩個對象:“抓圖”和“Select Object”(目的表單的Caption 屬性)?!白D”是指左面的表單,“Select Object”就是它自己。由于我們在下拉式列表框中選擇了“抓圖”表單,所以列表框中就列示了“抓圖”中的所有可視控件:表單、Olecontrol、Command,您可以選擇要抓拍的控件的名稱,按下“Capture”按鈕,您將得到該控件的當(dāng)前模樣的圖片。

對于畫面的質(zhì)量您也可以控制,24 Bit Color 質(zhì)量最好。

FormPrint 類的使用詳解

從開發(fā)人員的角度看“obj2bmp”工具,好像實用性不大,于是我對源代碼進(jìn)行了簡單的封裝。

必備的支持文件

  1. 類文件:Obj2bmp.vcx、Obj2bmp.vct

  2. 類引用的頭文件:rgb_256.h

  3. API 庫:Foxtools.fll

  4. 其他的 API 庫,我想這對 Windows 32 位系統(tǒng)是不成問題的

關(guān)于 Foxtools.fll 的說明。Foxtools.fll 是 Visual FoxPro 自帶的 API 庫,默認(rèn)存放在 Home() 目錄下。在建立 FormPrint 類實例時(init 事件)檢測是否已對 Foxtools.fll 引用,如果沒有則執(zhí)行如下命令:

set library to (home()+"foxtools.fll") addi

請務(wù)必保證 Home() 目錄下有此文件,如果您想把 Foxtools.fll放在其它地方,請修改以上語句。

引用 Foxtools.fll 的目地在于得到表單的句柄,在 Visual FoxPro 7 中每個表單都有句柄屬性,就不用麻煩 Foxtools.fll 了。

FormPrint 類的用戶接口

  1. cFileName 屬性:圖片輸出目錄及名稱。

  2. makebitmap(pnhWnd, pnBPP, pnTop, pnLeft, pnHeight, pnWidth)方法:實現(xiàn)圖片輸出。

有關(guān) cFileName 屬性的說明。在使用 makebitmap 方法前設(shè)定此屬性,可指定圖片文件的名稱及輸出路徑。如:

obj.cFileName="C:\BMP\abc.bmp" 將圖片文件保存在C:\BMP目錄下,文件名稱是abc.bmp。

如果執(zhí)行makebitmap方法時,目標(biāo)文件已經(jīng)存在,程序?qū)⒃诓煌ㄖ那闆r下覆蓋它;如果執(zhí)行 makebitmap 方法時文件不能建立(可能是目錄不存在、路徑無效、無法覆蓋已存在的文件……),程序?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 屬性自動設(shè)定為 .null. 值。

有關(guān) makebitmap(pnhWnd, pnBPP, pnTop, pnLeft, pnHeight, pnWidth)方法的說明。

所有六個參數(shù)均可省略,但我建議調(diào)用時不要省略前兩個參數(shù)。

——pnhWnd 代表被輸出表單的句柄。如果 PrintForm 實例化以后其父對象是被輸出表單的話,傳遞 0 即代表打印當(dāng)前表單;如果要打印其他表單的話,請使用如下代碼得到它的句柄,并以此句柄作為 pnhwnd 傳遞:

_WhTohWnd(_WFindTitl(cCaption)) && cCaption 代表被輸出表單的 Caption 屬性。

——pnBPP 代表輸出圖片的質(zhì)量。有三種選擇:4,8,24,數(shù)字越大質(zhì)量越好。

輸出整個表單

新建表單(實例一),添加控件。別忘了把 PrintForm 類加入表單,使之成為表單的子對象。如圖:

A.最簡單的應(yīng)用,在“輸出”按鈕的“Click”事件中加入如下代碼:

ThisForm.printform1.makebitmap(0,24)
* 顯示:F:\OBJ2BMP\_0CU0FYF.BMP。表明圖面文件的名稱和位置。

B.指定輸出目的地,在“輸出”按鈕的“Click”事件中加入如下代碼:

Thisform.printform1.cFileName="C:\ABC.BMP"
ThisForm.printform1.makebitmap(0,24)
* 顯示:C:\ABC.BMP。表明圖面文件的名稱和位置。

Thisform.printform1.cFileName="Z:\ABC.BMP"
ThisForm.printform1.makebitmap(0,24)
* 顯示:F:\OBJ2BMP\_0CU0FYT.BMP。因為Z盤不存在,圖片文件無法建立,改用默認(rèn)目錄及文件名稱。

C.輸出其他表單。

建立一新表單(實例二),加入控件,運行。

在“實例一”表單的“輸出”按鈕的“Click”事件中加入如下代碼,運行:

ThisForm.printform1.makebitmap(_WhTohWnd(_WFindTitl("實例二")) ,24)
*"實例二"是后一個建立的表單的caption屬性值。

如圖:

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多