龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

自定义快速报表的打印预览窗口

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
QuickReport2.0中提供的默 认打印预览窗口是英文界面的,假如开发的中文软件中带有这种英文显示, 不免有些小小的缺憾。因此有必要实现中文界面的打印预览窗口。但是Delphi提供的源代

  QuickReport2.0中提供的默 认打印预览窗口是英文界面的,假如开发的中文软件中带有这种英文显示, 不免有些小小的缺憾。因此有必要实现中文界面的打印预览窗口。但是Delphi提供的源代码中并没有打印预览窗口.PAS源文件,这就无法直接修改源 码,只能全部自己编程实现。经多次实践,笔者模拟实现了与默认预览窗口外观类似,功能相同的打印预览窗口。步骤如下:

  1.新建一个窗体,设置Name为MyPreview。

  2.在窗体上添加一Toolbar控件, 模拟默认预览窗口创建相应的Toolbutton,并设置各按钮的Hint提示。

  3.添加一Panel控件,对齐方式置 为alBottom。再在此Panel上放一ProgressBar(左对齐)和Panel(右对齐), 分别显示报表装载进度和其他提示信息。

  4.添加QRPreview控件,对齐方式 置为alClient。

  5.添加OpenDialog,设置Filter 属性为*.QR;添加SaveDialog,设置Filter属性为*.QR*.TXT*.HTM*.CSV, 设置DefaultExt属性为*.QR。

  6.双击各个Toolbutton,输入相 应代码。

  可以按以下方法调用自定义预览 窗口。

重载TQuickRep的OnPreview事件, 输入如下代码:

procedureTRptForm.RptFormPreview(Sender:TObject);

  begin

  withTMyPreview.Create(Application)do

  begin

  QRPreview1.QRPrinter:=TQRPrinter(Sender);

  CurRep:=self;

  Show;

  end;

  end;

  

附各成员方法的具体实现:

unitMyprv;

  interface

  uses

  Windows,Messages,SysUtils,Classes,Graphics,Controls, Forms,Dialogs,ComCtrls,ToolWin,qrprntr,Quickrpt,StdCtrls, ExtCtrls,qrextra,qrHtml;

  

  type

  TMyPreview=class(TForm)

  QRPreview1:TQRPreview;

  ToolBar1:TToolBar;

  (其余成员变量和成员方法声明略。)

  private

  {Privatedeclarations}

  FPageCount:integer;// 生成报表的总页数

  public

  {Publicdeclarations}

  CurRep:TQuickRep; //所预览的报表

  procedureUpdatePanelShow;

  end;

  

  implementation

  

  {$R*.DFM}

  procedureTMyPreview.UpdatePanelShow;

  begin//更新显示

  Panel2.Caption:=第+inttostr(QRPreview1. eNumber)+ 页总+inttostr(FPageCount)+页;

  end;

  

  procedureTMyPreview.ToolButton2Click(Sender:TObject);

  begin//ZoomToFit缩放至全屏

  QRPreview1.ZoomToFit;

  end;

  

  procedureTMyPreview.ToolButton3Click(Sender:TObject);

  begin//ZoomTo100%缩放至实际大小

  QRPreview1.Zoom:=100;

  end;

  

  procedureTMyPreview.ToolButton4Click(Sender:TObject);

  begin//ZoomToWidth缩放至页宽

  QRPreview1.ZoomToWidth;

  end;

  

  procedureTMyPreview.ToolButton6Click(Sender:TObject);

  begin//Firstpage

  QRPreview1.PageNumber:=1;

  UpdatePanelShow;

  end;

  

  procedureTMyPreview.ToolButton8Click(Sender:TObject);

  begin//priorpage

  QRPreview1.PageNumber:=QRPreview1.PageNumber+1;

  UpdatePanelShow;

  end;

  

  procedureTMyPreview.ToolButton7Click(Sender:TObject);

  begin//nextpage

  QRPreview1.PageNumber:=QRPreview1.PageNumber1;

  ifQRPreview1.PageNumber=0then

  QRPreview1.PageNumber:=1;

  UpdatePanelShow;

  end;

  

  procedureTMyPreview.ToolButton9Click(Sender:TObject);

  begin//Lastpage

  QRPreview1.PageNumber:=FPageCount;

  UpdatePanelShow;

  end;

  

  procedureTMyPreview.QRPreview1PageAvailable(Sender:TObject; PageNum:Integer);

  begin//getpagecount

  FPageCount:=PageNum;

  UpdatePanelShow;

  end;

  

  procedureTMyPreview.FormClose(Sender:TObject;varAction:TCloseAction);

  begin

  CurRep:=nil;

  Action:=caFree;

  end;

  

  procedureTMyPreview.ToolButton14Click(Sender:TObject);

  begin//closethewindow

  Close;

  end;

  

  procedureTMyPreview.ToolButton11Click(Sender:TObject);

  begin//printsetup

  QRPreview1.QRPrinter.PrintSetup;

  end;

  

  procedureTMyPreview.ToolButton13Click(Sender:TObject);

  begin//print

  QRPreview1.QRPrinter.Print;

  end;

  

  procedureTMyPreview.ToolButton16Click(Sender:TObject);

  begin//savebutton

  ifSaveDlg1.Executethen

  begin

  if(SaveDlg1.FIlterIndex $#@60;$#@62;1)and(CurRep=nil)then

  Exit;

  caseSaveDlg1.FilterINdexof

  1://*.QR

  QRPreview1.QRPrinter.Save(SaveDlg1.FileName);

  2://*.TXT

  CurRep.EXPortToFilter(TQRAsciiExportFilter.Create(SaveDlg1.FileName));

  3://*.HTM

  CurRep.ExportToFilter(TQRHTMLExportFilter.Create(SaveDlg1.FileName));

  4: //*.CSV

  CurRep.ExportToFilter(TQRCSVExportFilter.Create(SaveDlg1.FileName));

  end;

  end;

  end;

  

  procedureTMyPreview.ToolButton17Click(Sender:TObject);

  begin//loadbutton

  ifOpenDlg1.Executethen

  QRPreview1.QRPrinter.Load(OpenDlg1.FileName);

  end;

  

  procedureTMyPreview.QRPreview1ProgressUpdate(Sender:TObject; Progress:Integer);

  begin//updageprogressbar

  ProgressBar1.Position:=Progress;

  end;

  

  procedureTMyPreview.SaveDlg1TypeChange(Sender:TObject);

  begin//setDefaultExtpropertyofSavedialog

  withSaveDlg1do

  caseFilterIndexof

  0: DefaultExt:=.QR;

  1: DefaultExt:=.TXT;

  2: DefaultExt:=.HTM;

  3: DefaultExt:=.CSV;

  end;

  end;

  end.//endofUnit

  

  

精彩图集

赞助商链接