李紅巖,張忠華
哈爾濱醫(yī)科大學(xué)大慶校區(qū)醫(yī)學(xué)信息學(xué)系,黑龍江大慶163319
在多媒體課件制作領(lǐng)域,Authorware一直占據(jù)著重要的統(tǒng)治地位,該軟件以其功能強(qiáng)大,擴(kuò)展性強(qiáng),編程簡(jiǎn)單而深受課件制作人員的喜愛[1]。對(duì)于高級(jí)課件開發(fā)人員來說,將Authorware課件與數(shù)據(jù)庫相結(jié)合,開發(fā)更加復(fù)雜的課件也是一種常用技術(shù)。但就Authorware而言,其數(shù)據(jù)庫應(yīng)用能力相當(dāng)有限,不足以應(yīng)付各種復(fù)雜的數(shù)據(jù)庫應(yīng)用需求。所以,利用外來ActiveX控件提高Authorware課件的數(shù)據(jù)庫應(yīng)用能力就成為首選方法。在可以插入的ActiveX控件當(dāng)中,F(xiàn)orms 2.0是目前較好的一款,利用它,Authorware可以開發(fā)出類似于其他高級(jí)語言窗體的界面,使Authorware的數(shù)據(jù)庫應(yīng)用能力上了一個(gè)新的臺(tái)階。
Forms 2.0控件是微軟開發(fā)的一類ActiveX控件,在Authorware環(huán)境中可以查得Forms 2.0控件包含用于表單窗體開發(fā)用的各種標(biāo)準(zhǔn)控件共14種(如表1所示),是專為各種開發(fā)語言設(shè)計(jì)的用于某一功能的獨(dú)立組件,將控件嵌入開發(fā)語言后,可以擴(kuò)充某一編程語言的功能與應(yīng)用范圍,間接延伸了編程開發(fā)語言的應(yīng)用領(lǐng)域,實(shí)現(xiàn)了高效率的代碼重用[2]。Forms威者2.0控件一般在安裝Windows XP系統(tǒng)時(shí)自動(dòng)安裝,其主文件為FM20.DLL,表明這個(gè)文件是一個(gè)動(dòng)態(tài)鏈接庫文件,存放于系統(tǒng)Windowssystem32文件夾下。在Authorware 7.0中調(diào)用Forms 2.0中的各個(gè)控件,需要注冊(cè)才能使用。如果在播放課件的計(jì)算機(jī)上指定文件夾下沒有FM20.DLL文件,應(yīng)先安裝FM20.DLL(以前系統(tǒng)安裝過VS、VB等語言和Office軟件,此控件就已安裝)。
表1 Microsoft Forms 2.0控件一覽表
ActiveX控件必須在系統(tǒng)中進(jìn)行注冊(cè)才能使用,注冊(cè)的方法主要有以下3種途徑:一是用Regsvr 32.exe程序?qū)ctiveX控件進(jìn)行注冊(cè);二是用安裝程序進(jìn)行注冊(cè);三是利用Authorware系統(tǒng)函數(shù)進(jìn)行注冊(cè)[3]。
為方便用戶使用,開發(fā)人員應(yīng)在課件中對(duì)fm 20.dll控件實(shí)現(xiàn)自動(dòng)注冊(cè)與注冊(cè)操作。Authorware提供了以下3條函數(shù)可供使用:
1.2.1 ActiveXControlQuery(CLASSID)函數(shù)
用于查詢ActiveX控件是否注冊(cè),每種ActiveX控件均有一個(gè)系統(tǒng)內(nèi)的專用的CLASSID,當(dāng)參數(shù)CLASSID為“{8BD21D30-EC42-11CE-9E0D-00AA006002F3}”時(shí),可查詢Froms 2.0控件是否注冊(cè),如已注冊(cè)返回-1,否則返回0。
1.2.2 ActiveXControlRegister(FileName)函數(shù)
用于注冊(cè)ActiveX控件,將參數(shù)FileName換成“fm20.dll”,可實(shí)現(xiàn)對(duì)msForms2.0控件的自動(dòng)注冊(cè)。
1.2.3 ActiveXControlUnRegister(FileName)函數(shù)用于注銷ActiveX控件,將參數(shù)FileName換成“fm20.dll”,可對(duì)msForms2.0控件進(jìn)行自動(dòng)注銷。
開發(fā)人員在Authorware 7.0中可以方便地使用Forms 2.0各控件的屬性和方法。設(shè)置ActiveX控件屬性的函數(shù)語法格式為:
SetSpriteProperty(@"SpriteIconTitle",#Property,value)
其中SpriteIconTitle表示ActiveX控件名稱,Property表示ActiveX控件屬性,value表示設(shè)置的值。
如果要使用控件的事件,則可使用CallSprite函數(shù),其格式為:
CallSprite(@"SpriteIconTitle",#method[,argument...])
其中的method表示使用的方法,如有參數(shù)可用逗號(hào)隔開[4]。
在Authorware環(huán)境中,要實(shí)現(xiàn)對(duì)數(shù)據(jù)庫的操作,應(yīng)該用到開放數(shù)據(jù)庫互連(open database connectivity,ODBC)。ODBC是微軟公司W(wǎng)OSA(開放服務(wù)結(jié)構(gòu))中有關(guān)數(shù)據(jù)庫的一個(gè)組成部分,它建立了一組規(guī)范,并提供了一組訪問數(shù)據(jù)庫的標(biāo)準(zhǔn)API[5]。它使用一種強(qiáng)大而靈活的數(shù)據(jù)庫訪問標(biāo)準(zhǔn),使用分層體系結(jié)構(gòu)實(shí)現(xiàn)對(duì)數(shù)據(jù)庫的操作,通過驅(qū)動(dòng)程序提供了良好的數(shù)據(jù)庫獨(dú)立性[6]。目前標(biāo)準(zhǔn)的關(guān)系數(shù)據(jù)庫均全面支持ODBC驅(qū)動(dòng),用戶可在不依賴DBMS的情況下,通過ODBC,直接使用SQL語句操作數(shù)據(jù)庫,完成數(shù)據(jù)庫的各種應(yīng)用。在Authorware中,訪問數(shù)據(jù)庫是通過SQL實(shí)現(xiàn)的。用SQL語言書寫的查詢操作可以通過應(yīng)用程序傳送給ODBC系統(tǒng),再由ODBC系統(tǒng)將查詢的結(jié)果傳送給應(yīng)用程序[7]。結(jié)果是,即使用戶沒有在當(dāng)前計(jì)算機(jī)上安裝相關(guān)數(shù)據(jù)庫管理系統(tǒng),仍能正常使用數(shù)據(jù)庫文件,進(jìn)行各種數(shù)據(jù)庫應(yīng)用。
使用ODBC的第一步要配置數(shù)據(jù)源。配置數(shù)據(jù)源的方法有兩種:一種是在系統(tǒng)中直接進(jìn)入“管理工具”中的“數(shù)據(jù)源(ODBC)”,在面板中進(jìn)行數(shù)據(jù)源的配置。這種方法靈活性不佳,不利于課件的自動(dòng)使用,需在每臺(tái)機(jī)器上進(jìn)行人工操作,略顯繁瑣;第二種方法是通過Authorware的函數(shù)面板選擇tMSDSN.u32文件中的tMsDBRegister函數(shù),將其載入,再在計(jì)算圖標(biāo)中編寫代碼,實(shí)現(xiàn)ODBC的自動(dòng)配置。代碼格式為:
其中,各項(xiàng)參數(shù)如表2所示。
表2 tMsDBRegister()函數(shù)各參數(shù)項(xiàng)配置及使用方法
完成ODBC配置以后,應(yīng)用數(shù)據(jù)源時(shí)還要經(jīng)過打開數(shù)據(jù)源,執(zhí)行SQL語句和關(guān)閉數(shù)據(jù)源等操作。相關(guān)操作需要用到ODBC.u32文件的ODBCOpen、ODBCExecute、ODBCClose三個(gè)函數(shù),實(shí)現(xiàn)ODBC的打開、數(shù)據(jù)操作與ODBC的關(guān)閉[8]等必要的數(shù)據(jù)庫操作。使用Authorware的函數(shù)面板載入ODBC.u32文件的ODBCOpen、ODBCExecute、ODBCClose三個(gè)函數(shù)。
打開ODBC的程序代碼為:ODBCHandle:=ODB COpen(WindowHandle,“ODBC錯(cuò)誤”,“Stu1”,,),而關(guān)閉ODBC的程序代碼是:ODBCClose(ODBCHandle)。
在上述的知識(shí)基礎(chǔ)之上,就可以在Authorware中對(duì)Forms 2.0控件進(jìn)行應(yīng)用了。以信息系統(tǒng)分析與設(shè)計(jì)課件課后練習(xí)題為例,在流程線上加入了Label和4個(gè)RadioButton控件,Label控件用于顯示題干內(nèi)容,4個(gè)RadioButton控件用于顯示備選答案,這4個(gè)控件在使用時(shí)只能多選一。按圖1創(chuàng)建流程。
圖1 主流程線圖標(biāo)設(shè)計(jì)圖
程序查詢?cè)O(shè)計(jì)時(shí)應(yīng)使用SQL語言中的Select語句,SQL是Structured Query Language的英文縮寫,其功能包括查詢、操縱、定義和控制四個(gè)方面,是一個(gè)通用的、功能極強(qiáng)的關(guān)系數(shù)據(jù)庫語言,成為關(guān)系數(shù)據(jù)庫的標(biāo)準(zhǔn)語言[9]。標(biāo)準(zhǔn)的SQL語言共有9條語句,涵蓋了數(shù)據(jù)庫的所有操作。Select命令是最常用的查詢命令,不僅能夠?qū)崿F(xiàn)選擇和投影操作,還可以通過聚集函數(shù)[10](Count,sum,avg,max,min)實(shí)現(xiàn)統(tǒng)計(jì)操作。只是Authorware沒有那么強(qiáng)大的命令與之配套使用,所以操作必須使用數(shù)組來保存查詢結(jié)果。程序的設(shè)計(jì)思路是:為實(shí)現(xiàn)逐條記錄查詢,需預(yù)先根據(jù)記錄的數(shù)量,先期定義足夠多元素的數(shù)組用來保存查詢結(jié)果,用循環(huán)命令對(duì)每條記錄的每個(gè)字段的數(shù)據(jù)單獨(dú)查詢,并將結(jié)果保存到數(shù)組的相應(yīng)元素中,當(dāng)需要顯示下一條或上一條記錄時(shí),只需改變數(shù)組的下標(biāo)變量即可,具體代碼如下所示:
nn:=ODBCExecute(ODBCHandle,"select count(*)from選擇題庫")—取得記錄個(gè)數(shù)
data:=Array(,nn,7)
couname:=Array(,7)
couname[1]:="id"
couname[2]:="題干"
couname[3]:="A"
couname[4]:="B"
couname[5]:="C"
couname[6]:="D"
couname[7]:="答案"
repeat with i:=1 to nn
recid:=i
repeat with j:=1 to 7
sqlstring:="select"^couname[j]^"from選擇題庫where id="^String(recid)
data[i,j]:=ODBCExecute(ODBCHandle,sqlstring)
end repeat
end repeat
—將結(jié)果保存到數(shù)組元素中
n:=1
SetSpriteProperty(@"題干",#Caption,String(data[n,1])^"."^data[n,2])
SetSpriteProperty(@"A",#Caption,data[n,3])
SetSpriteProperty(@"B",#Caption,data[n,4])
SetSpriteProperty(@"C",#Caption,data[n,5])
SetSpriteProperty(@"D",#Caption,data[n,6])
—顯示第一題內(nèi)容及備選答案
jg:=""
圖2 程序運(yùn)行效果圖
以上是一個(gè)逐條顯示選擇題并允許用戶操作練習(xí)的課件實(shí)例,用到的控件比較有限,但有較大的代表性。各控件屬性可在選擇ActiveX控件圖標(biāo)時(shí),選擇屬性面板中的“選項(xiàng)”按鈕來查看,在選項(xiàng)窗口中會(huì)有Property、Method、Events和CallString等頁的內(nèi)容供使用和設(shè)置,有些屬性可能在Property中沒有列出,但可以在CallString中查到并應(yīng)用,如上例中的ComboBox控件中的ListIndex屬性就是如此。該文中涉及到的數(shù)據(jù)庫文件需與課件放在同一文件夾下,一旦有了數(shù)據(jù)庫文件,在播放課件的計(jì)算機(jī)上不需安裝ACCESS數(shù)據(jù)庫管理系統(tǒng)。以上方法在Windows 7、Windows XP和Authorware 7.0環(huán)境中調(diào)試實(shí)現(xiàn)。當(dāng)然在設(shè)計(jì)思想和技巧方面可能還存在一定的修改余地,請(qǐng)同仁們批評(píng)指正。
[1]李若瑾,王麗萍.Authorware 7.0實(shí)例教程[M].2版.北京:電子工業(yè)出版社,2010:1-5
[2]京輝熱點(diǎn)工作室.Authorware 5入門與提高[M].北京:人民郵電出版社,2000:276-280
[3]蘇貴斌,譚巍,馬季骕.C/S架構(gòu)Authorware應(yīng)用程序中ActiveX控件的實(shí)現(xiàn)[J].內(nèi)蒙古大學(xué)學(xué)報(bào):自然科學(xué)版,2004,35(6):693-696
[4]張淮中.Authorware中的ActiveX控件的使用[J].微電子學(xué)與計(jì)算機(jī),2000,17(2):28-30
[5]孫志雷.在Authorware中如何實(shí)現(xiàn)對(duì)數(shù)據(jù)庫的操作[J].電腦知識(shí)與技術(shù),2007,4(21):633-634
[6]李志偉.基于ODBC的數(shù)據(jù)庫系統(tǒng)應(yīng)用程序的移植[J].計(jì)算機(jī)工程與設(shè)計(jì),2009,30(12):2985
[7]鄧朝暉,李發(fā)英,李景福.Authorware對(duì)數(shù)據(jù)庫的操作[J].科學(xué)技術(shù)與工程,2006,6(2):242-244
[8]郭新房,倪寶童,王健,等.Authorware 7.0多媒體制作基礎(chǔ)教程與案例實(shí)踐[M].北京:清華大學(xué)出版社,2007:265-266
[9]王珊,陳紅.?dāng)?shù)據(jù)庫系統(tǒng)原理教程[M].北京:清華大學(xué)出版社,2010:66-67
[10]王珊,薩師煊.?dāng)?shù)據(jù)庫系統(tǒng)概論[M].北京:高等教育出版社,2006:250