黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

使用Visual FoxPro 8.0的成員類和Excel實(shí)現(xiàn)自定

系統(tǒng) 3014 0
作者:張洪舉 ( http://www.vfptop.com
日期:2003年12月
應(yīng)用于:
Microsoft? Visual FoxPro? 8.0
摘要:使用Visual FoxPro 8.0的新增Header類來(lái)選擇表格列,實(shí)現(xiàn)自定義字段打印。
概述
許多Visual FoxPro程序員希望將顯示在表格控件中的數(shù)據(jù)能夠直接輸出到打印機(jī)上,并且也希望能夠自定義輸出列來(lái)選擇要打印的字段,這在Visual FoxPro 8.0以前還是比較煩瑣的事情。從Visual FoxPro 8.0開(kāi)始,你可以為成員類定義和建立子類,使對(duì)于各種控件的控制更加靈活方便。Visual FoxPro沒(méi)有提供可編程的報(bào)表工具,但是程序化輸出報(bào)表是所有程序員都?jí)裘乱郧蟮氖虑椋捎赩isual FoxPro支持OLE操作,因此,如果你的計(jì)算機(jī)中安裝了Excel,你完全可以將Visual FoxPro數(shù)據(jù)輸出到一個(gè)電子表格中,并立即執(zhí)行打印。
Visual FoxPro的成員類
現(xiàn)在可以為以下的幾個(gè)成員類定義和建立子類:
?Page和PageFrame
?CommandButton和CommandGroup
?OptionButton和OptionGroup
?Column和Grid
?Header和Column
使用成員類可以為一個(gè)指定類的所有成員定義一致的行為,例如,可以在一個(gè)Page類的Activate事件中定義一個(gè)特定行為,用于特定的PageFrame類或?qū)ο螅瑒t所有該頁(yè)框的成員頁(yè)繼承相同的代碼和行為。
PageFrame、CommandGroup、OptionGroup和Grid類有兩個(gè)新增屬性: MemberClassLibrary和MemberClass,用于為成員對(duì)象設(shè)置缺省的自定義類。當(dāng)設(shè)置這兩個(gè)屬性后,新增成員對(duì)象將從指定的成員類進(jìn)行繼承。Column對(duì)象有兩個(gè)新增屬性:HeaderClassLibrary和HeaderClass,用于設(shè)置指定一個(gè)自定義Header類。但是,你不能在類設(shè)計(jì)器中設(shè)計(jì)Column和Header類,這兩個(gè)類只能使用代碼建立。
例如,下面使用代碼建立的NewHeader類保存在一個(gè)名為MyHeader.prg的程序文件中,NewHeader類的基類為Header類,該類用于當(dāng)用戶單擊表格的Header時(shí)切換控件的顯示圖片。能夠?yàn)镠eader指定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
該類能夠?qū)崿F(xiàn)的效果,如圖1所示。
    
    圖1 selected.bmp和unselected.bmp圖片的顯示效果
    
將建立的Header成員類添加到表格中
在運(yùn)行時(shí)修改Column的HeaderClassLibrary和HeaderClass屬性不會(huì)影響Header,所以只能使用Column的NewObject方法來(lái)根據(jù)在MyHeader.prg中建立的NewHeader類來(lái)添加新對(duì)象,在添加之前應(yīng)當(dāng)將Column中默認(rèn)添加的Header1對(duì)象移除。圖1中“打開(kāi)表”按鈕用于打開(kāi)一個(gè)任意表,然后以表的字段名稱作為Header的標(biāo)題在表格中顯示,其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)
    *!* 設(shè)置表格屬性
    WITH Thisform.Grid1
        .ColumnCount=nCount
        .DeleteMark= .F. 
        .GridLineColor=RGB(192,192,192)
        .HeaderHeight=25
        .HighlightStyle= 2 
        .RecordSourceType=1
        .RecordSource="cDemoAlias"
    ENDWITH 
    *!* 設(shè)置表格各列屬性
    FOR i=1 TO nCount
        Thisform.Grid1.Columns(i).ControlSource=aArray(i,1)
        Thisform.Grid1.Columns(i).RemoveObject("Header1")      &&移除當(dāng)前默認(rèn)Header對(duì)象
        Thisform.Grid1.Columns(i).NewObject("Header1","NewHeader","MyHeader.prg")  &&添加自定義Header對(duì)象
        Thisform.Grid1.Columns(i).Header1.Picture="selected.bmp"
        Thisform.Grid1.Columns(i).Header1.Caption=aArray(i,1)
    ENDFOR  
    Thisform.Grid1.AutoFit()
    Thisform.Refresh 
