嗯.....完整程序要求太高了吧? (我没做过专门的报表预览form或控件, 只在我做的程序中某个当前显示界面上放一个qrpreview)
只能给你一些代码片断(临时加了点注释希望你能看懂):
procedure TForm1.QRPreview1PageAvailable(Sender: TObject;
// qrpreview1.OnPageAvailable事件
PageNum: Integer);
begin
label1.caption := format('%d/%d',[qrpreview1.PageNumber, qrpreview1.QRPrinter.PageCount]);
// label1 显示 "当前页/总页数"
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
// speedbutton1 为显示第一页
begin
qrpreview1.PageNumber := 1;
QRPreview1PageAvailable(nil, 1);
end;
procedure TForm1.SpeedButton4Click(Sender: TObject);
// speedbutton4为"前一页"
begin
if qrpreview1.PageNumber>1 then
begin
qrpreview1.PageNumber := qrpreview1.PageNumber-1;
QRPreview1PageAvailable(nil, 0);
// 更新label1.caption
end;
end;
procedure TForm1.SpeedButton3Click(Sender: TObject);
// "后一页"
begin
if assigned(qrpreview1.qrprinter) then
if qrpreview1.pagenumber < qrpreview1.qrprinter.PageCount then
begin
qrpreview1.pagenumber := qrpreview1.PageNumber+1;
QRPreview1PageAvailable(nil, 0);
end;
end;
procedure TForm1.SpeedButton2Click(Sender: TObject);
// "最后一页"
begin
if assigned(qrpreview1.qrprinter) then
begin
qrpreview1.PageNumber := qrpreview1.QRPrinter.PageCount;
QRPreview1PageAvailable(nil, 0);
end;
end;
procedure TForm1.SpeedButton6Click(Sender: TObject);
// "打印机设置"
begin
// TTinyOutlookBar是Another_eYes大虾写的一个类似outlookbar的pagecontrol控件, 动画切换哦。
// 我在各个页面上上放了不同的控制各个报表生成条件的东东(edit啦,listbox啦,combobox啦,
// 当然也是another_eYes大虾的控件)
if tinyoutlookbar3.Actived then
form2.QuickRep1.PrinterSetup
else
if tinyoutlookbar7.Actived then
form2.QuickRep2.PrinterSetup
else
if tinyoutlookbar4.actived then
form3.QuickRep1.PrinterSetup
else
if tinyoutlookbar5.Actived then
form3.QuickRep2.PrinterSetup;
end;
procedure TForm1.SpeedButton5Click(Sender: TObject);
// "打印"
begin
if assigned(qrpreview1.qrprinter) then
begin
speedbutton5.enabled := false;
qrpreview1.QRPrinter.Print;
speedbutton5.enabled := true;
end;
end;
procedure TForm1.SpeedButton8Click(Sender: TObject);
// "缩小显示模式"
begin
qrpreview1.ZoomToFit;
end;
procedure TForm1.SpeedButton7Click(Sender: TObject);
// 全真显示模式
begin
qrpreview1.Zoom := 100;
end;
procedure TForm1.TinyBrightBtn4Click(Sender: TObject);
// 某个page上的"执行"按钮
// TTinyBrightBtn是一个类似speedbutton的控件,不同的是鼠标移上去时出现的不是一个突出来的方框,
// 而是沿图片和文字边缘出现一圈光晕, 点击时文字和图片下陷并且光晕加大加深
begin
killpreview;
form2.QuickRep1.Preview;
end;
procedure TForm1.KillPreview;
// 删除上一次报表的preview结果,在程序退出时也调用了一次
begin
killformedtfocus(self);
// another_eYes大虾控件包中提供的一个函数。
// 他说如果用了他的tiny组控件,在speedbutton类button点击事件里最好先调用这句
qrpreview1.QRPrinter := nil;
label1.caption := '1/0';
end;
//报表form, 里面放了几个TQuickRep, 举一个例子
procedure TForm2.QuickRep1Preview(Sender: TObject);
// quickrep1.onpreview
begin
form1.QRPreview1.QRPrinter := tqrprinter(sender);
form1.speedbutton8.Down := true;
end;