用Word批注实现Delphi中的特殊格式报表打印.docVIP

  • 28
  • 0
  • 约5.36千字
  • 约 6页
  • 2018-02-04 发布于江西
  • 举报

用Word批注实现Delphi中的特殊格式报表打印.doc

用Word批注实现Delphi中的特殊格式报表打印

用Word批注实现Delphi中的特殊格式报表打印 祝勇仁? 邹金桥? 张炜 (浙江机电职业技术学院,杭州 310053) ? ??? 摘? 要 ?在Delphi开发特殊格式报表相对复杂的情况下,调用Word的文档模板,设置成相应报表格式,通过插入批注实现动态信息的修改,加快了复杂报表开发的速度并降低了设计的难度。该方法对等级证书、证明书及电子签名等类似特殊格式的报表打印提供了一个通用的捷径。 ??? 关键词? Delphi,特殊格式,Word,报表,批注? ? 1? 前言 ??? 在用Delphi开发数据库应用程序的过程中,用户常会提出某些特殊格式报表的打印需求。例如,在教学管理系统开发中,对于各种等级考试的证书,毕业证书等的打印,以及类似的各种证明文件等。如图1所示的为遗失毕业证书的学生开具的毕业证明书,其中下划线部分是在程序运行时输入的信息。 图1? 证明书模板 ??? 在一个系统中可能会有此类各种各样的文档、报表,它们字体风格、格式设置都有一定的模板,有自己的特点。虽然Delphi中提供了大量的报表控件用于报表设计,但是文字输入及格式的控制相对复杂,而Word本身就是一个字处理软件,在这方面具有绝对的优势,在Word中处理此类报表格式的设置和打印,就容易得多了。由于Delphi中的Servers栏控件可以很容易开发OLE自动化控制器实现自动化服务器的调用,发挥Word的强大功能[1]。因此可以通过Delphi调用Word的功能实现此类格式的打印。 2? Delphi中的特殊格式打印实现过程 2.1 文档模板的设计 ??? 由于此类证书、证明文件都有一个通用模板,而Word恰恰提供了制作这种模板文件的功能,因此可以先在Word中设置好要打印的报表格式,包括某些字符的大小写、颜色、粗斜体和下划线的设置、某些字符的缩进处理等。然后把下划线字符用空格替代,再利用Word的”插入|批注”菜单,在所有空格位置(待填位置)按顺序插入批注,编辑完后,把该文件(此处命名为PrintTemplate)保存成文档模板(*.dot)。 2.2 打印实现 ??? 以打印图1为例,在Delphi新建一个应用程序,窗体命名为FrmPrint,界面如图2所示。其中出生日期对应的三个SpinEdit控件名为:SEBirth_Year,SEBirth_Mon,SEBirth_Day,入学年月对应的两个SpinEdit控件为:SEEntr_Year,SEEntr_Mon,毕业年月对应的两个SpinEdit控件名为:SEGrad_Year,SEGrad_Mon,学制对应的SpinEdit控件名为:SEAcad_Year。专业对应的ComboBox控件名为:CbBox_Major,数据可以在启动窗体时从专业数据库表中获取。设置SEBirth_Year, SEEntr_Year, SEGrad_Year的MaxValue属性值均为2100,MinValue属性值均为1900,Value值分别为1976、1980、1990。设置SEBirth_Mon,SEEntr_Mon,SEGrad_Mon的MaxValue属性值均为12,MinValue属性值均为1,Value值均为1,设置SEBirth_Day的MaxValue属性值为31,MinValue属性值为1,Value值为1,设置SEAcad_Year的MaxValue属性值为9,MinValue属性值1,Value值为3。并在设计界面上添加四个Edit控件,命名如图2所示, Button控件BtnPrint,一个RadioGroup控件RGSex,若干标签控件。最后添加位于Servers组件面板的WordApplication控件WordApp和WordDocument控件WordDoc。WordApplication的OnWindowSelectionChange事件提供了在Word上选择内容改变时可以做的工作,可以使用这个事件随时捕获Word选择的改变[2]。以及Dialogs组件面板的OpenDialog控件OpenDlg。 ????? SEAcad_Year?????? 图2 特殊格式报表打印设计界面 ??? 利用Delphi调用Word实现特殊格式报表打印的过程如图3所示: 图3 打印实现过程 ??? 初始化Word,是要利用TWordApplication控件启动Word并建立同Word的连接,利用TWordDocument实现建立Word文件对象,关联文档模板,并获取文档的批注总数把它保存在integer型全局变量Ptotal中。这可以通过自定义过程WordInitialize(Template:OleVariant)来实现。代码如下: procedure TFrmPrint. Wo

文档评论(0)

1亿VIP精品文档

相关文档