ENDIF
建立“頁(yè)面設(shè)置”表單
      
在Excel的頁(yè)面設(shè)置窗口中可以設(shè)置上邊距、下邊距、紙張方向和紙張類型等,為此,我們也相應(yīng)建立了一個(gè)簡(jiǎn)單的“頁(yè)面設(shè)置“表單,如圖2所示。
圖2 “頁(yè)面設(shè)置”表單
為保存頁(yè)面設(shè)置中的各項(xiàng)數(shù)據(jù),建立了一個(gè)tblPrtSet表,該表的結(jié)構(gòu)如表1所示。
表1 tblPrtSet表結(jié)構(gòu)
字段名稱說(shuō)明
TOPMARG上邊距
BOTTMARG下邊距
LEFTMARG左邊距
RIGHTMARG右邊距
PAPERSIZE紙張大小
ORIENTATE紙張方向
HEADERMARG頁(yè)眉
FOOTERMARG頁(yè)腳
ZOOM縮放比例
輸出選定列到Excel中
如果表格中列的Picture屬性為Selected.bmp(表示為選定狀態(tài)),則該列將輸出到打印機(jī)中,下面是“輸出到Excel”按紐的Click事件代碼。
          *!* 生成臨時(shí)表
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)         &&刪除尾部的逗號(hào)
cSQL="SELECT "+cTmp+" FROM "+cAlias+" INTO CURSOR curPrint"  &&生成SQL語(yǔ)句
&cSQL
SELECT curPrint
nCount=AFIELDS(aPrtArray)
IF NOT USED("tblPrtSet")
    USE tblPrtSet ALIAS tblPrtSet IN 0
ENDIF 
GO TOP 
**設(shè)置EXCEL表格頭
oExl=CREATEOBJECT("Excel.Application")
oExl.Workbooks.Add
oExl.Worksheets("sheet1").Activate
oExl.ActiveSheet.PageSetup.TopMargin=tblPrtSet.TopMarg/0.035      &&設(shè)置上邊距
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"                &&設(shè)置頂端標(biāo)題行
oExl.ActiveSheet.PageSetup.PaperSize=tblPrtSet.PaperSize          &&紙張大小
oExl.ActiveSheet.PageSetup.Orientation=tblPrtSet.Orientate        &&紙張方向
oExl.ActiveSheet.PageSetup.RightHeader="第 & P頁(yè)  共&N頁(yè)"
oExl.ActiveSheet.PageSetup.HeaderMargin=tblPrtSet.HeaderMarg/0.035  &&頁(yè)眉
oExl.ActiveSheet.PageSetup.FooterMargin=tblPrtSet.FooterMarg/0.035  &&頁(yè)腳
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                     &&合并列

*循環(huán)生成表格頭
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 	

*生成表內(nèi)容
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  &&細(xì)線
oExl.Range("a2:"+To26(nCount)+ALLTRIM(STR(nRow-1))).Borders.Weight=2     &&線粗細(xì)
*!* oExl.Visible=.T.       &&顯示Excel
oExl.ActiveSheet.PrintOut  &&直接打印輸出
結(jié)論
          
Visual FoxPro 8.0的許多新增功能為你快速開(kāi)發(fā)應(yīng)用程序提供了可能,Visual FoxPro的新增功能請(qǐng)見(jiàn)幫助中的What’s New in Visual FoxPro 8.0。

使用Visual FoxPro 8.0的成員類和Excel實(shí)現(xiàn)自定義報(bào)表輸出


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

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

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論