您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 设计及方案 > 基于Delphi7.0实现试题库编辑管理系统
基于Delphi7.0实现试题库编辑管理系统在试题库系统的设计开发中,常需处理同时含有文本和图形的图文试题信息。其中图表、公式及特殊字符等对象一直是用计算机高级语言设计制作试题库的难题[1]。本文利用MicorsoftWord2003作为试题编辑工具,并利用Delphi7.0的TImage元件以图形方式显示Word编辑的图文试题内容,实现试题编辑维护和试题基本信息与图文内容的同窗口同步显示,效果较好,在文中给出了具体的编程实现过程。1、设计构思采用Delphi7.0可视化程序开发工具、MicrosoftWord2003和Access2003作为开发环境来建立试题库管理系统。Delphi7.0是优秀的Windows软件开发工具之一,其访问和控制Word的方法较多,主要有:OLE(ObjectLinkingandEmbedding,对象链接嵌入)、Delphi的Servers控件、COM(ComponentObjectMode,组件对象模型)技术以及DDE(DynamicDataExchange,动态数据交换)技术。Word本身是个支持OLE的服务器程序,通过OLE技术把Word文件的内容在其他支持OLE的客户端程序上进行显示或编辑。因此,通过Delphi7.0可以灵活操作控制Word。用Word2003编辑维护试题图文信息,需要解决以下问题:如何进行试题图文信息的存储、读取以及试题记录中其他字段与图文内容的同窗口同步更新和显示。采用OLE嵌入Word对象方式,以用户可非常熟悉的Word环境作为试题图文内容编辑工具,对试题进行编辑维护;将Word编辑的试题图文内容以图形方式进行显示,实现图文内容与试题基本信息的同窗口同步更新显示浏览,避免了通过激活OleContainer控件方式进行Word文档内容显示,界面友好,浏览方便。2、具体设计过程及关键技术方法由于许多学科中都涉及到含有图文信息的试题内容和参考答案,因此可以将试题内容、参考答案分成两类:一类为纯文本型;另一类为图文型。对纯文本型内容采用RichEdit控件进行文本内容的编辑显示,并保存到Access2003数据库的Memo字段中;对图文型内容,由于OLE对象能存储任何文本、图片、声音、动画,甚至程序,因此采用OleContainer控件嵌入Word方式进行图文信息编辑,使用时只需激活OleConiainer直接启动Word文档进行编辑,图文信息保存到Access2003数据库的“OLE对象”字段中。在设计中,图文内容编辑维护设计为一个窗体,实现Word操作和编辑存储数据,图文内容的浏览显示与试题基本信息显示设计为一个窗体。具体程序设计如下:2.1新建一个窗体,作为图文内容编辑维护窗体,其Name属性设为:Frm_Word;2.2放置1个MainMenu部件,3个Tpanel组件,Name属性分别设为:mmWord,pnl_Control,pnl_ocWord,pnl_ShapeStatus。在pnl_Control上放置几个button,作为窗口工具栏;在pnl_ocWord上放置OleContainer部件,设置其Align为alClient;AllowActiveDoc为true;AllowInPlace为True;Name为olecntr_Word;OldStreamFormat为True。由于OleContainer部件以嵌入方式运行Word服务程序时,会自动占用整个客户区,可将pnl_Control的Align设为alTop、Locked设为True;pnl_ocWord的Align设为alClient;pnl_Status的Align设为alBottom、Locked设为True,从而避免窗口的不同区域被Ole服务程序占用。运行期效果图如图1所示。2.3图文内容编辑和数据存储的部分关键代码如下:2.3.1以嵌入方式创建空白Word文档,并隐藏隐藏Word的部分工具栏;ProcedureTFrm_Word.CreateOleWordDoc;VariBarCnt:integer;begintryolecntr_Word.CreateObject('word.document',true);olecntr_Word.run;oleApp:=Olectnrwd.OleObject;foriBarCnt:=3to10do//隐藏Word的部分工具栏,oleApp.commandbars.item[iBarCnt].visible:=false;oleApp:=unassigned;exceptShowMessage(‘OLE错误,不能创建Word文档’);end;end;2.3.2编辑图文内容…ProcedureTFrm_Word.EditOleWordDoc;BeginIfolecntr_Word.StateosEmptythenbeginolecntr_Word.DoVerb(ovPrimary);//启动Word服务器主动作oleApp:=Olectnrwd.OleObject.Application.activedocument;//获得Word活动文档对象,设置Word文档的页面参数,如纸张大小,页边距等oleapp.PageSetup.PaperSize:=7;oleapp.PageSetup.LeftMargin:=pLeft.X;oleapp.PageSetup.TopMargin:=pLeft.Y;oleapp.PageSetup.RightMargin:=pRight.X;oleapp.PageSetup.BottomMargin:=pRight.Y;pPaper.X:=OleApp.PageSetup.PageWidth;pPaper.Y:=OleApp.PageSetup.PageHeight;pwd.Text:=inttostr(pPaper.X);pHt.Text:=inttostr(pPaper.Y);oleApp:=unassigned;endelseShowMessage(‘Word对象没有加载,不能编辑图元内容’);end;…(3)、将Word编辑的图文试题内容以流方式存储到数据库的“Ole对象”类型字段中。…ProcedureTFrm_Word.SaveOleWordDocToDB;varStream:TMemoryStream;begindm.dm_blob.edit;Stream:=TMemoryStream.Create;olecntr_Word.SaveToStream(Stream);TBlobFIELD(Fieldbyname('BlobDoc')).LoadFromStream(Stream);dm.dm_blob.post;Stream.Free;end;…2.3.4、将数据库中的图文试题内容以流方式加载到OleContainer中。…ProcedureTFrm_Word.OleWordLoadFromDB;varMstream:TStream;begindm.dm_blob.Edit;//dm.dm_blob:存储图文试题内容的数据表MStream:=Dm.dm_blob.CreateBlobStream(Dm.dm_blob.FieldByName('BlobDoc'),bmRead);olecntr_Word.Loadfromstream(Mstream);Mstream.free;End;…2.3.5显示图文试题内容中当前Word形体在页面中的位置信息…ProcedureTFrm_Word.DisplayCurrentShapeStatur;varoShape,rhPos,rvPos:Variant;beginifolecntr_Word.OleObject.Application.selection.Type8thenbegindm.ShowAlert('没有选择图形,不能提供信息。请选择所需图形!');exit;end;oshape:=olecntr_Word.OleObject.Application.selection.ShapeRange;ifoShape.wrapformat.typewdWrapTopBottomthenexit;//当前形体的版式如果不是上下型,则不显示其状态信息oshape.WrapFormat.AllowOverlap:=False;//禁用形体的允许重叠属性rhPos:=oShape.RelativeHorizontalPosition;//形体的水平对齐方式rvPos:=oShape.RelativeVerticalPosition;//形体的垂直对齐方式//要获得形体的相对于页面的绝对位置,需要以页面作为参考标准设置形体的对齐方式oShape.RelativeHorizontalPosition:=wdRelativeHorizontalPositionPage;oShape.RelativeVerticalPosition:=wdRelativeVerticalPositionPage;//获得形体相对于页面的绝对位置并显示在pnl_ShapeStatus的显示控件中shLt.text:=inttostr(round(oShape.left));shRt.text:=inttostr(round(oShape.width+oShape.left));shTp.text:=inttostr(round(oShape.top));shBm.text:=inttostr(round(oShape.height+oShape.top));oShape.RelativeHorizontalPosition:=rhPos;//恢复形体的对齐方式oShape.RelativeVerticalPosition:=rvPos;oshape:=unassigned;end;…对上述代码稍做修改,便可在试题输出Word文档时实现对形体的自动排版。2.4目前有关Delphi7.0+OleContainer应用的文献报道中,多采用OleContainer的paste方法对试题图文内容进行显示,这种显示模式存在着某些固有缺陷。通过实验发现,将Word编辑的图文试题内容拷贝到剪贴板后,以图元方式读取剪贴板内容,可实现Word文档内容图形化处理,从而可将其绘制在图形元件中,以图形方式与试题基本信息直观显示在同一窗口中,方便用户浏览。显示效果如图2所示,主要代码如下:…VarpubMetaFile:TmetaFile;WordApp:Variant;Begin…WordApp.ActiveDocument.Select;WordApp.Selection.Copy;//将Word内容复制到系统剪贴板pubMetaFile:=TMetaFile.Create;pubMetaFile.Assign(clipboard);//以图元方式读取剪贴板内容pubMetaFile.Inch:=Screen.PixelsPerInch;iMh:=pubMetaFile.Height;iMw:=pubMetaFile.Width;AImage.Height:=Imh+100;AImage.Width:=700;withAImage.Canvasdo//在TImage元件画布上绘制图形化的Word文档内容beginDraw(10,50,pubMetaFile);ARect:=Rect(8,38,imw+10,Imh+60);DrawFocusRect(ARect);end;pubMetaFile.Free;…end;3、结束语上述程序能够在Delphi7.0,Word2003,Access2003,WindowsXp操作系统下正确运行。本试题库编辑管理系统,能实现随意创建各门课程试题库,通过OleContainer控件和Word对象模型在Delphi7.0环境下编辑图文试题内容和参考答案,
本文标题:基于Delphi7.0实现试题库编辑管理系统
链接地址:https://www.777doc.com/doc-2569125 .html