摘要:介紹了在Delphi環(huán)境下基于OLE技術(shù)和WORD對象模型實現(xiàn)通用題庫中試題和試卷編輯、瀏覽的基本原理,并在此基礎(chǔ)上給出了具體的實現(xiàn)過程。
關(guān)鍵詞:題庫系統(tǒng);Delphi;OLE;WORD
中圖分類號:TP311 文獻標(biāo)識碼:A文章編號:1009-3044(2009)36-10187-03
Implementation of Word Document in Examination Paper Management System Based on OLE
XIE Jun
(Armedpolice Command College, Hangzhou 310023, China)
Abstract: In this paper, a principle is presented to solve that how to display and edit examination papers based on OLE technology and word object model in the Delphi environment, and it is implemented by using Delphi.
Key words: examination paper system; delphi; OLE; word
眾所周知,一個題庫管理系統(tǒng)除了具有各種管理功能之外,一定會包含如何解決題目輸入以及試卷的排版輸出等問題。解決試題輸入輸出的方法通常有兩種,其一是完全由自己編寫代碼完成,另一種則是調(diào)用具備此功能的現(xiàn)有程序完成。顯然,后者是應(yīng)該是首選。由于最后生成的試卷絕大部分都是WORD格式的,所以通常題目的輸入編輯器和試卷輸出均通過微軟的word程序去完成。本文介紹的便是利用OLE技術(shù)實現(xiàn)對WORD的控制。
1 OLE技術(shù)和word對象
OLE(對象鏈接與嵌套,Object Linking and Embedding)是Microsoft公司同計算機界合作并發(fā)展起來的產(chǎn)品規(guī)范,目前已發(fā)展成為Microsoft公司面向?qū)ο蟛呗缘幕?。許多大的WINDOWS應(yīng)用程序都是圍繞它設(shè)計的。從用戶的角度講,OLE是一種能使它們共享不同應(yīng)用程序信息資源的技術(shù),用戶能夠構(gòu)造聲、文、圖、像、影于一體的復(fù)合文檔,可以很容易地集成應(yīng)用程序。從開發(fā)的角度看,OLE是一個可解決許多難題的技術(shù)。WINDOWS開發(fā)者面臨的最大的難題之一是讓應(yīng)用程序之間的相互通信,在過去,沒有一個工業(yè)標(biāo)準(zhǔn),而OLE所做的正是標(biāo)準(zhǔn)化這些協(xié)議。
OLE包含三個概念。即對象、鏈接和嵌入。對象是應(yīng)用程序間共享的數(shù)據(jù),對象可以是幾乎所有的信息類型,如文字、位圖、矢量圖,甚至于聲音注解和錄像剪輯等。鏈接是指在程序設(shè)計中把兩個或多個分別編寫、匯編或編譯過的程序集合成單一的實體的處理方法。嵌入是指應(yīng)用程序所創(chuàng)建的對象包含在另一個應(yīng)用程序之中。OLE是一組服務(wù)功能,它提供了一種用源于不同應(yīng)用程序的信息創(chuàng)建復(fù)合文檔的強有力方法。實現(xiàn)OLE交換數(shù)據(jù)需要一個OLE服務(wù)器(Server)和一個包容器(Container,有時也稱客戶),服務(wù)器是指能產(chǎn)生并編輯OLE對象的應(yīng)用程序,而客戶是一個可以將OLE對象鏈接或嵌入其程序中的應(yīng)用程序。其工作原理是服務(wù)端公開一些對象功能,客戶端程序可以通過OLE的機制去驅(qū)動服務(wù)端程序包含的對象功能,這里的服務(wù)端和客戶端可以是在同一臺計算機上,也可以在同一個網(wǎng)絡(luò)上的不同計算機上。其結(jié)構(gòu)如圖1所示。
Word對象模型是指Word中各種對象之間的相互關(guān)系。在Word中,文檔、對話框、文本框、圖形、圖表甚至Word本身都是對象。同時,這些對象都有自己的屬性和方法,并且可以通過OLE技術(shù)來訪問和控制。因此,用戶可以通過編程來訪問這些已有的對象,操控他們的屬性和方法,以完成所期望的功能。
以基于Word對象模型的試題庫軟件為例,Word是OLE服務(wù)器,Word提供的項目是OLE對象,試題庫軟件是容器。
2 對WORD的控制實現(xiàn)
要實現(xiàn)以Word 為OLE 服務(wù)器的試題庫客戶程序,需要用一種程序語言來設(shè)計完成,這種語言不但要能支持OLE 技術(shù),而且要有完善的數(shù)據(jù)庫功能以及能方便地控制Word 進行發(fā)送指令。Borland 公司的Delphi是最佳的選擇,它具有豐富而強大的可視組件,對數(shù)據(jù)庫、OLE、Word 都能完美地支持。
在本系統(tǒng)中需要調(diào)用Ms Word作為試題編輯器和試卷的排版輸出工具。通過OLE方式調(diào)用Word工作非常方便,程序員可以像調(diào)用內(nèi)部對象一樣調(diào)用Word對象來完成工作。調(diào)用word工作的關(guān)鍵是理解Idispatch接口的工作模式,為了讓其他應(yīng)用程序可以方便調(diào)用word提供的功能,word實現(xiàn)了一個Idispatch接口。用戶可以通過Windows提供的COM方式獲取該接口。用戶可以通過Windows API CreateOleObject('word.basic')來獲取一個Idispatch接口??刂苭ord的所有命令可以直接在Ms word中得到。
下面就通用題庫系統(tǒng)中,在Delphi環(huán)境下實現(xiàn)對word的控制程序中的題庫管理模塊和卷庫管理模塊部分作一描述。
2.1 題庫管理模塊
主要任務(wù)是試題庫的建立和維護??梢酝瓿?在科目的對應(yīng)章節(jié)上新增、修改、刪除試題;實現(xiàn)試題的導(dǎo)入導(dǎo)出功能;實現(xiàn)題型編輯的功能;實現(xiàn)查找特定試題的功能以便修改試題。
考慮到試題的形式是多種多樣的,系統(tǒng)必須考慮試題中可能有非文本部分。系統(tǒng)應(yīng)該提供某種機制使用戶可以方便的輸入這樣的試題(含有圖片的試題)?;谶@個原因,再考慮到試題信息磁盤占用量,把試題和答案分成兩種方式(純文本方式和word文件形式的試題)。同時系統(tǒng)應(yīng)該提供一種機制使用戶可以用較方便的方式輸入那些已經(jīng)存為word文件形式的試題。
如圖2為涉及word控制的題庫系統(tǒng)中的題庫維護模塊界面。
其中輸入/導(dǎo)入試題部分涉及word控制的代碼實現(xiàn)為:
//輸入試題
procedure TfrmQuestionM.btnWriteQdClick(Sender: TObject);
begin
if TableQuestionData.FieldByName('QdType').AsString='Text' then
begin
DBMQd.Visible:=not DBMQd.Visible;
DBMAnswer.Visible:=1;
if DBMQd.Visible then DBMQd.SetFocus;
exit;
end;
if not StartWordApp then exit;
Msword.appshow;
wordQdIsInput:=1;
if TableQuestionData.FieldByName('WordQd').IsNull then
begin
MsWord.FileNew;
MsWord.filesaveas(OldWordQdFileName);
end
else
begin
TBlobField(TableQuestionData.FieldByName('wordQd')).SaveToFile(OldWordQdFileName);
Msword.FileOpen(OldWordQdFileName);
end;
end;
//導(dǎo)入試題
procedure TfrmQuestionM.btnInputQdClick(Sender: TObject);
var
FileStream:TFileStream;
begin
if not RBWordQd.Checked then
begin
messagebox(handle,'您定義的試題形式不是word文件形式','錯誤信息',mb_Ok);
exit;
end;
if opendialog1.Execute then
begin
FileStream:=TFileStream.Create(opendialog1.FileName,fmOpenRead);
FileStream.Position:=0;TBlobField(TableQuestionData.FieldByName('wordqd')).LoadFromStream(filestream);
FileStream.Free;
wordQdIsInput:=true;
end;
end;
2.2 卷庫管理模塊
實現(xiàn)的功能之一是自動化出卷。即根據(jù)用戶對科目考核的具體要求,在試題庫中抽取符合要求的題目組成試卷,對試卷及其答案進行自動排版并輸出到ms word中供用戶進行手工再排版,再根據(jù)實際情況調(diào)整試題,最后完成試卷的排版輸出。
如圖3為涉及word控制的題庫系統(tǒng)中的卷庫維護模塊界面。
其中排版打印部分涉及word控制的代碼實現(xiàn)為:
//以下代碼用于試卷的打印輸出
procedure TfrmPaperM.BitBtnPrintClick(Sender: TObject);
var
Tempdir,TempFileName:string;
strtemp:string;
chineseIndex:array of string;
i,j:integer;
begin
frmWait.Show;
QryTitle.Close;
QryTitle.ParamByName('currentpid').AsString:=QryPaper.fieldByName('paperid').AsString;
QryTitle.Open;
TempDir:=ExtractFileDir(application.ExeName)+'\\wordfile\\試卷\\';
try
msword.FileCloseAll
except
try
msword:=CreateOleObject('word.basic');
except
frmWait.Close;
messageBox(handle,'運行word失敗','警告',MB_Ok);
exit;
end;
end;
msword.FileOpen(TempDir+'試卷.doc');
msword.filesaveas(tempdir+'打印試卷.doc');
//試卷名稱、科目、格式(略)
3 結(jié)束語
在通用題庫的試題編輯和試卷生成的瀏覽、打印等過程中,應(yīng)用OLE技術(shù)對實現(xiàn)WORD的控制實現(xiàn)是目前設(shè)計題庫管理系統(tǒng)的一種較好的選擇。既省卻了試題、試卷編輯程序的開發(fā)之辛苦,而且利用MS WORD所提供的功能,可以方便、有效地解決文本編輯中的所有問題,故值得選擇。
參考文獻:
[1] 謝俊.通用題庫管理系統(tǒng)的設(shè)計與實現(xiàn)[J].計算機時代,2008(3).
[2] 王芳.用Delphi實現(xiàn)試題庫出卷系統(tǒng)Word文檔考卷的輸出[J].牡丹江醫(yī)學(xué)院學(xué)報,2006,27(4).