摘要:介紹了在Delphi環境下基于OLE技術和WORD對象模型實現通用題庫中試題和試卷編輯、瀏覽的基本原理,并在此基礎上給出了具體的實現過程。
關鍵詞:題庫系統;Delphi;OLE;WORD
中圖分類號:TP311 文獻標識碼: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
眾所周知,一個題庫管理系統除了具有各種管理功能之外,一定會包含如何解決題目輸入以及試卷的排版輸出等問題。解決試題輸入輸出的方法通常有兩種,其一是完全由自己編寫代碼完成,另一種則是調用具備此功能的現有程序完成。顯然,后者是應該是首選。由于最后生成的試卷絕大部分都是WORD格式的,所以通常題目的輸入編輯器和試卷輸出均通過微軟的word程序去完成。本文介紹的便是利用OLE技術實現對WORD的控制。
1 OLE技術和word對象
OLE(對象鏈接與嵌套,Object Linking and Embedding)是Microsoft公司同計算機界合作并發展起來的產品規范,目前已發展成為Microsoft公司面向對象策略的基石。許多大的WINDOWS應用程序都是圍繞它設計的。從用戶的角度講,OLE是一種能使它們共享不同應用程序信息資源的技術,用戶能夠構造聲、文、圖、像、影于一體的復合文檔,可以很容易地集成應用程序。從開發的角度看,OLE是一個可解決許多難題的技術。WINDOWS開發者面臨的最大的難題之一是讓應用程序之間的相互通信,在過去,沒有一個工業標準,而OLE所做的正是標準化這些協議。
OLE包含三個概念。即對象、鏈接和嵌入。對象是應用程序間共享的數據,對象可以是幾乎所有的信息類型,如文字、位圖、矢量圖,甚至于聲音注解和錄像剪輯等。鏈接是指在程序設計中把兩個或多個分別編寫、匯編或編譯過的程序集合成單一的實體的處理方法。嵌入是指應用程序所創建的對象包含在另一個應用程序之中。OLE是一組服務功能,它提供了一種用源于不同應用程序的信息創建復合文檔的強有力方法。實現OLE交換數據需要一個OLE服務器(Server)和一個包容器(Container,有時也稱客戶),服務器是指能產生并編輯OLE對象的應用程序,而客戶是一個可以將OLE對象鏈接或嵌入其程序中的應用程序。其工作原理是服務端公開一些對象功能,客戶端程序可以通過OLE的機制去驅動服務端程序包含的對象功能,這里的服務端和客戶端可以是在同一臺計算機上,也可以在同一個網絡上的不同計算機上。其結構如圖1所示。
Word對象模型是指Word中各種對象之間的相互關系。在Word中,文檔、對話框、文本框、圖形、圖表甚至Word本身都是對象。同時,這些對象都有自己的屬性和方法,并且可以通過OLE技術來訪問和控制。因此,用戶可以通過編程來訪問這些已有的對象,操控他們的屬性和方法,以完成所期望的功能。
以基于Word對象模型的試題庫軟件為例,Word是OLE服務器,Word提供的項目是OLE對象,試題庫軟件是容器。
2 對WORD的控制實現
要實現以Word 為OLE 服務器的試題庫客戶程序,需要用一種程序語言來設計完成,這種語言不但要能支持OLE 技術,而且要有完善的數據庫功能以及能方便地控制Word 進行發送指令。Borland 公司的Delphi是最佳的選擇,它具有豐富而強大的可視組件,對數據庫、OLE、Word 都能完美地支持。
在本系統中需要調用Ms Word作為試題編輯器和試卷的排版輸出工具。通過OLE方式調用Word工作非常方便,程序員可以像調用內部對象一樣調用Word對象來完成工作。調用word工作的關鍵是理解Idispatch接口的工作模式,為了讓其他應用程序可以方便調用word提供的功能,word實現了一個Idispatch接口。用戶可以通過Windows提供的COM方式獲取該接口。用戶可以通過Windows API CreateOleObject('word.basic')來獲取一個Idispatch接口??刂苭ord的所有命令可以直接在Ms word中得到。
下面就通用題庫系統中,在Delphi環境下實現對word的控制程序中的題庫管理模塊和卷庫管理模塊部分作一描述。
2.1 題庫管理模塊
主要任務是試題庫的建立和維護??梢酝瓿?在科目的對應章節上新增、修改、刪除試題;實現試題的導入導出功能;實現題型編輯的功能;實現查找特定試題的功能以便修改試題。
考慮到試題的形式是多種多樣的,系統必須考慮試題中可能有非文本部分。系統應該提供某種機制使用戶可以方便的輸入這樣的試題(含有圖片的試題)?;谶@個原因,再考慮到試題信息磁盤占用量,把試題和答案分成兩種方式(純文本方式和word文件形式的試題)。同時系統應該提供一種機制使用戶可以用較方便的方式輸入那些已經存為word文件形式的試題。
如圖2為涉及word控制的題庫系統中的題庫維護模塊界面。
其中輸入/導入試題部分涉及word控制的代碼實現為:
//輸入試題
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;
//導入試題
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 卷庫管理模塊
實現的功能之一是自動化出卷。即根據用戶對科目考核的具體要求,在試題庫中抽取符合要求的題目組成試卷,對試卷及其答案進行自動排版并輸出到ms word中供用戶進行手工再排版,再根據實際情況調整試題,最后完成試卷的排版輸出。
如圖3為涉及word控制的題庫系統中的卷庫維護模塊界面。
其中排版打印部分涉及word控制的代碼實現為:
//以下代碼用于試卷的打印輸出
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 結束語
在通用題庫的試題編輯和試卷生成的瀏覽、打印等過程中,應用OLE技術對實現WORD的控制實現是目前設計題庫管理系統的一種較好的選擇。既省卻了試題、試卷編輯程序的開發之辛苦,而且利用MS WORD所提供的功能,可以方便、有效地解決文本編輯中的所有問題,故值得選擇。
參考文獻:
[1] 謝俊.通用題庫管理系統的設計與實現[J].計算機時代,2008(3).
[2] 王芳.用Delphi實現試題庫出卷系統Word文檔考卷的輸出[J].牡丹江醫學院學報,2006,27(4).