偶想做一个可以支持各种显示比例的预览打印程序,需重载QuickRep的preview事件,所以想到用QRpreview,但不知QRpreview与QuickRep之间的关系,如何将两者关联起来,如何动态生成各种Qrband及相关Qrbalel等控件?

解决方案 »

  1.   

    qrpreview的功用就是提供给用户做自己的预览界面
    用的时候就在quickrep的onpreview事件中做:
    qrpreview.qrprinter := quickrep.qrprinter;
    即可
      

  2.   

    如果说偶用quickrep设计好一份报表,在预览时通过重载quickrep的onpreview事件就可以吗?
      

  3.   

    给你一个自定义报表预览窗体的例子,其中指定预览对象的语句如楼上所说就可以了
    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 :='&micro;&Uacute; ' + IntToStr(QRPreview1.PageNumber)
                + ' &Ograve;&sup3; / ' + '&sup1;&sup2; ' +  IntToStr(quickRep.PageNumber) + ' &Ograve;&sup3;';
        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 :='&micro;&Uacute; ' + IntToStr(QRPreview1.PageNumber)
            + ' &Ograve;&sup3; / ' + '&sup1;&sup2; ' +  IntToStr(quickRep.PageNumber) + ' &Ograve;&sup3;';
        Timer1.Enabled := false;
    end;procedure TfrmViewReport.FormCreate(Sender: TObject);
    begin
      ScaleBy(Screen.Width, 800);
    end;end.
      

  4.   

    并不需要重载onpreview事件,只要在onpreview中把qrpriter交给qrpreview处理就可以了。这样做的好处是整个预览界面完全可以由自己设计,而不要使用quickrep提供的部分。代码可以参考楼上的
      

  5.   

    TO:ihihonline(小小->不要再流浪!!)
        在哪儿。另问一个问题,如果偶想用画布自已画那各特宽报表,如何处理,如何分页!,我另开一个,答者有分,本贴结帐。