Chinaunix首页 | 论坛 | 博客
  • 博客访问: 16495270
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 20:46:54

下载本文示例代码
 ?uickReport2.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事件,输入如下代码: procedure TRptForm.RptFormPreview(Sender: TObject); begin with TMyPreview.Create(Application) do begin QRPreview1.QRPrinter := TQRPrinter(Sender); CurRep := self; Show; end; end; 附各成员方法的具体实现: unit Myprv; 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 { Private declarations } FPageCount : integer; // 生成报表的总页数 public { Public declarations } CurRep : TQuickRep; // 所预览的报表 procedure UpdatePanelShow; end; implementation {$R *.DFM} procedure TMyPreview.UpdatePanelShow; begin // 更新显示 Panel2.Caption := 第 inttostr(QRPreview1.PageNumber) end; procedure TMyPreview.ToolButton2Click(Sender: TObject); begin //ZoomToFit 缩放至全屏 QRPreview1.ZoomToFit; end; procedure TMyPreview.ToolButton3Click(Sender: TObject); begin //ZoomTo100% 缩放至实际大小 QRPreview1.Zoom:=100; end; procedure TMyPreview.ToolButton4Click(Sender: TObject); begin //ZoomToWidth 缩放至页宽 QRPreview1.ZoomToWidth; end; procedure TMyPreview.ToolButton6Click(Sender: TObject); begin //First page QRPreview1.PageNumber := 1; UpdatePanelShow; end; procedure TMyPreview.ToolButton8Click(Sender: TObject); begin //prior page QRPreview1.PageNumber := QRPreview1.PageNumber 1; UpdatePanelShow; end; procedure TMyPreview.ToolButton7Click(Sender: TObject); begin //next page QRPreview1.PageNumber := QRPreview1.PageNumber-1; if QRPreview1.PageNumber =0 then QRPreview1.PageNumber:=1; UpdatePanelShow; end; procedure TMyPreview.ToolButton9Click(Sender: TObject); begin //Last page QRPreview1.PageNumber := FPageCount; UpdatePanelShow; end; procedure TMyPreview.QRPreview1PageAvailable(Sender: TObject; PageNum: Integer); begin //get pagecount FPageCount := PageNum ; UpdatePanelShow; end; procedure TMyPreview.FormClose (Sender: TObject; var Action: TCloseAction); begin CurRep := nil; Action := caFree; end; procedure TMyPreview.ToolButton14Click(Sender: TObject); begin //close the window Close; end; procedure TMyPreview.ToolButton11Click(Sender: TObject); begin //print setup QRPreview1.QRPrinter.PrintSetup; end; procedure TMyPreview.ToolButton13Click(Sender: TObject); begin //print QRPreview1.QRPrinter.Print; end; procedure TMyPreview.ToolButton16Click(Sender: TObject); begin //save button if SaveDlg1.Execute then begin if (SaveDlg1.FIlterIndex $#@60;$#@62;1)and(CurRep = nil)then Exit; case SaveDlg1.FilterINdex of //--*.QR 1: QRPreview1.QRPrinter.Save(SaveDlg1.FileName); //--*.TXT 2: CurRep.ExportToFilter (TQRAsciiExportFilter.Create(SaveDlg1.FileName)); //--*.HTM 3: CurRep.ExportToFilter (TQRHTMLExportFilter.Create(SaveDlg1.FileName)); //--*.CSV 4: CurRep.ExportToFilter (TQRCSVExportFilter.Create(SaveDlg1.FileName)); end; end; end; procedure TMyPreview.ToolButton17Click(Sender: TObject); begin //load button if OpenDlg1.Execute then QRPreview1.QRPrinter.Load(OpenDlg1.FileName); end; procedure TMyPreview.QRPreview1 ProgressUpdate(Sender: TObject; Progress: Integer); begin //updage progress bar ProgressBar1.Position := Progress; end; procedure TMyPreview.SaveDlg1TypeChange(Sender: TObject); begin //set DefaultExt property of Savedialog with SaveDlg1 do case FilterIndex of 0: DefaultExt := .QR; 1: DefaultExt := .TXT; 2: DefaultExt := .HTM; 3: DefaultExt := .CSV; end; end; end.//end of Unit   以上程序在WindowsNT4.0中文版(ServicePack3),Delphi3.0环境下调试通过。  ?uickReport2.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事件,输入如下代码: procedure TRptForm.RptFormPreview(Sender: TObject); begin with TMyPreview.Create(Application) do begin QRPreview1.QRPrinter := TQRPrinter(Sender); CurRep := self; Show; end; end; 附各成员方法的具体实现: unit Myprv; 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 { Private declarations } FPageCount : integer; // 生成报表的总页数 public { Public declarations } CurRep : TQuickRep; // 所预览的报表 procedure UpdatePanelShow; end; implementation {$R *.DFM} procedure TMyPreview.UpdatePanelShow; begin // 更新显示 Panel2.Caption := 第 inttostr(QRPreview1.PageNumber) end; procedure TMyPreview.ToolButton2Click(Sender: TObject); begin //ZoomToFit 缩放至全屏 QRPreview1.ZoomToFit; end; procedure TMyPreview.ToolButton3Click(Sender: TObject); begin //ZoomTo100% 缩放至实际大小 QRPreview1.Zoom:=100; end; procedure TMyPreview.ToolButton4Click(Sender: TObject); begin //ZoomToWidth 缩放至页宽 QRPreview1.ZoomToWidth; end; procedure TMyPreview.ToolButton6Click(Sender: TObject); begin //First page QRPreview1.PageNumber := 1; UpdatePanelShow; end; procedure TMyPreview.ToolButton8Click(Sender: TObject); begin //prior page QRPreview1.PageNumber := QRPreview1.PageNumber 1; UpdatePanelShow; end; procedure TMyPreview.ToolButton7Click(Sender: TObject); begin //next page QRPreview1.PageNumber := QRPreview1.PageNumber-1; if QRPreview1.PageNumber =0 then QRPreview1.PageNumber:=1; UpdatePanelShow; end; procedure TMyPreview.ToolButton9Click(Sender: TObject); begin //Last page QRPreview1.PageNumber := FPageCount; UpdatePanelShow; end; procedure TMyPreview.QRPreview1PageAvailable(Sender: TObject; PageNum: Integer); begin //get pagecount FPageCount := PageNum ; UpdatePanelShow; end; procedure TMyPreview.FormClose (Sender: TObject; var Action: TCloseAction); begin CurRep := nil; Action := caFree; end; procedure TMyPreview.ToolButton14Click(Sender: TObject); begin //close the window Close; end; procedure TMyPreview.ToolButton11Click(Sender: TObject); begin //print setup QRPreview1.QRPrinter.PrintSetup; end; procedure TMyPreview.ToolButton13Click(Sender: TObject); begin //print QRPreview1.QRPrinter.Print; end; procedure TMyPreview.ToolButton16Click(Sender: TObject); begin //save button if SaveDlg1.Execute then begin if (SaveDlg1.FIlterIndex $#@60;$#@62;1)and(CurRep = nil)then Exit; case SaveDlg1.FilterINdex of //--*.QR 1: QRPreview1.QRPrinter.Save(SaveDlg1.FileName); //--*.TXT 2: CurRep.ExportToFilter (TQRAsciiExportFilter.Create(SaveDlg1.FileName)); //--*.HTM 3: CurRep.ExportToFilter (TQRHTMLExportFilter.Create(SaveDlg1.FileName)); //--*.CSV 4: CurRep.ExportToFilter (TQRCSVExportFilter.Create(SaveDlg1.FileName)); end; end; end; procedure TMyPreview.ToolButton17Click(Sender: TObject); begin //load button if OpenDlg1.Execute then QRPreview1.QRPrinter.Load(OpenDlg1.FileName); end; procedure TMyPreview.QRPreview1 ProgressUpdate(Sender: TObject; Progress: Integer); begin //updage progress bar ProgressBar1.Position := Progress; end; procedure TMyPreview.SaveDlg1TypeChange(Sender: TObject); begin //set DefaultExt property of Savedialog with SaveDlg1 do case FilterIndex of 0: DefaultExt := .QR; 1: DefaultExt := .TXT; 2: DefaultExt := .HTM; 3: DefaultExt := .CSV; end; end; end.//end of Unit   以上程序在WindowsNT4.0中文版(ServicePack3),Delphi3.0环境下调试通过。 下载本文示例代码


自定义快速报表的打印预览窗口自定义快速报表的打印预览窗口自定义快速报表的打印预览窗口自定义快速报表的打印预览窗口自定义快速报表的打印预览窗口自定义快速报表的打印预览窗口自定义快速报表的打印预览窗口自定义快速报表的打印预览窗口自定义快速报表的打印预览窗口自定义快速报表的打印预览窗口自定义快速报表的打印预览窗口自定义快速报表的打印预览窗口自定义快速报表的打印预览窗口自定义快速报表的打印预览窗口自定义快速报表的打印预览窗口
阅读(129) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~