本人前几天买了本《程序员增值合订本》,上册的第200页《深入QuickRep》一文的第二部分“自定义预览窗口”,我有几个疑问:
1.“......,因此需要引用QuickRpt单元和QRPrntr单元    Use QuickRpt,QRPrntr;”
那两个要在哪里引用;
2."然后重载showmodal函数...TForm2.showmodal..."
showmodal函数要怎么用;
3.“因此这个过程只能放在QuickRep的opPreview事件中去做,具体代码如下...”
那么Tform2.onPreview过程是怎么定义的谢谢!

解决方案 »

  1.   

    这是我自己写的Preview文件,取代QReport的那个
    unit Preview;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      ExtCtrls, QRPrntr, ComCtrls, ImgList, ToolWin, StdCtrls, Buttons;type
      TPreviewForm = class(TForm)
        QRPreview1: TQRPreview;
        StatusBar1: TStatusBar;
        ToolBar1: TToolBar;
        ZoomFitButton: TToolButton;
        Zoom100Button: TToolButton;
        ZoomWidthButton: TToolButton;
        ImageList1: TImageList;
        ToolButton4: TToolButton;
        ShowBox: TComboBox;
        ToolButton5: TToolButton;
        FirstButton: TToolButton;
        PirorButton: TToolButton;
        NextButton: TToolButton;
        LastButton: TToolButton;
        PrintButton: TToolButton;
        CloseBtn: TBitBtn;
        ToolButton11: TToolButton;
        ToolButton1: TToolButton;
        PrintSetupBtn: TToolButton;
        ToolButton2: TToolButton;
        procedure ShowBoxChange(Sender: TObject);
        procedure ZoomFitButtonClick(Sender: TObject);
        procedure Zoom100ButtonClick(Sender: TObject);
        procedure ZoomWidthButtonClick(Sender: TObject);
        procedure PrintButtonClick(Sender: TObject);
        procedure FirstButtonClick(Sender: TObject);
        procedure PirorButtonClick(Sender: TObject);
        procedure FormShow(Sender: TObject);
        procedure NextButtonClick(Sender: TObject);
        procedure QRPreview1PageAvailable(Sender: TObject; PageNum: Integer);
        procedure LastButtonClick(Sender: TObject);
        procedure ShowBoxKeyPress(Sender: TObject; var Key: Char);
        procedure PrintSetupBtnClick(Sender: TObject);
        procedure CloseBtnClick(Sender: TObject);
        procedure QRPreview1ProgressUpdate(Sender: TObject; Progress: Integer);
      private
        { Private declarations }
        FPage:Integer;
        FLastPage:Integer;
        procedure ShowPage;
      public
        { Public declarations }
      end;var
      PreviewForm: TPreviewForm;implementation{$R *.DFM}procedure TPreviewForm.ShowBoxChange(Sender: TObject);
    var
      i:integer;
      ZoomStr:String;
    begin
      i:=Pos('%',ShowBox.Text);
      if i>0 then begin
        ZoomStr:=Copy(ShowBox.Text,1,i-1);
        QRPreView1.Zoom:=StrToInt(ZoomStr);
      end;
      StatusBar1.Panels[0].Text:=ShowBox.Text;
    end;procedure TPreviewForm.ZoomFitButtonClick(Sender: TObject);
    begin
      QRPreView1.ZoomToFit;
      StatusBar1.Panels[0].Text:=ZoomFitButton.Hint;
    end;procedure TPreviewForm.Zoom100ButtonClick(Sender: TObject);
    begin
      QRPreView1.Zoom:=100;
      StatusBar1.Panels[0].Text:=Zoom100Button.Hint;
    end;procedure TPreviewForm.ZoomWidthButtonClick(Sender: TObject);
    begin
      QRPreView1.ZoomToWidth;
      StatusBar1.Panels[0].Text:=ZoomWidthButton.Hint;
    end;procedure TPreviewForm.PrintButtonClick(Sender: TObject);
    begin
      QRPreView1.QRPrinter.Print;
    end;procedure TPreviewForm.FirstButtonClick(Sender: TObject);
    begin
      QRPreView1.PageNumber:=1;
      FPage:=1;
      ShowPage;
    end;procedure TPreviewForm.PirorButtonClick(Sender: TObject);
    begin
      if FPage>1 then FPage:=FPage-1;
      QRPreView1.PageNumber:=FPage;
      ShowPage;
    end;procedure TPreviewForm.FormShow(Sender: TObject);
    begin
      FPage:=1;
      QRPreView1.ZoomToWidth;
      StatusBar1.Panels[0].Text:=ZoomWidthButton.Hint;
    end;procedure TPreviewForm.NextButtonClick(Sender: TObject);
    begin
      if FPage<FLastPage then inc(FPage);
      QRPreView1.PageNumber:=FPage;
      ShowPage;
    end;procedure TPreviewForm.QRPreview1PageAvailable(Sender: TObject;
      PageNum: Integer);
    begin
      FLastPage:=PageNum;
      ShowPage;
    end;procedure TPreviewForm.LastButtonClick(Sender: TObject);
    begin
      QRPreView1.PageNumber:=FLastPage;
      FPage:=FLastPage;
      ShowPage;
    end;procedure TPreviewForm.ShowPage;
    begin
      StatusBar1.Panels[1].Text:='第'+IntToStr(FPage)+'页 共'+IntToStr(FLastPage)+'页';
    end;procedure TPreviewForm.ShowBoxKeyPress(Sender: TObject; var Key: Char);
    var
      i:integer;
      ZoomStr:String;
    begin
      if Key=#13 then begin
        try
          i:=Pos('%',ShowBox.Text);
          if i>0 then
            ZoomStr:=Copy(ShowBox.Text,1,i-1)
          else
            ZoomStr:=ShowBox.Text;
          i:=StrToInt(ZoomStr);
          ShowBox.Text:=ZoomStr+'%';
          QRPreView1.Zoom:=i;
        except
          ShowBox.Text:='100%';
          QRPreView1.Zoom:=100;
        end;
        ShowBox.SelectAll;
      end;
      StatusBar1.Panels[0].Text:=ShowBox.Text;
    end;procedure TPreviewForm.PrintSetupBtnClick(Sender: TObject);
    begin
      QRPreView1.QRPrinter.PrintSetup;
    end;procedure TPreviewForm.CloseBtnClick(Sender: TObject);
    begin
       Close;
    end;procedure TPreviewForm.QRPreview1ProgressUpdate(Sender: TObject;
      Progress: Integer);
    begin
       StatusBar1.Panels[2].Text:='已完成预览进度:'+IntToStr(Progress)+'%';
       if Progress=100 then begin
          CloseBtn.Enabled:=True;
          ZoomFitButton.Enabled:=True;
          Zoom100Button.Enabled:=True;
          ZoomWidthButton.Enabled:=True;
          ShowBox.Enabled:=True;
          FirstButton.Enabled:=True;
          PirorButton.Enabled:=True;
          NextButton.Enabled:=True;
          LastButton.Enabled:=True;
          PrintSetupBtn.Enabled:=True;
          PrintButton.Enabled:=True;
       end;
    end;end.
      

  2.   

    调用方法:
    unit PrintUnit;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      QuickRpt, ExtCtrls, Qrctrls, Preview;type
      TPrintForm = class(TForm)
        QuickRep1: TQuickRep;
        TitleBand1: TQRBand;
        DetailBand1: TQRBand;
        ColumnHeaderBand1: TQRBand;
        PageFooterBand1: TQRBand;
        TitleLabel: TQRLabel;
        SubTitleLabel: TQRLabel;
        QRSysData1: TQRSysData;
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
        FPreviewForm:TPreviewForm;
        procedure OnMyPreview(Sender: TObject);
      public
        { Public declarations }
      end;var
      PrintForm: TPrintForm;implementationuses DMUnit;{$R *.DFM}{ TPrintForm }procedure TPrintForm.OnMyPreview(Sender: TObject);
    begin
      FPreviewForm:=TPreviewForm.Create(Self);
      FPreviewForm.QRPreview1.QRPrinter := QuickRep1.QRPrinter;
      FPreviewForm.ShowModal;
      FPreviewForm.QRPreview1.QRPrinter :=nil;
      FPreviewForm.Free;
    end;procedure TPrintForm.FormCreate(Sender: TObject);
    begin
      QuickRep1.OnPreview:=OnMyPreview;
    end;end.