張利利,李 婭,胡文東
Visual Basic(VB)作為快速開發(fā) Windows下的編程工具,由于其功能強(qiáng)大、簡單易用而受到越來越多的開發(fā)者的青睞。VB具有很強(qiáng)的數(shù)據(jù)訪問能力,和數(shù)據(jù)庫的連接也十分便利[1],而衡量能力水平高低的最主要的依據(jù)就是測試者回答題目的正確個(gè)數(shù)及反應(yīng)時(shí)間。如果回答題目的反應(yīng)時(shí)間很短但錯(cuò)誤很多,或者正確個(gè)數(shù)很多但反應(yīng)時(shí)間很長,都表示該測試者的能力水平不高。那么如何將每個(gè)測試者的每道題的回答時(shí)間用圖形直觀地顯示出來,讓主試者很快看出哪個(gè)測試者的綜合能力水平比較高,是本系統(tǒng)要完成的一個(gè)主要功能。
VB編程環(huán)境雖然使用簡單,但它本身沒有自動繪制圖形的能力,需要借助編程來實(shí)現(xiàn)[2]。一種方法是通過 Object.Line(X1,Y1)-(X2,Y2)函數(shù)來實(shí)現(xiàn),其中Object為繪制曲線的對象,(X1,Y1)為曲線的起點(diǎn)坐標(biāo),(X2,Y2)為曲線的終點(diǎn)坐標(biāo)。如果系統(tǒng)只需要簡單的幾條曲線,用該函數(shù)繪制倒還省事,而且繪制圖形比較靈活,可以根據(jù)用戶的需求進(jìn)行編寫。但是如果曲線很多,就需要編寫很多條這樣的語句,程序就會顯得繁瑣,延長系統(tǒng)運(yùn)行時(shí)間,可讀性差。另一種方法是采用微軟自主開發(fā)的MSChart圖表控件,該控件功能強(qiáng)大,只需設(shè)置其相關(guān)的屬性便能繪制出各種曲線,成為當(dāng)前開發(fā)圖形繪制比較流行的方法。
MSchart圖表控件是Microsoft推出的一款圖表控件,它可以按照一定的規(guī)范將數(shù)據(jù)以30多種圖表的方式繪制出來,使數(shù)據(jù)變得直觀生動。在使用該控件之前,首先需要安裝該控件,并將該控件添加到“工程”中。可以按照以下步驟來完成控件的添加:
(1)在“工程”菜單中,單擊“部件”顯示“部件”對話框。
(2)選定“Microsoft Chart Control”控件名稱左邊的復(fù)選框。
(3)單擊“確定”關(guān)閉“部件”對話框,MSChart控件將出現(xiàn)在工具框中。
(4)將MSChart控件添加到窗體上。
MSChart控件由以下5個(gè)主要對象組成:
(1)Annotations注解集合:它是一個(gè)對圖形的一些注解對象的集合。所謂注解對象,就是對圖形上某個(gè)點(diǎn)的詳細(xì)或者批注的說明。
(2)Chart Areas圖表區(qū)域集合:它是一個(gè)可以作圖的區(qū)域范圍。MS Chart的圖形、圖例、注釋和提示信息都繪制在該區(qū)域上,可以在不同的繪圖區(qū)域放置不同類型的Series。
(3)Legends圖例集合:它是標(biāo)注圖形中各個(gè)線條或顏色的含義。
(4)Series圖表序列集合:它是實(shí)際的繪圖數(shù)據(jù)區(qū)域,實(shí)際呈現(xiàn)的圖形形狀就是由此集合中的每一個(gè)圖表來構(gòu)成的,可以往集合里面添加多個(gè)圖表,每一個(gè)圖表可以有自己的繪制形狀、樣式、獨(dú)立的數(shù)據(jù)等。Series有一些重要屬性,如Label(數(shù)據(jù)點(diǎn)標(biāo)簽文本)、ChartType(圖表類型)等。
(5)Titles圖表的標(biāo)題集合:它是圖表的標(biāo)題說明。
繪制圖表需要數(shù)據(jù),MSChart支持幾種數(shù)據(jù)的添加方式,可以通過在圖表的設(shè)計(jì)界面添加Points對象來添加數(shù)據(jù),可以通過設(shè)置一個(gè)或多個(gè)數(shù)據(jù)源,將數(shù)據(jù)源綁定到圖表中,也可以通過代碼動態(tài)添加數(shù)據(jù)[3]。本系統(tǒng)選用最后一種方式來添加數(shù)據(jù),即通過MSChart控件的Data屬性在程序中動態(tài)指定圖表的數(shù)據(jù),在使用它給圖表添加數(shù)據(jù)之前必須首先指定圖表的行數(shù)(Row Count)和列數(shù)(Column Count)。
2.2.1 圖表的繪制
使用MSChart控件完成測試者測試時(shí)間的繪制,MSChart控件不能與Remote Data和Data控件一起使用,而是利用ADO和OLEDB的強(qiáng)大功能實(shí)現(xiàn)對數(shù)據(jù)的訪問[4]。所以為了填充圖表,必須先創(chuàng)建ADO對象,具體步驟如下:
(1)引入ADO對象。要想在程序中使用ADO對象編程,必須先為當(dāng)前工程引用ADO的對象庫。執(zhí)行工程菜單中的引用命令,啟動引用對話框,在清單列表中選擇“Microsoft ActiveX Data Object2.x Library”(不同版本x的值不一樣)。
(2)聲明ADO對象。為了能夠在程序中使用ADO對象,首先必須聲明Connection和Recordset對象。聲明語句如下:
Private Cn As New ADODB.Connection
Private rs As New ADODB.Recordset
(3)創(chuàng)建ADO對象實(shí)例。聲明了對象以后,還需要創(chuàng)建對象實(shí)例并設(shè)置連接屬性,具體實(shí)現(xiàn)代碼如下:
Set Cn As New ADODB.Connection
//創(chuàng)建Connection對象實(shí)例
Cn.Connection String="Provider=Microsoft Jet OLEDB.4.0;DataSource="&App.Path&"mhealth.mdb"http://設(shè)定ConnectionString屬性連接數(shù)據(jù)庫,mhealth.mdb是與系統(tǒng)相連接的數(shù)據(jù)庫的名字
Cn.Open
Set rs=New ADODB.Recordset創(chuàng)建 Recordset對象實(shí)例
rs.Open Mysql,Cn,ad Open Keyset,adLock Optimistic//打開Recordset對象,其中Mysql是根據(jù)需要定義的結(jié)構(gòu)化查詢字符串
(4)屬性設(shè)置。由于MSChart控件包含的屬性繁雜,因此在應(yīng)用系統(tǒng)開發(fā)中必須結(jié)合實(shí)際需要對其相關(guān)的屬性進(jìn)行設(shè)置。本系統(tǒng)所需設(shè)置的屬性如下:
①Chart Type:返回或設(shè)置用于顯示圖表的類型,前面已經(jīng)講述過它的取值。本系統(tǒng)顯示的是時(shí)間曲線圖,所以我們選用二維折線圖。
②Column Count:返回或設(shè)置與圖表相關(guān)聯(lián)的當(dāng)前數(shù)據(jù)網(wǎng)格的列數(shù)。
③Random Fill:該屬性指定是否隨機(jī)產(chǎn)生圖表數(shù)據(jù)網(wǎng)格的數(shù)據(jù)。
④Data:確定每條曲線的取值。
(5)代碼實(shí)現(xiàn):
With MSChart1
.ChartType=VtCh Chart Type2dLine
.RandomFill=False
.Title.Text="每題標(biāo)準(zhǔn)分"
.Column Count=5 //指定圖表的總列數(shù)
For i=0 To rs.Record Count-1
.Column=1 //測驗(yàn)每道題的反應(yīng)時(shí)間曲線所在列
.Row Count=rs.Record Count
.row=i+1
.RowLabel=CStr(rs("測試題號"))
.Plot.Series Collection(1).Pen.Width=1
.Plot.Series Collection(1).Pen.Style=VtPenStyle Solid
.Plot.Series Collection(1).Pen.VtColor.Set255,0,0
.Data=rs("測試時(shí)間")/1000
.Column=2 //測驗(yàn)每道題的1.15倍時(shí)間標(biāo)準(zhǔn)差所在列
.Row Count=
.row=i+1
自2016年以來,黃河科技學(xué)院與企業(yè)聯(lián)合開發(fā)翻轉(zhuǎn)校園APP,并在全校近3萬名師生中全面推廣使用,促進(jìn)了學(xué)校進(jìn)一步更新教育理念,優(yōu)化教學(xué)模式。
.RowLabel=CStr(rs("ID"))
.Plot.Series Collection(2).Pen.Width=1
.Plot.Series Collection(2).Pen.Style=Vt Pen Style Solid
.Plot.Series Collection(2).Pen.VtColor.Set0,0,255
.Data=(rs("均值")+1.15*rs("方差"))*20/1000
…… //第3到第5系列略
rs.Move Next
Next i
End With
系統(tǒng)運(yùn)行界面如圖1所示。
圖1 系統(tǒng)運(yùn)行界面
2.2.2 圖表的打印
如果想將測試結(jié)果給測試者看,就需要將反映能力水平的結(jié)果數(shù)據(jù)和時(shí)間數(shù)據(jù)打印出來。本系統(tǒng)選用Printer對象進(jìn)行打印編程,該對象對于打印圖表數(shù)據(jù)非常方便,僅需要簡單的編程就可以實(shí)現(xiàn),而且打印效果也相當(dāng)不錯(cuò)。同時(shí),還可以根據(jù)需求自定義打印的格式、字體和大小等參數(shù)。下面介紹用Printer對象打印MSChart控件顯示的圖表。
MS Chart1.Edit Copy
Printer.Print""
Printer.Paint Picture Clipboard.Get Data(),0,800
通過以上幾句代碼就可以將時(shí)間圖表打印在指定的位置。
雖然利用VB的MSChart控件顯示和打印圖表都比較簡單,生成的圖表也很美觀,但它也有不足之處,即如果圖表上的行列比較多,圖表上的字體就會變得凌亂,有的甚至看不清數(shù)據(jù)和標(biāo)簽。另外,數(shù)據(jù)在圖表上的表示也有不足。由于本系統(tǒng)繪制圖表的數(shù)據(jù)量較少,用該控件足以解決問題。如果系統(tǒng)的數(shù)據(jù)量比較多的話,建議從以下2個(gè)方面加以改進(jìn):
(1)將MS Chart控件本身的寬度改變。通過在MSChart控件的下方放置一個(gè)水平滾動條(Hscroll)控件,并將MSChart控件與水平滾動條控件綁定,讓MSChart控件的寬度屬性隨數(shù)據(jù)改變,從而實(shí)現(xiàn)數(shù)據(jù)的同步顯示。
(2)換用其他功能更強(qiáng)大的商用圖表控件,如用Formulaone和TeeChart即可生成統(tǒng)計(jì)圖。
[1] 張成才,王永信,劉丹丹,等.利用MSChart控件動態(tài)生成統(tǒng)計(jì)圖[J].鄭州大學(xué)學(xué)報(bào),2007,28(3):73-75.
[2] 闞金明,趙潤軍.MSChart控件在流動機(jī)械維護(hù)管理系統(tǒng)中的應(yīng)用[J].物流工程與管理,2012,34(6):119-120.
[3] 李懷川,吳孟春.利用微軟圖表控件MSChart實(shí)現(xiàn)紫外線數(shù)據(jù)圖形顯示[J].計(jì)算機(jī)與網(wǎng)絡(luò),2012(12):47-50.
[4] 陳金水,原小艷.利用VB開發(fā)決策支持程序[J].計(jì)算機(jī)工程與科學(xué),2002,24(3):53-54.