- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
在C_Builder6中建立打印预览类TPreView
在 C+ + Builder 6 中建立打印预览类 T P reView
杨
勇
摘 要: 通过应用 Windows 打印相关的 API 函数, 在 C++Builder6 中构建一个打印预览类 TPre-
将打印编程进行封装,
提供类似于打印类 TPrinter 的接口, 从而简化了 C++Builder6 中的
View,
报表打印预览编程工作。
关键词:
打印预览;
报表;
C++Builder6
1 引言
对于数据库应用程序, 报表的打印和预览是必不可少的基 本 功 能 。 C++Builder 6 对打印工作提供了一套专门的控件组 Qreport[1], 对常规和比较简单的数据打印基本能够胜任 , 但是
实现要点
3
3.1 TPreView 的窗体
预览需要在窗 口 中 进 行 , 因 此 TPreView 类直接继承于窗 口类 TForm, 图 1 为打印预览的设计期窗口。
对于比较复杂的动 态 数 据 报 表 ,
虽然可以用动态生成 Qreport
控件的方式完成, 但是程序的复杂度大大增加, 失去了使用组
件简化编程的初衷。 大量使用控件对系统内存和资源的消耗也 不小。 在这种情况下, 直接用 BCB 提供的打印类 TPrinter 实现 数据的动态打印反而来得简便。 遗憾的是, C++Builder 6 没有 提供与之相配套的预览类, 给打印预览的编程工作带来困难 。 设计一个打印预览类 TPreView, 与 Tprinter 类结合使用, 可以 快速实现报表的预览打印功能。
2 设计思路
TpreView 没有设计成 VCL 组 件 。 如果设计为组件 , 使 用 者在使用之前要安装到 C++Builder6 集成开发环境中 , 增加了 使用难度, 也不便于扩充修改。 因此直接设计为类的形式, 应 用时直接加入 project 中 即 可 调 用 。 使用者还可以根据程序需 要具体修改源码。
为 了 让 TPreView 类的使用者快速掌握其用法 , TPreView 类的接口基本上模仿 TPrinter 类[2], 打印和打印预览两者完成 功能的主要区别是输出设备不同, 而两个类的工作方法基本一 致, 表 1 列出两个类的主要属性和方法。
表 1 Printer 与 TPreView 的主要属性和方法对比
TPreView 的 窗 口 主 要 由 ToolBar1 ( 工 具 栏 ) 、 ScrollBox
(带垂直滚动条的窗口组件 ) 、 StatusBar ( 状态栏) 3 个组 件 构 成 , 工 具 栏 ToolBar1 上主要有预览页 面 导 航 按 钮 、 打 印 按 钮 显示比例按钮等 。 展示预览图像的图元文 件以平铺的方式置 入一个 TImage 图 像 中, 为实现多页预览, Image 图 像 由 程 序 动
态 生 成 ,
每个预览页对应一个 Imag e, 然 后 显 示 Image 在
ScrollBox 中。
3.2 基本原理
实现预览的基本过程是: 将输入到打印机的图形输入到内 存中以图元文件形式存放, 再把图元文件显示到电脑屏幕上 。
预 览 图 形 采 用 Windows 操作系统下的增强型元文件 (EMF) ,
元文件与位图
(bitmap) 不同, 属于矢量图形, 以图形绘制命
令来描述图像, 因此可以对图像进行缩放而不失真, 而图像的
任意缩放是一个打印预览类必需的基本功能。 增强型图元文件 的生成和显示涉及以下几个 Windows API 函数[3]:
HDC CreateEnhMetaFile(
HDC hdcRef, // handle to a reference device context
类
属性或方法
TPrinter
TPreView
输出画板
Canvas
Canvas
打印/预览页面序号
PageNumber
PageNumber
打印/预览工作初始化
BeginDoc (void)
BeginViewDoc (void)
打印/预览输出结束
EndDoc (void)
EndViewDoc (void)
打印/预览换页
NewPage (void)
NewViewPage (void)
件句柄 hdcEMF 代入 ( 文中的图元文件均存于系统内 存 中 ) ,
函数返回一个作图已经完成的图元文件句柄 , 并 释 放 被 Cre-
ateEnhMetaFile 函数占用的设备描述表句柄。
图元文件绘图完毕 ,
输出:
接 下 来 用 PlayEnhMetaFile 函 数 进 行
这是一个生成增强型图元文件的 Window
文档评论(0)