轉(zhuǎn): 原創(chuàng)]采用MSGraph控件作統(tǒng)計圖表一例 在論壇有一些狐友對VFP中用MSgraph作圖的存在困惑,為了共同提高這一目的,我特寫這一示例,希望對狐友有幫助。 我的示例運行的環(huán)境:WIN98,VFP6,必需裝有MSGRAPH9或OFFICE2000。 我的示例中加有XP按扭控件,解壓后須對其注冊,否則會出錯?。?! 示例主要描述一些簡單的圖表格式控制方法,主要有: 1.怎樣控制圖表的數(shù)據(jù)源的使用方法。 2.怎樣控制圖表的標題、(X)軸即分類軸、(Y)軸即數(shù)值軸、(X)軸即系列軸及例尺的格式的使用方法。 3.怎樣控制圖表上翻、下翻、左翻、右翻及透視的使用方法。 4.怎樣控制圖表有無數(shù)據(jù)表等。 但由于時間關(guān)系沒有對原碼作詳細注釋和說明,請見諒。 例子封面: VFPMSGRAPH示例 在VFP中實現(xiàn)圖形統(tǒng)計報表 本文介紹采用OLE技術(shù),實現(xiàn)圖形統(tǒng)計報表功能。 VFP提供了一種稱為“通用類型(General)”的字段,可以用于存儲OLE對象的引用。而OLE綁定型控件則可以在表單(Form)或報表(Report)中,顯示數(shù)據(jù)庫表General字段對應(yīng)的OLE對象的內(nèi)容。在VFP的表單設(shè)計器和報表設(shè)計器中都可以使用OLE綁定型控件。 圖形統(tǒng)計報表的實現(xiàn) 要實現(xiàn)圖形統(tǒng)計報表,需要一個支持OLE的圖形軟件繪制圖形。由于Microsoft Graph(以下簡稱MsGraph)支持OLE技術(shù),并且支持的圖表類型眾多,因此,我們選用MsGraph進行圖形的顯示輸出。 MsGraph支持的圖表類型主要有柱形圖、條形圖、折線圖、餅圖、XY(散點)圖等等。MsGraph對各種圖表類型都給出了相應(yīng)的常量定義,如三維簇狀柱形圖(xl3DclumnClustered)、三維簇狀條形圖(xl3DbarClustered)、折線圖(xlLine)、折線散點圖(xlXYScatterLines)等等,在程序中需要確定圖表類型時可方便地加以引用。 MsGraph采用面向?qū)ο蠹夹g(shù),對MsGraph對象提供了清晰的對象層次,用于程序中對圖表的各個部分(如分類軸、數(shù)據(jù)軸、標題、圖例等等)進行控制。利用MsGraph所提供的各個對象,可以通過程序?qū)sGraph圖表對象的各個部分進行精細的控制,下面的例子列舉了如何對MsGraph圖表對象施加控制。 為敘述方便,這里假設(shè)有一個需要統(tǒng)計的數(shù)據(jù)庫表,名為Details,其中的兩個字段定義如下:Date(日期型)和Value(數(shù)值型,假設(shè)為某一設(shè)備的電氣參數(shù),如絕緣電阻)?,F(xiàn)在需要統(tǒng)計出該設(shè)備電氣參數(shù)從某一年以來(nFirstYear)的歷年變化趨勢。另外定義了一個統(tǒng)計數(shù)據(jù)庫表(名為Statistics),其中的一個字段定義為GraphRec,字段類型為General。 將統(tǒng)計數(shù)據(jù)送入臨時表中: Close Tables All Select Date,Value From Details Where Year(Date)>=nFirstYear; Order by Date Into Cursor MyTemp 生成數(shù)據(jù)串: MsGraph可以根據(jù)字符串數(shù)據(jù)生成圖形,但要求字符串數(shù)據(jù)具有表格型式(實際上字符串數(shù)據(jù)就是按這種格式填入MsGraph數(shù)據(jù)表中的),在本例中,字符串數(shù)據(jù)格式如下表所示: 1990 1991 … 1999 絕緣電阻(mΩ) 123456.234 654321.432 … 654321.432 實現(xiàn)代碼為: Local lcData,lcYear Select MyTemp lcYear=′′ lcData=′絕緣電阻(MΩ)′ Scan lcYear=lcYear+TAB+AllTrim(Str(Year(Date))) lcData=lcData+TAB+AllTrim(Str(Value,16,3)) EndScan lcData=lcYear+CRLF+lcData Use 數(shù)據(jù)串傳遞給MsGraph: Use Statistics Append Blank Append General GraphRec Data lcData Class ″MsGraph.Chart″ Use 修改圖形類型 上面生成的圖形類型是MsGraph的默認類型,并不總是能滿足要求,因此需要軟件對它加以修改。本文的例子是將MsGraph的圖表類型設(shè)置為折線散點圖(xlXYScatterLines),并分別設(shè)置它的分類軸(xlCategory)與數(shù)值軸(xlValue)的標題與字體大小。方法如下: (1) 新建表單Form1,在上面放置OLE綁定型控件,名為Ole1,設(shè)置Ole1的ControlSource屬性為Statistics.GraphRec。 (2) 在Form1.Init方法程序中添加如下代碼: ?。efine xlXYScatterLines 74 #define xlCategory 1 ?。efine xlValue 2 #define xlTickLabelOrientationUpward -4171 ?。efine xlUpward -4171 ?。efine xlTickLabelOrientationHorizontal -4128 If Not Used('Statistics') Use Statistics EndIf Select Statistics Scan ThisForm.Refresh With This.Ole1 .hasTitle=.F. &&沒有標題 .hasLegend=.F. &&沒有圖例 .chartType=xlXYScatterLines With .Axes(xlValue) &&設(shè)置數(shù)值軸 .hasTitle=.T. .AxisTitle.Caption=′絕緣電阻(MΩ)′ .AxisTitle.Font.size=9 .AxisTitle.Orientation=xlUpward .TickLabels.Font.size=9 EndWith With .Axes(xlCategory) &&設(shè)置分類軸 .hasTitle=.T. .AxisTitle.Caption=′年份′ .AxisTitle.Font.size=9 .TickLabels.Font.size=9 .TickLabels.Orientation=; xlTickLabelOrientationHorizontal EndWith EndScan (3) 以上步驟已經(jīng)完成了圖形的生成與圖形類型的設(shè)定,并保存在Statistics表中的GraphRec字段中。要輸出圖形統(tǒng)計報表,只需在報表(數(shù)據(jù)環(huán)境設(shè)為Statistics.Dbf)相應(yīng)位置放置一個圖片/OLE綁定型控件,設(shè)置它的字段屬性為Statistics.GraphRec即可。 本文來源: InfoWeb ____ 本文作者: 劉俊強、李冬梅 |
|
來自: 鄭學(xué)甫360 > 《VFP》