在C++Builder中自定义预览窗口
Borland C++ Builder是基于C++语言的可视化编程环境,它提供了可重用组件库和一系列RAD设计工具,使得编程者只需用少量的手工代码就可以创建出高效的Windows应用程序,尤其是复杂的数据库访问应用程序,因此深受软件开发人员的喜爱。 ,DV si/|D*C]z在开发数据库访问应用程序时,会经常涉及到报表的打印问题。C++ Builder中提供了Quick Report(快速报表)组件供编程人员设计报表。Quick Report是挪威的QuSoft AS公司专门为C++ Builder设计的用于制作报表的一组控件,在C++ Builder中关于Quick Report的帮助文档不是很详细。另外它与C++ Builder的其他控件的风格也不太一致。直接使用Quick Report的报表预览功能总是不能达到令人满意的效果,因此有必要自定义快速报表的预览窗口。 [0? }a0L
设置预览窗口 B.[?"?V(z-h
新建工程,在Form1窗体上添加一个ToolBar控件,并在其上添加以下按钮:“打印”、“打印设置”、 7iu ld)Ekj.TP
“上一页” 、“下一页”、“放大”、“缩小”和“关闭”。 在Form1窗体上添加一个Panel控件,对齐方式设为alBottom,再在此Panel控件上添加一个ProgressBar控件(对齐方式设为alLeft)和一个Panel控件(Name 为Panel2,对齐方式设为alRight,BevelOuter设为bvLowered),这两个控件分别用来显示报表装载进度和其他提示信息。在Form1窗体上添加一个QRPreview控件,对齐方式设为alClient。 B+I j"x|
-au yy o;X S'sl
再新建一个窗体,设其Name为Form2, 在该窗体上添加TQuickRep控件,设其Name为QuickRep1,其PrinterSetting中的Units属性设为mm(以毫米为计量单位),然后建立报表。 *uG:S*e3iP1@V3k-t
编程实现 #xb$K P*~\e
1.在Form2上选择QuickRep1,在其事件中选择OnPreview,输入以下代码: [!~ S%LSg9\_2m^
Form1->QRPreview1->QRPrinter=Form2->QuickRep1->QRPrinter; 'JN2kn*i5Chp
2.在Form1的头文件中找到对象TForm1的定义,在其中添加以下的代码: -~+kT:t0D6]7v_K
int OldPaperSize;
int OldOrientation; 9n`(B5yDHW h
int OldTop;
int OldBottom; 9B e"COU"n/ka
int OldLeft;
int OldRight;
void RefreshPanel(); 0rfF-g1IBk
3.选择Form1的Activate事件,输入以下代码: ,wf%g1w8Y
//初始化 S]s n$?i}
OldPaperSize=Form2->QuickRep1->Page->PaperSize; #s"P{S2pf7B-k
OldOrientation=Form2->QuickRep1->Page->Orientation+1;
OldLeft=Form2->QuickRep1->Page->LeftMargin*100; 2INy:P]0y[(MN
OldRight=Form2->QuickRep1->Page->
RightMargin*100;
OldTop=Form2->QuickRep1->Page->Top
Margin*100;
OldBottom=Form2->QuickRep1->Page-> }:W@WM+JV@Z-~
BottomMargin*100;
Form2->QuickRep1->Prepare(); +w$@URO)F} f5I
RefreshPanel();
Form2->QuickRep1->Preview(); DDx4Oh.P
4.在Form1中添加更新提示代码: HJO.dD*U)[
void TForm1::RefreshPanel() RL*V4z#l
{ //更新提示信息
Panel2->Caption=“第”+IntToStr(Form1->QRPreview1->PageNumber)+“页”+“共” + IntToStr(Form2->QuickRep1->PageNumber)+“页”; 9t/?A![%I,Sp(H
}
5.从Form1中选择QRPreview1,在其事件中选择OnProgressUpdate,输入以下代码: