在c++builder中自定义预览窗口

上传人:第*** 文档编号:32828081 上传时间:2018-02-12 格式:DOC 页数:4 大小:27.50KB
返回 下载 相关 举报
在c++builder中自定义预览窗口_第1页
第1页 / 共4页
在c++builder中自定义预览窗口_第2页
第2页 / 共4页
在c++builder中自定义预览窗口_第3页
第3页 / 共4页
在c++builder中自定义预览窗口_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《在c++builder中自定义预览窗口》由会员分享,可在线阅读,更多相关《在c++builder中自定义预览窗口(4页珍藏版)》请在金锄头文库上搜索。

1、在 C+Builder 中自定义预览窗口Borland C Builder 是基于 C语言的可视化编程环境,它提供了可重用组件库和一系列 RAD 设计工具,使得编程者只需用少量的手工代码就可以创建出高效的 Windows 应用程序,尤其是复杂的数据库访问应用程序,因此深受软件开发人员的喜爱。 在开发数据库访问应用程序时,会经常涉及到报表的打印问题。C Builder 中提供了 Quick Report(快速报表)组件供编程人员设计报表。Quick Report 是挪威的 QuSoft AS 公司专门为 C Builder 设计的用于制作报表的一组控件,在 C Builder 中关于 Quick

2、 Report 的帮助文档不是很详细。另外它与 C Builder 的其他控件的风格也不太一致。直接使用 Quick Report 的报表预览功能总是不能达到令人满意的效果,因此有必要自定义快速报表的预览窗口。 设置预览窗口 新建工程,在 Form1 窗体上添加一个 ToolBar 控件,并在其上添加以下按钮:“打印” 、 “打印设置” 、 “上一页” 、 “下一页” 、 “放大” 、 “缩小”和“关闭” 。 在 Form1 窗体上添加一个 Panel 控件,对齐方式设为 alBottom,再在此 Panel 控件上添加一个 ProgressBar 控件(对齐方式设为 alLeft)和一个 P

3、anel 控件(Name 为 Panel2,对齐方式设为 alRight,BevelOuter 设为 bvLowered),这两个控件分别用来显示报表装载进度和其他提示信息。在 Form1 窗体上添加一个 QRPreview 控件,对齐方式设为 alClient。再新建一个窗体,设其 Name 为 Form2, 在该窗体上添加 TQuickRep 控件,设其 Name 为 QuickRep1,其 PrinterSetting 中的 Units 属性设为 mm(以毫米为计量单位) ,然后建立报表。 编程实现 1.在 Form2 上选择 QuickRep1,在其事件中选择 OnPreview,输入

4、以下代码: Form1QRPreview1QRPrinter=Form2QuickRep1QRPrinter; 2.在 Form1 的头文件中找到对象 TForm1 的定义,在其中添加以下的代码: int OldPaperSize; int OldOrientation; int OldTop; int OldBottom; int OldLeft; int OldRight; void RefreshPanel(); 3.选择 Form1 的 Activate 事件,输入以下代码: /初始化 OldPaperSize=Form2QuickRep1PagePaperSize; OldOrien

5、tation=Form2QuickRep1Page Orientation1; OldLeft=Form2QuickRep1PageLeftMargin 100; OldRight=Form2QuickRep1Page RightMargin100; OldTop=Form2 QuickRep1Page Top Margin 100; OldBottom=Form2QuickRep1Page BottomMargin100; Form2QuickRep1Prepare(); RefreshPanel(); Form2QuickRep1Preview(); 4.在 Form1 中添加更新提示代码

6、: void TForm1:RefreshPanel() /更新提示信息 Panel2 Caption=“第”IntToStr(Form1QRPreview1 PageNumber)“页”“共” IntToStr(Form2QuickRep1PageNumber)“页”; 5.从 Form1 中选择 QRPreview1,在其事件中选择 OnProgressUpdate,输入以下代码: /显示报表装载进度 ProgressBar1Position=Progress; RefreshPanel(); 6.打印: Form2QuickRep1Print(); 7.打印设置: DEVMODE pDe

7、v; LPPAGESETUPDLG mylp=new PAGESETUPDLG; memset(void )mylp,0,sizeof (PAGESETUPDLG); mylplStructSize=sizeof(PAGESETUPDLG); mylphwndOwner=this Handle; mylpFlags=PSD_RETURNDEFAULT; PageSetupDlg( mylp ); if (mylp hDevMode!=NULL) pDev=(DEVMODE )GlobalLock(mylphDevMode); pDevdmPaperSize =OldPaperSize; pDe

8、vdmOrientation =OldOrientation; mylprtMargin.left =OldLeft; mylprtMargin.right =OldRight; mylprtMargin.top =OldTop; mylprtMargin.bottom=OldBottom; GlobalUnlock(mylphDevMode); mylpFlags=PSD_MARGINS| PSD_INHUNDREDTHSOFMILLIMETERS; if(PageSetupDlg(mylp) pDev=(DEVMODE )GlobalLock (mylphDevMode); OldPape

9、rSize =pDevdmPaperSize; if(OldPaperSize28)OldPaperSize=9;/A4 OldOrientation=pDevdmOrientation; OldLeft =mylprtMargin.left; OldRight =mylprtMargin.right; OldTop =mylprtMargin.top; OldBottom =mylprtMargin.bottom; Form2QuickRep1PageOrientation =OldOrientation1; Form2QuickRep1PagePaperSize =OldPaperSize

10、; Form2QuickRep1PageLeftMargin =OldLeft/100; Form2QuickRep1PageRightMargin =OldRight/100; Form2QuickRep1PageTopMargin =OldTop/100; Form2QuickRep1PageBottom Margin=OldBottom/100; GlobalUnlock(mylphDevMode); GlobalFree(mylphDevMode); delete mylp; QRPreview1PageNumber=1; Form2QuickRep1Prepare(); Form2Q

11、uickRep1Preview(); 8.向上翻页: /上一页 if(QRPreview1PageNumber 1) QRPreview1PageNumber; RefreshPanel(); 9.向下翻页: /下一页 if(QRPreview1PageNumber QuickRep1PageNumber) QRPreview1PageNumber; RefreshPanel(); 10.放大处理: /放大 if(QRPreview1ZoomZoom=5; 11.缩小处理: /缩小 if(QRPreview1Zoom5) QRPreview1Zoom=5; 小 结 该方法的核心是使用了 Win32 API 函数 PageSetupDlg(),利用该函数可以获取页面设置的缺省值,包括纸张大小、打印方向以及上下左右空白边的大小等,也可以弹出页面设置对话框来修改这些值。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 工程造价

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号