📄 20010714001.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>在C ++ Builder中自定义预览窗口</TITLE>
<META content="text/html; charset=gb2312" http-equiv=Content-Type>
<META content="Microsoft FrontPage 4.0" name=GENERATOR></HEAD>
<BODY aLink=#ff0000 bgColor=#ffffff leftMargin=0 link=#187800 topMargin=0
vLink=#990099>
<DIV align=center>
<TABLE border=0 cellPadding=0 cellSpacing=0 height=76 width=744>
<TBODY>
<TR>
<TD>
<TABLE align=center width=680>
<TBODY>
<TR>
<TD align=middle><BR>
<H2 align=center><FONT size=3>在C ++
Builder中自定义预览窗口</FONT></H2><BR><B>装备指挥技术学院 林华君 鲜思德</B>
</TD></TR></TBODY></TABLE><BR>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>Borland C++
Builder是基于C++语言的可视化编程环境,它提供了可重用组件库和一系列RAD设计工具,使得编程者只需用少量的手工代码就可以创建出高效的Windows应用程序,尤其是复杂的数据库访问应用程序,因此深受软件开发人员的喜爱。</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>在开发数据库访问应用程序时,会经常涉及到报表的打印问题。C++ Builder中提供了Quick
Report(快速报表)组件供编程人员设计报表。Quick Report是挪威的QuSoft AS公司专门为C++
Builder设计的用于制作报表的一组控件,在C++ Builder中关于Quick Report的帮助文档不是很详细。另外它与C++
Builder的其他控件的风格也不太一致。直接使用Quick
Report的报表预览功能总是不能达到令人满意的效果,因此有必要自定义快速报表的预览窗口。</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14><B>设置预览窗口</B></TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD
class=a14>新建工程,在Form1窗体上添加一个ToolBar控件,并在其上添加以下按钮:“打印”、“打印设置”、</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>“上一页” 、“下一页”、“放大”、“缩小”和“关闭”。
在Form1窗体上添加一个Panel控件,对齐方式设为alBottom,再在此Panel控件上添加一个ProgressBar控件(对齐方式设为alLeft)和一个Panel控件(Name
为Panel2,对齐方式设为alRight,BevelOuter设为bvLowered),这两个控件分别用来显示报表装载进度和其他提示信息。在Form1窗体上添加一个QRPreview控件,对齐方式设为alClient。Form1窗体的外观如图1所示:</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD align=middle class=a14 height=19><IMG height=206
src="images/01_6_29_3.jpg" width=300
tppabs="http://www.info365.com.cn/develop/bcb/img/01_6_29_3.jpg">
</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD align=middle class=a14>图1 自定义快速报表的预览窗口</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>再新建一个窗体,设其Name为Form2,
在该窗体上添加TQuickRep控件,设其Name为QuickRep1,其PrinterSetting中的Units属性设为mm(以毫米为计量单位),然后建立报表。</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14><B>编程实现</B></TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD
class=a14>1.在Form2上选择QuickRep1,在其事件中选择OnPreview,输入以下代码:</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD
class=a14>Form1->QRPreview1->QRPrinter=Form2->QuickRep1->QRPrinter;</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD
class=a14>2.在Form1的头文件中找到对象TForm1的定义,在其中添加以下的代码:</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>int OldPaperSize;</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>int OldOrientation;</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>int OldTop;</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>int OldBottom;</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>int OldLeft;</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>int OldRight;</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>void RefreshPanel();</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>3.选择Form1的Activate事件,输入以下代码:</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>//初始化</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD
class=a14>OldPaperSize=Form2->QuickRep1->Page->PaperSize;</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD
class=a14>OldOrientation=Form2->QuickRep1->Page->Orientation+1;</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD
class=a14>OldLeft=Form2->QuickRep1->Page->LeftMargin*100;</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD
class=a14>OldRight=Form2->QuickRep1->Page-></TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>RightMargin*100;</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD
class=a14>OldTop=Form2->QuickRep1->Page->Top</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>Margin*100;</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD
class=a14>OldBottom=Form2->QuickRep1->Page-></TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>BottomMargin*100;</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>Form2->QuickRep1->Prepare();</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>RefreshPanel();</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>Form2->QuickRep1->Preview();</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>4.在Form1中添加更新提示代码:</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>void TForm1::RefreshPanel()</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>{ //更新提示信息</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD
class=a14>Panel2->Caption=“第”+IntToStr(Form1->QRPreview1->PageNumber)+“页”+“共”
+
IntToStr(Form2->QuickRep1->PageNumber)+“页”;</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>}</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD
class=a14>5.从Form1中选择QRPreview1,在其事件中选择OnProgressUpdate,输入以下代码:</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>//显示报表装载进度</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD
class=a14>ProgressBar1->Position=Progress;</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>RefreshPanel();</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>6.打印:</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>Form2->QuickRep1->Print();</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>7.打印设置:</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>DEVMODE *pDev;</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>LPPAGESETUPDLG mylp=new
PAGESETUPDLG;</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>memset((void *)mylp,0,sizeof</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>(PAGESETUPDLG));</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD
class=a14>mylp->lStructSize=sizeof(PAGESETUPDLG);</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD
class=a14>mylp->hwndOwner=this->Handle;</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
<TBODY>
<TR>
<TD class=a14>mylp->Flags=PSD_RETURNDEFAULT;</TD></TR></TBODY></TABLE>
<TABLE align=center width=620>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -