请教报表控件QRpreview与QuickRep之间的关系! 偶想做一个可以支持各种显示比例的预览打印程序,需重载QuickRep的preview事件,所以想到用QRpreview,但不知QRpreview与QuickRep之间的关系,如何将两者关联起来,如何动态生成各种Qrband及相关Qrbalel等控件? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 qrpreview的功用就是提供给用户做自己的预览界面用的时候就在quickrep的onpreview事件中做:qrpreview.qrprinter := quickrep.qrprinter;即可 如果说偶用quickrep设计好一份报表,在预览时通过重载quickrep的onpreview事件就可以吗? 给你一个自定义报表预览窗体的例子,其中指定预览对象的语句如楼上所说就可以了unit ViewReport;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, CoolCtrls, ExtCtrls, QRPrntr, ComCtrls, ToolWin, ImgList, ActnList, Menus, QuickRpt, TFlatSpeedButtonUnit;type TfrmViewReport = class(TForm) QRPreview1: TQRPreview; ImageList1: TImageList; ControlBar1: TControlBar; ToolBar1: TToolBar; ToolButton3: TToolButton; ToolButton4: TToolButton; ToolButton5: TToolButton; ToolButton6: TToolButton; ToolButton7: TToolButton; ToolButton8: TToolButton; PopupMenu1: TPopupMenu; N501: TMenuItem; N1001: TMenuItem; N1201: TMenuItem; N1501: TMenuItem; N2001: TMenuItem; StatusBar1: TStatusBar; ToolButton1: TToolButton; ToolButton2: TToolButton; ToolButton11: TToolButton; Timer1: TTimer; N751: TMenuItem; procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure ToolButton3Click(Sender: TObject); procedure ToolButton4Click(Sender: TObject); procedure ToolButton7Click(Sender: TObject); procedure ToolButton8Click(Sender: TObject); procedure ToolButton5Click(Sender: TObject); procedure ToolButton6Click(Sender: TObject); //¸ù¾Ý¿Ø¼þµÄtagÉèÖ÷ŴóµÄ±ÈÀý procedure SetZoom(Sender: TObject); procedure ToolButton2Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } quickRep: TQuickRep; public { Public declarations } procedure Show(qRep: TQuickRep; str: String); reintroduce; overload; end;var frmViewReport: TfrmViewReport;implementation{$R *.DFM}procedure TfrmViewReport.Show(qRep: TQuickRep; str: String);begin quickRep := qRep; StatusBar1.Panels[0].Text := str; self.Show; Timer1.Enabled := true; quickRep.Preview;end;procedure TfrmViewReport.FormClose(Sender: TObject; var Action: TCloseAction);begin QRPreview1.QRPrinter := nil; quickRep := nil; Action := caFree; frmViewReport := nil;end;procedure TfrmViewReport.ToolButton3Click(Sender: TObject);begin quickRep.Print;end;procedure TfrmViewReport.ToolButton4Click(Sender: TObject);begin QRPreview1.QRPrinter.PrintSetup;end;procedure TfrmViewReport.ToolButton7Click(Sender: TObject);begin QRPreview1.Zoom := QRPreview1.Zoom + 10;end;procedure TfrmViewReport.ToolButton8Click(Sender: TObject);begin QRPreview1.Zoom := QRPreview1.Zoom - 10;end;procedure TfrmViewReport.ToolButton5Click(Sender: TObject);begin if QRPreview1.PageNumber > 1 then begin QRPreview1.PageNumber := QRPreview1.PageNumber - 1; StatusBar1.Panels[1].Text :='µÚ ' + IntToStr(QRPreview1.PageNumber) + ' Ò³ / ' + '¹² ' + IntToStr(quickRep.PageNumber) + ' Ò³'; end;end;procedure TfrmViewReport.ToolButton6Click(Sender: TObject);begin if QRPreview1.PageNumber < quickRep.PageNumber then begin QRPreview1.PageNumber := QRPreview1.PageNumber + 1; StatusBar1.Panels[1].Text :='µÚ ' + IntToStr(QRPreview1.PageNumber) + ' Ò³ / ' + '¹² ' + IntToStr(quickRep.PageNumber) + ' Ò³'; end;end;procedure TfrmViewReport.SetZoom(Sender: TObject);begin QRPreview1.Zoom := TMenuItem(Sender).tag;;end;procedure TfrmViewReport.ToolButton2Click(Sender: TObject);begin Close;end;procedure TfrmViewReport.Timer1Timer(Sender: TObject);begin StatusBar1.Panels[1].Text :='µÚ ' + IntToStr(QRPreview1.PageNumber) + ' Ò³ / ' + '¹² ' + IntToStr(quickRep.PageNumber) + ' Ò³'; Timer1.Enabled := false;end;procedure TfrmViewReport.FormCreate(Sender: TObject);begin ScaleBy(Screen.Width, 800);end;end. 并不需要重载onpreview事件,只要在onpreview中把qrpriter交给qrpreview处理就可以了。这样做的好处是整个预览界面完全可以由自己设计,而不要使用quickrep提供的部分。代码可以参考楼上的 TO:ihihonline(小小->不要再流浪!!) 在哪儿。另问一个问题,如果偶想用画布自已画那各特宽报表,如何处理,如何分页!,我另开一个,答者有分,本贴结帐。 如何hook textout? 新手求教简单问题。分不高。能帮忙的进来看看。。 求:移动硬盘序列号不是硬盘U盘的 QGraphics 与 Graphics 有什么区别 大家帮我看看这是什么原因?我应该怎么做? delphi服务求助 IdHTTP下载文件,怎么加个进度条? 请问在turbo pascal中怎么把字节变量写到文件中去!! .rar,是什么格式的,用什么解压,那里有下载! 怎么解决delphi和excel 防止修改目录名称 连接SQLServer2000数据库连接被拒绝
用的时候就在quickrep的onpreview事件中做:
qrpreview.qrprinter := quickrep.qrprinter;
即可
unit ViewReport;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, CoolCtrls, ExtCtrls, QRPrntr, ComCtrls, ToolWin, ImgList,
ActnList, Menus, QuickRpt, TFlatSpeedButtonUnit;type
TfrmViewReport = class(TForm)
QRPreview1: TQRPreview;
ImageList1: TImageList;
ControlBar1: TControlBar;
ToolBar1: TToolBar;
ToolButton3: TToolButton;
ToolButton4: TToolButton;
ToolButton5: TToolButton;
ToolButton6: TToolButton;
ToolButton7: TToolButton;
ToolButton8: TToolButton;
PopupMenu1: TPopupMenu;
N501: TMenuItem;
N1001: TMenuItem;
N1201: TMenuItem;
N1501: TMenuItem;
N2001: TMenuItem;
StatusBar1: TStatusBar;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
ToolButton11: TToolButton;
Timer1: TTimer;
N751: TMenuItem;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure ToolButton3Click(Sender: TObject);
procedure ToolButton4Click(Sender: TObject);
procedure ToolButton7Click(Sender: TObject);
procedure ToolButton8Click(Sender: TObject);
procedure ToolButton5Click(Sender: TObject);
procedure ToolButton6Click(Sender: TObject);
//¸ù¾Ý¿Ø¼þµÄtagÉèÖ÷ŴóµÄ±ÈÀý
procedure SetZoom(Sender: TObject);
procedure ToolButton2Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
quickRep: TQuickRep;
public
{ Public declarations }
procedure Show(qRep: TQuickRep; str: String); reintroduce; overload;
end;var
frmViewReport: TfrmViewReport;implementation
{$R *.DFM}
procedure TfrmViewReport.Show(qRep: TQuickRep; str: String);
begin
quickRep := qRep;
StatusBar1.Panels[0].Text := str;
self.Show;
Timer1.Enabled := true;
quickRep.Preview;
end;procedure TfrmViewReport.FormClose(Sender: TObject; var Action: TCloseAction);
begin
QRPreview1.QRPrinter := nil;
quickRep := nil;
Action := caFree;
frmViewReport := nil;
end;procedure TfrmViewReport.ToolButton3Click(Sender: TObject);
begin
quickRep.Print;
end;procedure TfrmViewReport.ToolButton4Click(Sender: TObject);
begin
QRPreview1.QRPrinter.PrintSetup;
end;procedure TfrmViewReport.ToolButton7Click(Sender: TObject);
begin
QRPreview1.Zoom := QRPreview1.Zoom + 10;
end;procedure TfrmViewReport.ToolButton8Click(Sender: TObject);
begin
QRPreview1.Zoom := QRPreview1.Zoom - 10;
end;procedure TfrmViewReport.ToolButton5Click(Sender: TObject);
begin
if QRPreview1.PageNumber > 1 then
begin
QRPreview1.PageNumber := QRPreview1.PageNumber - 1;
StatusBar1.Panels[1].Text :='µÚ ' + IntToStr(QRPreview1.PageNumber)
+ ' Ò³ / ' + '¹² ' + IntToStr(quickRep.PageNumber) + ' Ò³';
end;
end;procedure TfrmViewReport.ToolButton6Click(Sender: TObject);
begin
if QRPreview1.PageNumber < quickRep.PageNumber then
begin
QRPreview1.PageNumber := QRPreview1.PageNumber + 1;
StatusBar1.Panels[1].Text :='µÚ ' + IntToStr(QRPreview1.PageNumber)
+ ' Ò³ / ' + '¹² ' + IntToStr(quickRep.PageNumber) + ' Ò³';
end;end;procedure TfrmViewReport.SetZoom(Sender: TObject);
begin
QRPreview1.Zoom := TMenuItem(Sender).tag;;
end;procedure TfrmViewReport.ToolButton2Click(Sender: TObject);
begin
Close;
end;procedure TfrmViewReport.Timer1Timer(Sender: TObject);
begin
StatusBar1.Panels[1].Text :='µÚ ' + IntToStr(QRPreview1.PageNumber)
+ ' Ò³ / ' + '¹² ' + IntToStr(quickRep.PageNumber) + ' Ò³';
Timer1.Enabled := false;
end;procedure TfrmViewReport.FormCreate(Sender: TObject);
begin
ScaleBy(Screen.Width, 800);
end;end.
在哪儿。另问一个问题,如果偶想用画布自已画那各特宽报表,如何处理,如何分页!,我另开一个,答者有分,本贴结帐。