欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

使用Visual FoxPro 8.0的成員類和Excel實現自定

系統 2562 0
作者:張洪舉 ( http://www.vfptop.com
日期:2003年12月
應用于:
Microsoft? Visual FoxPro? 8.0
摘要:使用Visual FoxPro 8.0的新增Header類來選擇表格列,實現自定義字段打印。
概述
許多Visual FoxPro程序員希望將顯示在表格控件中的數據能夠直接輸出到打印機上,并且也希望能夠自定義輸出列來選擇要打印的字段,這在Visual FoxPro 8.0以前還是比較煩瑣的事情。從Visual FoxPro 8.0開始,你可以為成員類定義和建立子類,使對于各種控件的控制更加靈活方便。Visual FoxPro沒有提供可編程的報表工具,但是程序化輸出報表是所有程序員都夢寐以求的事情,由于Visual FoxPro支持OLE操作,因此,如果你的計算機中安裝了Excel,你完全可以將Visual FoxPro數據輸出到一個電子表格中,并立即執行打印。
Visual FoxPro的成員類
現在可以為以下的幾個成員類定義和建立子類:
?Page和PageFrame
?CommandButton和CommandGroup
?OptionButton和OptionGroup
?Column和Grid
?Header和Column
使用成員類可以為一個指定類的所有成員定義一致的行為,例如,可以在一個Page類的Activate事件中定義一個特定行為,用于特定的PageFrame類或對象,則所有該頁框的成員頁繼承相同的代碼和行為。
PageFrame、CommandGroup、OptionGroup和Grid類有兩個新增屬性: MemberClassLibrary和MemberClass,用于為成員對象設置缺省的自定義類。當設置這兩個屬性后,新增成員對象將從指定的成員類進行繼承。Column對象有兩個新增屬性:HeaderClassLibrary和HeaderClass,用于設置指定一個自定義Header類。但是,你不能在類設計器中設計Column和Header類,這兩個類只能使用代碼建立。
例如,下面使用代碼建立的NewHeader類保存在一個名為MyHeader.prg的程序文件中,NewHeader類的基類為Header類,該類用于當用戶單擊表格的Header時切換控件的顯示圖片。能夠為Header指定Picture屬性也是Visual FoxPro 8.0的新增功能。
    DEFINE CLASS NewHeader AS Header
    Name="NewHeader"
    PROCEDURE Click
        cPictureName=JUSTSTEM(This.Picture)
        IF cPictureName="selected"  
            This.Picture="unselected.bmp"
        ELSE 
            This.Picture="selected.bmp"
        ENDIF 
    ENDPROC 
ENDDEFINE
該類能夠實現的效果,如圖1所示。
    
    圖1 selected.bmp和unselected.bmp圖片的顯示效果
    
將建立的Header成員類添加到表格中
在運行時修改Column的HeaderClassLibrary和HeaderClass屬性不會影響Header,所以只能使用Column的NewObject方法來根據在MyHeader.prg中建立的NewHeader類來添加新對象,在添加之前應當將Column中默認添加的Header1對象移除。圖1中“打開表”按鈕用于打開一個任意表,然后以表的字段名稱作為Header的標題在表格中顯示,其Click事件代碼如下:
      cFile=GETFILE("dbf")
cDemoAlias=JUSTSTEM(cFile)
IF NOT EMPTY(cFile)
    Thisform.Text1.Value=cFile
    CLOSE TABLES ALL 
    USE (cFile) ALIAS cDemoAlias IN 0
    nCount=AFIELDS(aArray)
    *!* 設置表格屬性
    WITH Thisform.Grid1
        .ColumnCount=nCount
        .DeleteMark= .F. 
        .GridLineColor=RGB(192,192,192)
        .HeaderHeight=25
        .HighlightStyle= 2 
        .RecordSourceType=1
        .RecordSource="cDemoAlias"
    ENDWITH 
    *!* 設置表格各列屬性
    FOR i=1 TO nCount
        Thisform.Grid1.Columns(i).ControlSource=aArray(i,1)
        Thisform.Grid1.Columns(i).RemoveObject("Header1")      &&移除當前默認Header對象
        Thisform.Grid1.Columns(i).NewObject("Header1","NewHeader","MyHeader.prg")  &&添加自定義Header對象
        Thisform.Grid1.Columns(i).Header1.Picture="selected.bmp"
        Thisform.Grid1.Columns(i).Header1.Caption=aArray(i,1)
    ENDFOR  
    Thisform.Grid1.AutoFit()
    Thisform.Refresh 
ENDIF
建立“頁面設置”表單
      
在Excel的頁面設置窗口中可以設置上邊距、下邊距、紙張方向和紙張類型等,為此,我們也相應建立了一個簡單的“頁面設置“表單,如圖2所示。
圖2 “頁面設置”表單
為保存頁面設置中的各項數據,建立了一個tblPrtSet表,該表的結構如表1所示。
表1 tblPrtSet表結構
字段名稱說明
TOPMARG上邊距
BOTTMARG下邊距
LEFTMARG左邊距
RIGHTMARG右邊距
PAPERSIZE紙張大小
ORIENTATE紙張方向
HEADERMARG頁眉
FOOTERMARG頁腳
ZOOM縮放比例
輸出選定列到Excel中
如果表格中列的Picture屬性為Selected.bmp(表示為選定狀態),則該列將輸出到打印機中,下面是“輸出到Excel”按紐的Click事件代碼。
          *!* 生成臨時表
cAlias=Thisform.Grid1.RecordSource
SELECT (cAlias)
cTmp=""
FOR i=1 TO Thisform.Grid1.ColumnCount
    IF JUSTSTEM(Thisform.Grid1.Columns(i).Header1.Picture)="selected"
        cTmp=cTmp+Thisform.Grid1.Columns(i).ControlSource+","
    ENDIF 
ENDFOR 
cTmp=SUBSTR(cTmp,1,LEN(cTmp)-1)         &&刪除尾部的逗號
cSQL="SELECT "+cTmp+" FROM "+cAlias+" INTO CURSOR curPrint"  &&生成SQL語句
&cSQL
SELECT curPrint
nCount=AFIELDS(aPrtArray)
IF NOT USED("tblPrtSet")
    USE tblPrtSet ALIAS tblPrtSet IN 0
ENDIF 
GO TOP 
**設置EXCEL表格頭
oExl=CREATEOBJECT("Excel.Application")
oExl.Workbooks.Add
oExl.Worksheets("sheet1").Activate
oExl.ActiveSheet.PageSetup.TopMargin=tblPrtSet.TopMarg/0.035      &&設置上邊距
oExl.ActiveSheet.PageSetup.BottomMargin=tblPrtSet.BottMarg/0.035  &&下邊距
oExl.ActiveSheet.PageSetup.LeftMargin=tblPrtSet.LeftMarg/0.035    &&左邊距
oExl.ActiveSheet.PageSetup.RightMargin=tblPrtSet.RightMarg/0.035  &&右邊距
oExl.ActiveSheet.PageSetup.PrintTitleRows ="$1:$2"                &&設置頂端標題行
oExl.ActiveSheet.PageSetup.PaperSize=tblPrtSet.PaperSize          &&紙張大小
oExl.ActiveSheet.PageSetup.Orientation=tblPrtSet.Orientate        &&紙張方向
oExl.ActiveSheet.PageSetup.RightHeader="第 & P頁  共&N頁"
oExl.ActiveSheet.PageSetup.HeaderMargin=tblPrtSet.HeaderMarg/0.035  &&頁眉
oExl.ActiveSheet.PageSetup.FooterMargin=tblPrtSet.FooterMarg/0.035  &&頁腳
oExl.ActiveSheet.PageSetup.Zoom=tblPrtSet.Zoom                      &&縮放比例
oExl.Cells(1,1).Value=Thisform.Text1.Value
oExl.Cells(1,1).Font.Name="黑體"
oExl.Cells(1,1).Font.Size=14
oExl.Cells(1,1).HorizontalAlignment=3                               &&水平居中
oExl.Range(To26(1)+"1:"+To26(nCount)+"1").Merge                     &&合并列

*循環生成表格頭
FOR i=1 TO nCount
    oExl.ActiveSheet.Columns(i).Font.Size=9
    oExl.ActiveSheet.Columns(i).ColumnWidth=10
    oExl.Cells(2,i).Value=aPrtArray(i,1)
    oExl.Cells(2,i).HorizontalAlignment=3  &&水平居中
ENDFOR 	

*生成表內容
SELECT curPrint
nRow=3
SCAN 
    FOR nColumn=1 TO nCount
    	cField=aPrtArray(nColumn,1)
   	    oExl.Cells(nRow,nColumn).Value=&cField
    ENDFOR 
    nRow=nRow+1
ENDSCAN 
oExl.Range("A2:"+To26(nCount)+ALLTRIM(STR(nRow-1))).Borders.LineStyle=1  &&細線
oExl.Range("a2:"+To26(nCount)+ALLTRIM(STR(nRow-1))).Borders.Weight=2     &&線粗細
*!* oExl.Visible=.T.       &&顯示Excel
oExl.ActiveSheet.PrintOut  &&直接打印輸出
結論
          
Visual FoxPro 8.0的許多新增功能為你快速開發應用程序提供了可能,Visual FoxPro的新增功能請見幫助中的What’s New in Visual FoxPro 8.0。

使用Visual FoxPro 8.0的成員類和Excel實現自定義報表輸出


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 色午夜日本| 国产精品美女久久久久aⅴ国产馆 | 久久久久草 | 国产成人无码AA片免费看 | 色噜噜狠狠色综合欧洲selulu | 亚洲精品三级 | 国产性色视频在线高清 | 国产a视频 | 毛片成人永久免费视频 | 在线播放国产一区二区三区 | 五月天婷婷网站 | 天堂中文资源在线观看 | 中文字幕日韩欧美一区二区三区 | 国产精品视频播放 | 五月激情六月婷婷 | 欧美第四页 | 日本熟妇无码波多野1223 | 日本一区二区视频在线 | 4hc44四虎www在线影院男同 | 免费看污成人午夜网站 | 日本福利一区二区 | a在线观看网站 | 日本黄大片视频在线播放 | 亚洲 无码 自拍 欧美 小说 | 中文字幕在线一区二区三区 | 日韩精品一区二区三区四区视频 | 国产精品69人妻无码久久久 | 成人在线视频精品 | 中文字幕一区二区三区四区 | 成人久久久 | 色呦呦在线免费观看 | 日韩av一区二区三区在线 | 日韩在线一区二区三区 | 国产成人精品视频免费 | 国产精品久久久精品 | 久久精品免费国产 | 性夜影院爽黄e爽痛轻点www | 在线手机电影 | 欧美精品一区二区免费 | 搜一级毛片 | 欧美亚洲在线视频 |