CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
【经验总结】不能实施并行处理的情况 浅谈并行编程中的任务分解模式
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

如何自定义报表预览?

楼主zoujmbird()2001-04-25 10:31:00 在 Delphi / VCL组件开发及应用 提问

问题点数:20、回复次数:9Top

1 楼pipai(我是P派)回复于 2001-04-25 10:46:00 得分 20

定义一个预览PrevForm  
   
  然后在调用form中如下  
  var         PrevForm         :   TPrevForm;  
  procedure   TForm1.FormCreate(Sender:   TObject);  
  begin  
      PrevForm   :=   TPrevForm.CreateForm(   nil,   QuickReport   );  
  end;  
   
  procedure   TForm1.FormDestroy(Sender:   TObject);  
  begin  
      PrevForm.Free;  
  end;  
   
  procedure   TForm1.QuickReportPreview(Sender:   TObject);  
  begin  
      PrevForm.QRPreview.QRPrinter   :=   TQRPrinter(Sender);  
      PrevForm.Show;  
  end;  
   
  我的PrevForm:  
  {*************************************************}  
  {*     QuickReport   for   Delphi                                               *}  
  {*     Created   By   He   Kai,   ZIQ                                               *}  
  {*                                                                                               *}  
  {*   used   for   chinese   environment                                     *}  
  {*************************************************}  
   
  unit   prevwin;  
   
  interface  
   
  uses  
      SysUtils,   Windows,   Classes,   Graphics,   Controls,  
      Forms,   Dialogs,   ExtCtrls,   Gauges,   StdCtrls,   Spin,   Buttons,  
      ComCtrls,   Rzlabel,   quickrpt,   Qrctrls,   qrprntr;  
   
  type  
      TPrevForm   =   class(TForm)  
          Panel1:   TPanel;  
          QRPreview:   TQRPreview;  
          Panel2:   TPanel;  
          button3:   TSpeedButton;  
          button2:   TSpeedButton;  
          SpinEdit2:   TSpinEdit;  
          Button1:   TSpeedButton;  
          Panel3:   TPanel;  
          SpeedButton1:   TSpeedButton;  
          sbLoad:   TSpeedButton;  
          sbSave:   TSpeedButton;  
          SaveDialog1:   TSaveDialog;  
          OpenDialog1:   TOpenDialog;  
          Panel4:   TPanel;  
          Label1:   TLabel;  
          sbFirst:   TSpeedButton;  
          sbPrev:   TSpeedButton;  
          Label2:   TLabel;  
          sbLast:   TSpeedButton;  
          sbNext:   TSpeedButton;  
          SpinEdit1:   TSpinEdit;  
          Panel5:   TPanel;  
          Panel6:   TPanel;  
          lbMessage:   TRzLabel;  
          lbPages:   TRzLabel;  
          PrintDialog1:   TPrintDialog;  
          sbPrint:   TSpeedButton;  
          ProgressBar1:   TProgressBar;  
          ComboBox1:   TComboBox;  
          procedure   SpinEdit1Change(Sender:   TObject);  
          procedure   SpinEdit2Change(Sender:   TObject);  
          procedure   Button1Click(Sender:   TObject);  
          procedure   Button2Click(Sender:   TObject);  
          procedure   button3Click(Sender:   TObject);  
          procedure   CommMouseMove(Sender:   TObject;   Shift:   TShiftState;   X,  
              Y:   Integer);  
          procedure   SpeedButton1Click(Sender:   TObject);  
          procedure   sbFirstClick(Sender:   TObject);  
          procedure   sbPrevClick(Sender:   TObject);  
          procedure   sbNextClick(Sender:   TObject);  
          procedure   sbLastClick(Sender:   TObject);  
          procedure   FormCreate(Sender:   TObject);  
          procedure   FormDestroy(Sender:   TObject);  
          procedure   sbPrintClick(Sender:   TObject);  
          procedure   sbLoadClick(Sender:   TObject);  
          procedure   sbSaveClick(Sender:   TObject);  
          procedure   FormClose(Sender:   TObject;   var   Action:   TCloseAction);  
          procedure   QRPreviewProgressUpdate(Sender:   TObject;   Progress:   Integer);  
          procedure   QRPreviewPageAvailable(Sender:   TObject;   PageNum:   Integer);  
          procedure   FormActivate(Sender:   TObject);  
          procedure   FormDeactivate(Sender:   TObject);  
          procedure   ComboBox1Change(Sender:   TObject);  
          procedure   ComboBox1Enter(Sender:   TObject);  
      private  
          {   Private   declarations   }  
          fComboChanged     :   Boolean;  
          fBtnClick             :   Boolean;  
          OldExceptEvent   :   TExceptionEvent;  
          QuickReport         :   TQuickRep;  
          Procedure   ExceptEvent(   Sender   :   TObject;   E   :   Exception   );  
      Private  
          Procedure   ResetFormFace;  
      Protected  
          Constructor   Create(   AOwner   :   TComponent   );   Override;  
   
      public  
          {   Public   declarations   }  
   
          Constructor   CreateForm(   AOwner   :   TComponent;   AQuickReport   :   TQuickRep   );  
      end;  
   
  implementation  
   
  {$R   *.DFM}  
   
  Uses   Printers,   Db,   Common;  
   
  Constructor   TPrevForm.Create(   AOwner   :   TComponent   );  
  Begin  
      Inherited   Create(   AOwner   );  
  End;  
   
  Constructor   TPrevForm.CreateForm(   AOwner   :   TComponent;   AQuickReport   :   TQuickRep   );  
  Begin  
      If   AQuickReport   =   nil   Then   Raise   Exception.Create(   '没有可用的报表!'   );  
      Create(   AOwner   );  
      QuickReport   :=   AQuickReport;  
  End;  
   
  procedure   TPrevForm.FormCreate(Sender:   TObject);  
  begin  
      fComboChanged   :=   false;  
  end;  
   
  procedure   TPrevForm.FormDestroy(Sender:   TObject);  
  begin  
  //     QRPrinter.Cleanup;  
  end;  
   
  procedure   TPrevForm.FormClose(Sender:   TObject;   var   Action:   TCloseAction);  
  begin  
      QRPreview.QRPrinter.Cleanup;  
      QRPreview.QRPrinter   :=   nil;  
      Action   :=   caHide;  
  end;  
   
  procedure   TPrevForm.FormActivate(Sender:   TObject);  
  begin  
      OldExceptEvent   :=   Application.OnException;  
      Application.OnException   :=   ExceptEvent;  
  end;  
   
  procedure   TPrevForm.FormDeactivate(Sender:   TObject);  
  begin  
      Application.OnException   :=   OldExceptEvent;  
  end;  
   
  Procedure   TPrevForm.ExceptEvent(   Sender   :   TObject;   E   :   Exception   );  
  Begin  
      MessageBeep(   $FFFFFFFF   );  
      lbMessage.Caption   :=   E.Message;  
  End;  
   
  procedure   TPrevForm.SpinEdit1Change(Sender:   TObject);  
      Var   i         :   Integer;  
              Code   :   Integer;  
              S         :   String;  
  begin  
        If   SpinEdit1.Text   =   ''   Then   Exit;  
        S   :=   SpinEdit1.Text;  
        Val(   S,   i,   Code   );  
        If   Code   >   0   Then  
            Delete(   S,   Length(S),   1   )  
        Else   If   i   >   SpinEdit1.MaxValue   Then  
            Begin  
              If   i   <=   9   Then   Str(   SpinEdit1.MaxValue,   S   )  
              Else     Delete(   S,   Length(S),   1   );  
            End;  
        If   S   <>   SpinEdit1.Text   Then   SpinEdit1.Text   :=   S;  
   
        QRPreview.PageNumber:=Spinedit1.Value;  
   
        If   (SpinEdit1.MaxValue<=1)   Then   Exit;  
   
        sbFirst.Enabled   :=   Not   (   Spinedit1.Value   =   1   );  
        sbPrev.Enabled   :=   Not   (   Spinedit1.Value   =   1   );  
        sbLast.Enabled   :=   Not   (   Spinedit1.Value   =   SpinEdit1.MaxValue   );  
        sbNext.Enabled   :=   Not   (   Spinedit1.Value   =   SpinEdit1.MaxValue   );  
  end;  
   
  procedure   TPrevForm.sbFirstClick(Sender:   TObject);  
  begin  
      SpinEdit1.Value   :=   1;  
  end;  
   
  procedure   TPrevForm.sbPrevClick(Sender:   TObject);  
  begin  
      If   SpinEdit1.Value   >   1   Then  
          SpinEdit1.Value   :=   SpinEdit1.Value   -   1;  
  end;  
   
  procedure   TPrevForm.sbNextClick(Sender:   TObject);  
  begin  
      If   SpinEdit1.Value   <   SpinEdit1.MaxValue   Then  
          SpinEdit1.Value   :=   SpinEdit1.Value   +   1;  
  end;  
   
  procedure   TPrevForm.sbLastClick(Sender:   TObject);  
  begin  
      SpinEdit1.Value   :=   SpinEdit1.MaxValue;  
  end;  
   
  procedure   TPrevForm.SpinEdit2Change(Sender:   TObject);  
  begin  
        If   SpinEdit2.Text   =   ''   Then   Exit;  
   
        If   (   QRPreview.Zoom   <>   SpinEdit2.Value   )   Then  
            QRPreview.Zoom   :=   SpinEdit2.Value;  
        If   fBtnClick   Then  
            Begin  
                fBtnClick   :=   false;  
                Exit;  
            End;  
        Button1.Down   :=   false;  
        Button2.Down   :=   false;  
        Button3.Down   :=   false;  
  end;  
   
  procedure   TPrevForm.Button1Click(Sender:   TObject);  
  begin  
      Button1.Down   :=   true;  
      QRPreview.ZoomToFit;  
      If   SpinEdit2.Value=QRPreview.Zoom   Then   Exit;  
      fBtnClick   :=   true;  
      SpinEdit2.Value:=QRPreview.Zoom;  
  end;  
   
  procedure   TPrevForm.Button2Click(Sender:   TObject);  
  begin  
      Button2.Down   :=   true;  
      QRPreview.ZoomToWidth;  
      If   SpinEdit2.Value=QRPreview.Zoom   Then   Exit;  
      fBtnClick   :=   true;  
      SpinEdit2.Value:=QRPreview.Zoom;  
  end;  
   
  procedure   TPrevForm.button3Click(Sender:   TObject);  
  begin  
      Button3.Down   :=   true;  
      QRPreview.Zoom   :=   100;  
      If   SpinEdit2.Value=QRPreview.Zoom   Then   Exit;  
      fBtnClick   :=   true;  
      SpinEdit2.Value   :=   100;  
  end;  
   
  procedure   TPrevForm.CommMouseMove(Sender:   TObject;   Shift:   TShiftState;  
      X,   Y:   Integer);  
  begin  
      If   (   (Sender   As   TControl).Hint   <>   ''   )     Then  
          lbMessage.Caption   :=   GetLongHint((Sender   As   TControl).Hint)  
      Else  
          lbMessage.Caption   :=   '';  
  end;  
   
  procedure   TPrevForm.sbPrintClick(Sender:   TObject);  
  begin  
      If   QuickReport   <>   nil   Then  
          Begin  
              PrintDialog1.MaxPage   :=   QRPreview.QRPrinter.PageCount;  
              PrintDialog1.MinPage   :=   1;  
              PrintDialog1.ToPage   :=   QRPreview.QRPrinter.PageCount;  
              PrintDialog1.FromPage   :=   1;  
              If   Not   PrintDialog1.Execute   Then   Exit;  
              With   QuickReport.PrinterSettings   Do  
                  Begin  
                      Copies   :=   PrintDialog1.Copies;  
                      Duplex   :=   PrintDialog1.Collate;  
                      Case   PrintDialog1.PrintRange   Of  
                          prAllPages     :   Begin   FirstPage   :=   0;   LastPage   :=   0;   End;  
                          prSelection   :   Begin   FirstPage   :=   QRPreview.PageNumber;  
                                                                  LastPage     :=   QRPreview.PageNumber;  
                                                      End;  
                          prPageNums     :   Begin   FirstPage   :=   PrintDialog1.FromPage;  
                                                                  LastPage   :=   PrintDialog1.ToPage;  
                                                      End;  
                      End;  
                      ApplySettings(   QRPrinter   );  
                      ApplySettings(   QRPreview.QRPrinter   );  
                  End;  
          End;  
      QRPreview.QRPrinter.Print;  
  end;  
   
  procedure   TPrevForm.sbLoadClick(Sender:   TObject);  
  begin  
      If   Not   OpenDialog1.Execute   Then   Exit;  
      If   (   QuickReport   <>   nil   )   Then  
          Case   cn_MessageDlg(   '是否保存当前的报表内容?',   mtConfirmation,  
                        mbYesNoCancel,   0   )   Of  
              mrCancel   :   Exit;  
              mrYes           :   Begin  
                                        If   Not   SaveDialog1.Execute   Then   Exit;  
                                        Hourglass(   false,   true   );  
                                        Try  
                                            QRPreview.QRPrinter.Save(   SaveDialog1.FileName   );  
                                        Except  
                                            Hourglass(   false,   false   );  
                                            cn_MessageDlg(   '保存失败,可能磁盘写保护或已满!',  
                                                    mtError,   [mbOK],   0   );  
                                        End;  
                                        Hourglass(   false,   false   );  
                                    End;  
          End;  
      Hourglass(   false,   true   );  
      Try  
          QRPreview.QRPrinter.Cleanup;  
          QRPreview.QRPrinter   :=   nil;  
          QuickReport.QRPrinter.Load(   OpenDialog1.FileName   );  
          QRPreview.QRPrinter   :=   QuickReport.QRPrinter;  
      Except  
          Hourglass(   false,   false   );  
          cn_MessageDlg(   '该文件不是合法的QuickReport文件,或已被破坏!'   ,  
                                          mtError,   [mbOK],   0   );  
      End;  
      Hourglass(   false,   false   );  
  //     QRPreview.Refresh;  
  end;  
   
  procedure   TPrevForm.sbSaveClick(Sender:   TObject);  
  begin  
      If   Not   SaveDialog1.Execute   Then   Exit;  
      Hourglass(   false,   true   );  
      Try  
          QRPreview.QRPrinter.Save(   SaveDialog1.FileName   );  
      Except  
          Hourglass(   false,   false   );  
          cn_MessageDlg(   '保存失败,可能磁盘写保护或已满!',  
                                          mtError,   [mbOK],   0   );  
      End;  
      Hourglass(   false,   false   );  
  end;  
   
  procedure   TPrevForm.SpeedButton1Click(Sender:   TObject);  
  begin  
      Close;  
  end;  
   
  procedure   TPrevForm.QRPreviewProgressUpdate(Sender:   TObject;  
      Progress:   Integer);  
  begin  
      If   (   Progress   <=   0   )   Then  
          Begin  
              ProgressBar1.Visible   :=   false;  
  //             If   Not   QRPreview.Visible   Then     QRPreview.Visible   :=   True;  
              Exit;  
          End;  
      If   (   Progress   >=   100   )   Then  
          Begin  
              ProgressBar1.Visible   :=   false;  
  //             If   Not   QRPreview.Visible   Then     QRPreview.Visible   :=   True;  
          End  
      Else  
          Begin  
  //             If   QRPreview.Visible   Then     QRPreview.Visible   :=   false;  
              If   Not   ProgressBar1.Visible   Then   ProgressBar1.Visible   :=   true;  
              ProgressBar1.Position   :=   Progress;  
          End;  
  end;  
   
  procedure   TPrevForm.QRPreviewPageAvailable(Sender:   TObject;  
      PageNum:   Integer);  
  begin  
      If   fComboChanged   Then   Exit;  
      If   PageNum   <   QRPreview.QRPrinter.PageCount   Then   Exit;  
      ResetFormFace;  
  end;  
   
  Procedure   TPrevForm.ResetFormFace;  
  Begin  
        sbPrint.Enabled   :=   QRPreview.QRPrinter.PrinterOK;  
        SpinEdit1.MinValue:=1;  
        SpinEdit1.MaxValue:=QRPreview.QRPrinter.PageCount;  
        lbPages.Caption   :=   '总共有'  
            +FormatFloat(   '###,###,##0',SpinEdit1.MaxValue)+'页';  
        SpinEdit1.Value:=1;  
        Button2.Down   :=   true;  
        fBtnClick   :=   true;  
        QRPreview.ZoomToWidth;  
        SpinEdit2.Value   :=   QRPreview.Zoom;  
   
        sbFirst.Enabled   :=   false;  
        sbPrev.Enabled   :=   false;  
   
        SpinEdit1.Enabled   :=   Not   (SpinEdit1.MaxValue<=1);  
        sbNext.Enabled   :=   SpinEdit1.Enabled;  
        sbLast.Enabled   :=   SpinEdit1.Enabled;  
   
  {       ComboBox1.Visible   :=   (QuickReport   <>   nil);  
        If   ComboBox1.Visible   Then  
            If   QuickReport.Page.Orientation   =   poPortrait   Then  
                  ComboBox1.ItemIndex   :=   0  
              Else  
                  ComboBox1.ItemIndex   :=   1;  
  }  
  End;  
   
  procedure   TPrevForm.ComboBox1Change(Sender:   TObject);  
  begin  
      If   QuickReport   =   nil   Then   Exit;  
   
      If   (   ComboBox1.ItemIndex   =   0   )   And   (   QuickReport.Page.Orientation   =   poPortrait   )   Then   Exit;  
      If   (   ComboBox1.ItemIndex   =   1   )   And   (   QuickReport.Page.Orientation   =   poLandScape   )   Then   Exit;  
   
      If   ComboBox1.ItemIndex   =   0   Then  
          QuickReport.Page.Orientation   :=   poPortrait  
      Else  
          QuickReport.Page.Orientation   :=   poLandScape;  
      Hourglass(   false,   true   );  
      fComboChanged   :=   true;  
      Try  
          QRPreview.Visible   :=   false;  
          ComboBox1.Enabled   :=   false;  
  //         QRPreview.QRPrinter   :=   nil;  
          Try  
  //             QuickReport.QRPrinter.Free;  
  //             QuickReport.QRPrinter   :=   nil;  
  //             While   Not   QuickReport.Available   Do   Application.HandleMessage;  
  //             QuickReport.PrinterSettings.Orientation   :=   QuickReport.Page.Orientation;  
  //             QuickReport.PrinterSettings.ApplySettings(   QRPreview.QRPrinter   );  
              QuickReport.Prepare;  
              QRPreview.QRPrinter   :=   nil;  
              QRPreview.QRPrinter   :=   QuickReport.QRPrinter;  
              ResetFormFace;  
          Finally  
              ComboBox1.Enabled   :=   true;  
              QRPreview.Visible   :=   true;  
          End;  
      Finally  
          fComboChanged   :=   false;  
          Hourglass(   false,   false   );  
      End;  
  end;  
   
  procedure   TPrevForm.ComboBox1Enter(Sender:   TObject);  
  begin  
      CommMouseMove(   Sender,   [],   0,   0   );  
  end;  
   
  end.  
   
  Top

2 楼pipai(我是P派)回复于 2001-04-25 10:48:00 得分 0

定义一个预览PrevForm  
   
  然后在调用form中如下  
  var         PrevForm         :   TPrevForm;  
  procedure   TForm1.FormCreate(Sender:   TObject);  
  begin  
      PrevForm   :=   TPrevForm.CreateForm(   nil,   QuickReport   );  
  end;  
   
  procedure   TForm1.FormDestroy(Sender:   TObject);  
  begin  
      PrevForm.Free;  
  end;  
   
  procedure   TForm1.QuickReportPreview(Sender:   TObject);  
  begin  
      PrevForm.QRPreview.QRPrinter   :=   TQRPrinter(Sender);  
      PrevForm.Show;  
  end;  
   
  我的PrevForm:  
  {*************************************************}  
  {*     QuickReport   for   Delphi                                               *}  
  {*     Created   By   He   Kai,   ZIQ                                               *}  
  {*                                                                                               *}  
  {*   used   for   chinese   environment                                     *}  
  {*************************************************}  
   
  unit   prevwin;  
   
  interface  
   
  uses  
      SysUtils,   Windows,   Classes,   Graphics,   Controls,  
      Forms,   Dialogs,   ExtCtrls,   Gauges,   StdCtrls,   Spin,   Buttons,  
      ComCtrls,   Rzlabel,   quickrpt,   Qrctrls,   qrprntr;  
   
  type  
      TPrevForm   =   class(TForm)  
          Panel1:   TPanel;  
          QRPreview:   TQRPreview;  
          Panel2:   TPanel;  
          button3:   TSpeedButton;  
          button2:   TSpeedButton;  
          SpinEdit2:   TSpinEdit;  
          Button1:   TSpeedButton;  
          Panel3:   TPanel;  
          SpeedButton1:   TSpeedButton;  
          sbLoad:   TSpeedButton;  
          sbSave:   TSpeedButton;  
          SaveDialog1:   TSaveDialog;  
          OpenDialog1:   TOpenDialog;  
          Panel4:   TPanel;  
          Label1:   TLabel;  
          sbFirst:   TSpeedButton;  
          sbPrev:   TSpeedButton;  
          Label2:   TLabel;  
          sbLast:   TSpeedButton;  
          sbNext:   TSpeedButton;  
          SpinEdit1:   TSpinEdit;  
          Panel5:   TPanel;  
          Panel6:   TPanel;  
          lbMessage:   TRzLabel;  
          lbPages:   TRzLabel;  
          PrintDialog1:   TPrintDialog;  
          sbPrint:   TSpeedButton;  
          ProgressBar1:   TProgressBar;  
          ComboBox1:   TComboBox;  
          procedure   SpinEdit1Change(Sender:   TObject);  
          procedure   SpinEdit2Change(Sender:   TObject);  
          procedure   Button1Click(Sender:   TObject);  
          procedure   Button2Click(Sender:   TObject);  
          procedure   button3Click(Sender:   TObject);  
          procedure   CommMouseMove(Sender:   TObject;   Shift:   TShiftState;   X,  
              Y:   Integer);  
          procedure   SpeedButton1Click(Sender:   TObject);  
          procedure   sbFirstClick(Sender:   TObject);  
          procedure   sbPrevClick(Sender:   TObject);  
          procedure   sbNextClick(Sender:   TObject);  
          procedure   sbLastClick(Sender:   TObject);  
          procedure   FormCreate(Sender:   TObject);  
          procedure   FormDestroy(Sender:   TObject);  
          procedure   sbPrintClick(Sender:   TObject);  
          procedure   sbLoadClick(Sender:   TObject);  
          procedure   sbSaveClick(Sender:   TObject);  
          procedure   FormClose(Sender:   TObject;   var   Action:   TCloseAction);  
          procedure   QRPreviewProgressUpdate(Sender:   TObject;   Progress:   Integer);  
          procedure   QRPreviewPageAvailable(Sender:   TObject;   PageNum:   Integer);  
          procedure   FormActivate(Sender:   TObject);  
          procedure   FormDeactivate(Sender:   TObject);  
          procedure   ComboBox1Change(Sender:   TObject);  
          procedure   ComboBox1Enter(Sender:   TObject);  
      private  
          {   Private   declarations   }  
          fComboChanged     :   Boolean;  
          fBtnClick             :   Boolean;  
          OldExceptEvent   :   TExceptionEvent;  
          QuickReport         :   TQuickRep;  
          Procedure   ExceptEvent(   Sender   :   TObject;   E   :   Exception   );  
      Private  
          Procedure   ResetFormFace;  
      Protected  
          Constructor   Create(   AOwner   :   TComponent   );   Override;  
   
      public  
          {   Public   declarations   }  
   
          Constructor   CreateForm(   AOwner   :   TComponent;   AQuickReport   :   TQuickRep   );  
      end;  
   
  implementation  
   
  {$R   *.DFM}  
   
  Uses   Printers,   Db,   Common;  
   
  Constructor   TPrevForm.Create(   AOwner   :   TComponent   );  
  Begin  
      Inherited   Create(   AOwner   );  
  End;  
   
  Constructor   TPrevForm.CreateForm(   AOwner   :   TComponent;   AQuickReport   :   TQuickRep   );  
  Begin  
      If   AQuickReport   =   nil   Then   Raise   Exception.Create(   '没有可用的报表!'   );  
      Create(   AOwner   );  
      QuickReport   :=   AQuickReport;  
  End;  
   
  procedure   TPrevForm.FormCreate(Sender:   TObject);  
  begin  
      fComboChanged   :=   false;  
  end;  
   
  procedure   TPrevForm.FormDestroy(Sender:   TObject);  
  begin  
  //     QRPrinter.Cleanup;  
  end;  
   
  procedure   TPrevForm.FormClose(Sender:   TObject;   var   Action:   TCloseAction);  
  begin  
      QRPreview.QRPrinter.Cleanup;  
      QRPreview.QRPrinter   :=   nil;  
      Action   :=   caHide;  
  end;  
   
  procedure   TPrevForm.FormActivate(Sender:   TObject);  
  begin  
      OldExceptEvent   :=   Application.OnException;  
      Application.OnException   :=   ExceptEvent;  
  end;  
   
  procedure   TPrevForm.FormDeactivate(Sender:   TObject);  
  begin  
      Application.OnException   :=   OldExceptEvent;  
  end;  
   
  Procedure   TPrevForm.ExceptEvent(   Sender   :   TObject;   E   :   Exception   );  
  Begin  
      MessageBeep(   $FFFFFFFF   );  
      lbMessage.Caption   :=   E.Message;  
  End;  
   
  procedure   TPrevForm.SpinEdit1Change(Sender:   TObject);  
      Var   i         :   Integer;  
              Code   :   Integer;  
              S         :   String;  
  begin  
        If   SpinEdit1.Text   =   ''   Then   Exit;  
        S   :=   SpinEdit1.Text;  
        Val(   S,   i,   Code   );  
        If   Code   >   0   Then  
            Delete(   S,   Length(S),   1   )  
        Else   If   i   >   SpinEdit1.MaxValue   Then  
            Begin  
              If   i   <=   9   Then   Str(   SpinEdit1.MaxValue,   S   )  
              Else     Delete(   S,   Length(S),   1   );  
            End;  
        If   S   <>   SpinEdit1.Text   Then   SpinEdit1.Text   :=   S;  
   
        QRPreview.PageNumber:=Spinedit1.Value;  
   
        If   (SpinEdit1.MaxValue<=1)   Then   Exit;  
   
        sbFirst.Enabled   :=   Not   (   Spinedit1.Value   =   1   );  
        sbPrev.Enabled   :=   Not   (   Spinedit1.Value   =   1   );  
        sbLast.Enabled   :=   Not   (   Spinedit1.Value   =   SpinEdit1.MaxValue   );  
        sbNext.Enabled   :=   Not   (   Spinedit1.Value   =   SpinEdit1.MaxValue   );  
  end;  
   
  procedure   TPrevForm.sbFirstClick(Sender:   TObject);  
  begin  
      SpinEdit1.Value   :=   1;  
  end;  
   
  procedure   TPrevForm.sbPrevClick(Sender:   TObject);  
  begin  
      If   SpinEdit1.Value   >   1   Then  
          SpinEdit1.Value   :=   SpinEdit1.Value   -   1;  
  end;  
   
  procedure   TPrevForm.sbNextClick(Sender:   TObject);  
  begin  
      If   SpinEdit1.Value   <   SpinEdit1.MaxValue   Then  
          SpinEdit1.Value   :=   SpinEdit1.Value   +   1;  
  end;  
   
  procedure   TPrevForm.sbLastClick(Sender:   TObject);  
  begin  
      SpinEdit1.Value   :=   SpinEdit1.MaxValue;  
  end;  
   
  procedure   TPrevForm.SpinEdit2Change(Sender:   TObject);  
  begin  
        If   SpinEdit2.Text   =   ''   Then   Exit;  
   
        If   (   QRPreview.Zoom   <>   SpinEdit2.Value   )   Then  
            QRPreview.Zoom   :=   SpinEdit2.Value;  
        If   fBtnClick   Then  
            Begin  
                fBtnClick   :=   false;  
                Exit;  
            End;  
        Button1.Down   :=   false;  
        Button2.Down   :=   false;  
        Button3.Down   :=   false;  
  end;  
   
  procedure   TPrevForm.Button1Click(Sender:   TObject);  
  begin  
      Button1.Down   :=   true;  
      QRPreview.ZoomToFit;  
      If   SpinEdit2.Value=QRPreview.Zoom   Then   Exit;  
      fBtnClick   :=   true;  
      SpinEdit2.Value:=QRPreview.Zoom;  
  end;  
   
  procedure   TPrevForm.Button2Click(Sender:   TObject);  
  begin  
      Button2.Down   :=   true;  
      QRPreview.ZoomToWidth;  
      If   SpinEdit2.Value=QRPreview.Zoom   Then   Exit;  
      fBtnClick   :=   true;  
      SpinEdit2.Value:=QRPreview.Zoom;  
  end;  
   
  procedure   TPrevForm.button3Click(Sender:   TObject);  
  begin  
      Button3.Down   :=   true;  
      QRPreview.Zoom   :=   100;  
      If   SpinEdit2.Value=QRPreview.Zoom   Then   Exit;  
      fBtnClick   :=   true;  
      SpinEdit2.Value   :=   100;  
  end;  
   
  procedure   TPrevForm.CommMouseMove(Sender:   TObject;   Shift:   TShiftState;  
      X,   Y:   Integer);  
  begin  
      If   (   (Sender   As   TControl).Hint   <>   ''   )     Then  
          lbMessage.Caption   :=   GetLongHint((Sender   As   TControl).Hint)  
      Else  
          lbMessage.Caption   :=   '';  
  end;  
   
  procedure   TPrevForm.sbPrintClick(Sender:   TObject);  
  begin  
      If   QuickReport   <>   nil   Then  
          Begin  
              PrintDialog1.MaxPage   :=   QRPreview.QRPrinter.PageCount;  
              PrintDialog1.MinPage   :=   1;  
              PrintDialog1.ToPage   :=   QRPreview.QRPrinter.PageCount;  
              PrintDialog1.FromPage   :=   1;  
              If   Not   PrintDialog1.Execute   Then   Exit;  
              With   QuickReport.PrinterSettings   Do  
                  Begin  
                      Copies   :=   PrintDialog1.Copies;  
                      Duplex   :=   PrintDialog1.Collate;  
                      Case   PrintDialog1.PrintRange   Of  
                          prAllPages     :   Begin   FirstPage   :=   0;   LastPage   :=   0;   End;  
                          prSelection   :   Begin   FirstPage   :=   QRPreview.PageNumber;  
                                                                  LastPage     :=   QRPreview.PageNumber;  
                                                      End;  
                          prPageNums     :   Begin   FirstPage   :=   PrintDialog1.FromPage;  
                                                                  LastPage   :=   PrintDialog1.ToPage;  
                                                      End;  
                      End;  
                      ApplySettings(   QRPrinter   );  
                      ApplySettings(   QRPreview.QRPrinter   );  
                  End;  
          End;  
      QRPreview.QRPrinter.Print;  
  end;  
   
  procedure   TPrevForm.sbLoadClick(Sender:   TObject);  
  begin  
      If   Not   OpenDialog1.Execute   Then   Exit;  
      If   (   QuickReport   <>   nil   )   Then  
          Case   cn_MessageDlg(   '是否保存当前的报表内容?',   mtConfirmation,  
                        mbYesNoCancel,   0   )   Of  
              mrCancel   :   Exit;  
              mrYes           :   Begin  
                                        If   Not   SaveDialog1.Execute   Then   Exit;  
                                        Hourglass(   false,   true   );  
                                        Try  
                                            QRPreview.QRPrinter.Save(   SaveDialog1.FileName   );  
                                        Except  
                                            Hourglass(   false,   false   );  
                                            cn_MessageDlg(   '保存失败,可能磁盘写保护或已满!',  
                                                    mtError,   [mbOK],   0   );  
                                        End;  
                                        Hourglass(   false,   false   );  
                                    End;  
          End;  
      Hourglass(   false,   true   );  
      Try  
          QRPreview.QRPrinter.Cleanup;  
          QRPreview.QRPrinter   :=   nil;  
          QuickReport.QRPrinter.Load(   OpenDialog1.FileName   );  
          QRPreview.QRPrinter   :=   QuickReport.QRPrinter;  
      Except  
          Hourglass(   false,   false   );  
          cn_MessageDlg(   '该文件不是合法的QuickReport文件,或已被破坏!'   ,  
                                          mtError,   [mbOK],   0   );  
      End;  
      Hourglass(   false,   false   );  
  //     QRPreview.Refresh;  
  end;  
   
  procedure   TPrevForm.sbSaveClick(Sender:   TObject);  
  begin  
      If   Not   SaveDialog1.Execute   Then   Exit;  
      Hourglass(   false,   true   );  
      Try  
          QRPreview.QRPrinter.Save(   SaveDialog1.FileName   );  
      Except  
          Hourglass(   false,   false   );  
          cn_MessageDlg(   '保存失败,可能磁盘写保护或已满!',  
                                          mtError,   [mbOK],   0   );  
      End;  
      Hourglass(   false,   false   );  
  end;  
   
  procedure   TPrevForm.SpeedButton1Click(Sender:   TObject);  
  begin  
      Close;  
  end;  
   
  procedure   TPrevForm.QRPreviewProgressUpdate(Sender:   TObject;  
      Progress:   Integer);  
  begin  
      If   (   Progress   <=   0   )   Then  
          Begin  
              ProgressBar1.Visible   :=   false;  
  //             If   Not   QRPreview.Visible   Then     QRPreview.Visible   :=   True;  
              Exit;  
          End;  
      If   (   Progress   >=   100   )   Then  
          Begin  
              ProgressBar1.Visible   :=   false;  
  //             If   Not   QRPreview.Visible   Then     QRPreview.Visible   :=   True;  
          End  
      Else  
          Begin  
  //             If   QRPreview.Visible   Then     QRPreview.Visible   :=   false;  
              If   Not   ProgressBar1.Visible   Then   ProgressBar1.Visible   :=   true;  
              ProgressBar1.Position   :=   Progress;  
          End;  
  end;  
   
  procedure   TPrevForm.QRPreviewPageAvailable(Sender:   TObject;  
      PageNum:   Integer);  
  begin  
      If   fComboChanged   Then   Exit;  
      If   PageNum   <   QRPreview.QRPrinter.PageCount   Then   Exit;  
      ResetFormFace;  
  end;  
   
  Procedure   TPrevForm.ResetFormFace;  
  Begin  
        sbPrint.Enabled   :=   QRPreview.QRPrinter.PrinterOK;  
        SpinEdit1.MinValue:=1;  
        SpinEdit1.MaxValue:=QRPreview.QRPrinter.PageCount;  
        lbPages.Caption   :=   '总共有'  
            +FormatFloat(   '###,###,##0',SpinEdit1.MaxValue)+'页';  
        SpinEdit1.Value:=1;  
        Button2.Down   :=   true;  
        fBtnClick   :=   true;  
        QRPreview.ZoomToWidth;  
        SpinEdit2.Value   :=   QRPreview.Zoom;  
   
        sbFirst.Enabled   :=   false;  
        sbPrev.Enabled   :=   false;  
   
        SpinEdit1.Enabled   :=   Not   (SpinEdit1.MaxValue<=1);  
        sbNext.Enabled   :=   SpinEdit1.Enabled;  
        sbLast.Enabled   :=   SpinEdit1.Enabled;  
   
  {       ComboBox1.Visible   :=   (QuickReport   <>   nil);  
        If   ComboBox1.Visible   Then  
            If   QuickReport.Page.Orientation   =   poPortrait   Then  
                  ComboBox1.ItemIndex   :=   0  
              Else  
                  ComboBox1.ItemIndex   :=   1;  
  }  
  End;  
   
  procedure   TPrevForm.ComboBox1Change(Sender:   TObject);  
  begin  
      If   QuickReport   =   nil   Then   Exit;  
   
      If   (   ComboBox1.ItemIndex   =   0   )   And   (   QuickReport.Page.Orientation   =   poPortrait   )   Then   Exit;  
      If   (   ComboBox1.ItemIndex   =   1   )   And   (   QuickReport.Page.Orientation   =   poLandScape   )   Then   Exit;  
   
      If   ComboBox1.ItemIndex   =   0   Then  
          QuickReport.Page.Orientation   :=   poPortrait  
      Else  
          QuickReport.Page.Orientation   :=   poLandScape;  
      Hourglass(   false,   true   );  
      fComboChanged   :=   true;  
      Try  
          QRPreview.Visible   :=   false;  
          ComboBox1.Enabled   :=   false;  
  //         QRPreview.QRPrinter   :=   nil;  
          Try  
  //             QuickReport.QRPrinter.Free;  
  //             QuickReport.QRPrinter   :=   nil;  
  //             While   Not   QuickReport.Available   Do   Application.HandleMessage;  
  //             QuickReport.PrinterSettings.Orientation   :=   QuickReport.Page.Orientation;  
  //             QuickReport.PrinterSettings.ApplySettings(   QRPreview.QRPrinter   );  
              QuickReport.Prepare;  
              QRPreview.QRPrinter   :=   nil;  
              QRPreview.QRPrinter   :=   QuickReport.QRPrinter;  
              ResetFormFace;  
          Finally  
              ComboBox1.Enabled   :=   true;  
              QRPreview.Visible   :=   true;  
          End;  
      Finally  
          fComboChanged   :=   false;  
          Hourglass(   false,   false   );  
      End;  
  end;  
   
  procedure   TPrevForm.ComboBox1Enter(Sender:   TObject);  
  begin  
      CommMouseMove(   Sender,   [],   0,   0   );  
  end;  
   
  end.  
   
  Top

3 楼pipai(我是P派)回复于 2001-04-25 10:49:00 得分 0

定义一个预览PrevForm  
   
  然后在调用form中如下  
  var         PrevForm         :   TPrevForm;  
  procedure   TForm1.FormCreate(Sender:   TObject);  
  begin  
      PrevForm   :=   TPrevForm.CreateForm(   nil,   QuickReport   );  
  end;  
   
  procedure   TForm1.FormDestroy(Sender:   TObject);  
  begin  
      PrevForm.Free;  
  end;  
   
  procedure   TForm1.QuickReportPreview(Sender:   TObject);  
  begin  
      PrevForm.QRPreview.QRPrinter   :=   TQRPrinter(Sender);  
      PrevForm.Show;  
  end;  
   
  我的PrevForm:  
  {*************************************************}  
  {*     QuickReport   for   Delphi                                               *}  
  {*     Created   By   He   Kai,   ZIQ                                               *}  
  {*                                                                                               *}  
  {*   used   for   chinese   environment                                     *}  
  {*************************************************}  
   
  unit   prevwin;  
   
  interface  
   
  uses  
      SysUtils,   Windows,   Classes,   Graphics,   Controls,  
      Forms,   Dialogs,   ExtCtrls,   Gauges,   StdCtrls,   Spin,   Buttons,  
      ComCtrls,   Rzlabel,   quickrpt,   Qrctrls,   qrprntr;  
   
  type  
      TPrevForm   =   class(TForm)  
          Panel1:   TPanel;  
          QRPreview:   TQRPreview;  
          Panel2:   TPanel;  
          button3:   TSpeedButton;  
          button2:   TSpeedButton;  
          SpinEdit2:   TSpinEdit;  
          Button1:   TSpeedButton;  
          Panel3:   TPanel;  
          SpeedButton1:   TSpeedButton;  
          sbLoad:   TSpeedButton;  
          sbSave:   TSpeedButton;  
          SaveDialog1:   TSaveDialog;  
          OpenDialog1:   TOpenDialog;  
          Panel4:   TPanel;  
          Label1:   TLabel;  
          sbFirst:   TSpeedButton;  
          sbPrev:   TSpeedButton;  
          Label2:   TLabel;  
          sbLast:   TSpeedButton;  
          sbNext:   TSpeedButton;  
          SpinEdit1:   TSpinEdit;  
          Panel5:   TPanel;  
          Panel6:   TPanel;  
          lbMessage:   TRzLabel;  
          lbPages:   TRzLabel;  
          PrintDialog1:   TPrintDialog;  
          sbPrint:   TSpeedButton;  
          ProgressBar1:   TProgressBar;  
          ComboBox1:   TComboBox;  
          procedure   SpinEdit1Change(Sender:   TObject);  
          procedure   SpinEdit2Change(Sender:   TObject);  
          procedure   Button1Click(Sender:   TObject);  
          procedure   Button2Click(Sender:   TObject);  
          procedure   button3Click(Sender:   TObject);  
          procedure   CommMouseMove(Sender:   TObject;   Shift:   TShiftState;   X,  
              Y:   Integer);  
          procedure   SpeedButton1Click(Sender:   TObject);  
          procedure   sbFirstClick(Sender:   TObject);  
          procedure   sbPrevClick(Sender:   TObject);  
          procedure   sbNextClick(Sender:   TObject);  
          procedure   sbLastClick(Sender:   TObject);  
          procedure   FormCreate(Sender:   TObject);  
          procedure   FormDestroy(Sender:   TObject);  
          procedure   sbPrintClick(Sender:   TObject);  
          procedure   sbLoadClick(Sender:   TObject);  
          procedure   sbSaveClick(Sender:   TObject);  
          procedure   FormClose(Sender:   TObject;   var   Action:   TCloseAction);  
          procedure   QRPreviewProgressUpdate(Sender:   TObject;   Progress:   Integer);  
          procedure   QRPreviewPageAvailable(Sender:   TObject;   PageNum:   Integer);  
          procedure   FormActivate(Sender:   TObject);  
          procedure   FormDeactivate(Sender:   TObject);  
          procedure   ComboBox1Change(Sender:   TObject);  
          procedure   ComboBox1Enter(Sender:   TObject);  
      private  
          {   Private   declarations   }  
          fComboChanged     :   Boolean;  
          fBtnClick             :   Boolean;  
          OldExceptEvent   :   TExceptionEvent;  
          QuickReport         :   TQuickRep;  
          Procedure   ExceptEvent(   Sender   :   TObject;   E   :   Exception   );  
      Private  
          Procedure   ResetFormFace;  
      Protected  
          Constructor   Create(   AOwner   :   TComponent   );   Override;  
   
      public  
          {   Public   declarations   }  
   
          Constructor   CreateForm(   AOwner   :   TComponent;   AQuickReport   :   TQuickRep   );  
      end;  
   
  implementation  
   
  {$R   *.DFM}  
   
  Uses   Printers,   Db,   Common;  
   
  Constructor   TPrevForm.Create(   AOwner   :   TComponent   );  
  Begin  
      Inherited   Create(   AOwner   );  
  End;  
   
  Constructor   TPrevForm.CreateForm(   AOwner   :   TComponent;   AQuickReport   :   TQuickRep   );  
  Begin  
      If   AQuickReport   =   nil   Then   Raise   Exception.Create(   '没有可用的报表!'   );  
      Create(   AOwner   );  
      QuickReport   :=   AQuickReport;  
  End;  
   
  procedure   TPrevForm.FormCreate(Sender:   TObject);  
  begin  
      fComboChanged   :=   false;  
  end;  
   
  procedure   TPrevForm.FormDestroy(Sender:   TObject);  
  begin  
  //     QRPrinter.Cleanup;  
  end;  
   
  procedure   TPrevForm.FormClose(Sender:   TObject;   var   Action:   TCloseAction);  
  begin  
      QRPreview.QRPrinter.Cleanup;  
      QRPreview.QRPrinter   :=   nil;  
      Action   :=   caHide;  
  end;  
   
  procedure   TPrevForm.FormActivate(Sender:   TObject);  
  begin  
      OldExceptEvent   :=   Application.OnException;  
      Application.OnException   :=   ExceptEvent;  
  end;  
   
  procedure   TPrevForm.FormDeactivate(Sender:   TObject);  
  begin  
      Application.OnException   :=   OldExceptEvent;  
  end;  
   
  Procedure   TPrevForm.ExceptEvent(   Sender   :   TObject;   E   :   Exception   );  
  Begin  
      MessageBeep(   $FFFFFFFF   );  
      lbMessage.Caption   :=   E.Message;  
  End;  
   
  procedure   TPrevForm.SpinEdit1Change(Sender:   TObject);  
      Var   i         :   Integer;  
              Code   :   Integer;  
              S         :   String;  
  begin  
        If   SpinEdit1.Text   =   ''   Then   Exit;  
        S   :=   SpinEdit1.Text;  
        Val(   S,   i,   Code   );  
        If   Code   >   0   Then  
            Delete(   S,   Length(S),   1   )  
        Else   If   i   >   SpinEdit1.MaxValue   Then  
            Begin  
              If   i   <=   9   Then   Str(   SpinEdit1.MaxValue,   S   )  
              Else     Delete(   S,   Length(S),   1   );  
            End;  
        If   S   <>   SpinEdit1.Text   Then   SpinEdit1.Text   :=   S;  
   
        QRPreview.PageNumber:=Spinedit1.Value;  
   
        If   (SpinEdit1.MaxValue<=1)   Then   Exit;  
   
        sbFirst.Enabled   :=   Not   (   Spinedit1.Value   =   1   );  
        sbPrev.Enabled   :=   Not   (   Spinedit1.Value   =   1   );  
        sbLast.Enabled   :=   Not   (   Spinedit1.Value   =   SpinEdit1.MaxValue   );  
        sbNext.Enabled   :=   Not   (   Spinedit1.Value   =   SpinEdit1.MaxValue   );  
  end;  
   
  procedure   TPrevForm.sbFirstClick(Sender:   TObject);  
  begin  
      SpinEdit1.Value   :=   1;  
  end;  
   
  procedure   TPrevForm.sbPrevClick(Sender:   TObject);  
  begin  
      If   SpinEdit1.Value   >   1   Then  
          SpinEdit1.Value   :=   SpinEdit1.Value   -   1;  
  end;  
   
  procedure   TPrevForm.sbNextClick(Sender:   TObject);  
  begin  
      If   SpinEdit1.Value   <   SpinEdit1.MaxValue   Then  
          SpinEdit1.Value   :=   SpinEdit1.Value   +   1;  
  end;  
   
  procedure   TPrevForm.sbLastClick(Sender:   TObject);  
  begin  
      SpinEdit1.Value   :=   SpinEdit1.MaxValue;  
  end;  
   
  procedure   TPrevForm.SpinEdit2Change(Sender:   TObject);  
  begin  
        If   SpinEdit2.Text   =   ''   Then   Exit;  
   
        If   (   QRPreview.Zoom   <>   SpinEdit2.Value   )   Then  
            QRPreview.Zoom   :=   SpinEdit2.Value;  
        If   fBtnClick   Then  
            Begin  
                fBtnClick   :=   false;  
                Exit;  
            End;  
        Button1.Down   :=   false;  
        Button2.Down   :=   false;  
        Button3.Down   :=   false;  
  end;  
   
  procedure   TPrevForm.Button1Click(Sender:   TObject);  
  begin  
      Button1.Down   :=   true;  
      QRPreview.ZoomToFit;  
      If   SpinEdit2.Value=QRPreview.Zoom   Then   Exit;  
      fBtnClick   :=   true;  
      SpinEdit2.Value:=QRPreview.Zoom;  
  end;  
   
  procedure   TPrevForm.Button2Click(Sender:   TObject);  
  begin  
      Button2.Down   :=   true;  
      QRPreview.ZoomToWidth;  
      If   SpinEdit2.Value=QRPreview.Zoom   Then   Exit;  
      fBtnClick   :=   true;  
      SpinEdit2.Value:=QRPreview.Zoom;  
  end;  
   
  procedure   TPrevForm.button3Click(Sender:   TObject);  
  begin  
      Button3.Down   :=   true;  
      QRPreview.Zoom   :=   100;  
      If   SpinEdit2.Value=QRPreview.Zoom   Then   Exit;  
      fBtnClick   :=   true;  
      SpinEdit2.Value   :=   100;  
  end;  
   
  procedure   TPrevForm.CommMouseMove(Sender:   TObject;   Shift:   TShiftState;  
      X,   Y:   Integer);  
  begin  
      If   (   (Sender   As   TControl).Hint   <>   ''   )     Then  
          lbMessage.Caption   :=   GetLongHint((Sender   As   TControl).Hint)  
      Else  
          lbMessage.Caption   :=   '';  
  end;  
   
  procedure   TPrevForm.sbPrintClick(Sender:   TObject);  
  begin  
      If   QuickReport   <>   nil   Then  
          Begin  
              PrintDialog1.MaxPage   :=   QRPreview.QRPrinter.PageCount;  
              PrintDialog1.MinPage   :=   1;  
              PrintDialog1.ToPage   :=   QRPreview.QRPrinter.PageCount;  
              PrintDialog1.FromPage   :=   1;  
              If   Not   PrintDialog1.Execute   Then   Exit;  
              With   QuickReport.PrinterSettings   Do  
                  Begin  
                      Copies   :=   PrintDialog1.Copies;  
                      Duplex   :=   PrintDialog1.Collate;  
                      Case   PrintDialog1.PrintRange   Of  
                          prAllPages     :   Begin   FirstPage   :=   0;   LastPage   :=   0;   End;  
                          prSelection   :   Begin   FirstPage   :=   QRPreview.PageNumber;  
                                                                  LastPage     :=   QRPreview.PageNumber;  
                                                      End;  
                          prPageNums     :   Begin   FirstPage   :=   PrintDialog1.FromPage;  
                                                                  LastPage   :=   PrintDialog1.ToPage;  
                                                      End;  
                      End;  
                      ApplySettings(   QRPrinter   );  
                      ApplySettings(   QRPreview.QRPrinter   );  
                  End;  
          End;  
      QRPreview.QRPrinter.Print;  
  end;  
   
  procedure   TPrevForm.sbLoadClick(Sender:   TObject);  
  begin  
      If   Not   OpenDialog1.Execute   Then   Exit;  
      If   (   QuickReport   <>   nil   )   Then  
          Case   cn_MessageDlg(   '是否保存当前的报表内容?',   mtConfirmation,  
                        mbYesNoCancel,   0   )   Of  
              mrCancel   :   Exit;  
              mrYes           :   Begin  
                                        If   Not   SaveDialog1.Execute   Then   Exit;  
                                        Hourglass(   false,   true   );  
                                        Try  
                                            QRPreview.QRPrinter.Save(   SaveDialog1.FileName   );  
                                        Except  
                                            Hourglass(   false,   false   );  
                                            cn_MessageDlg(   '保存失败,可能磁盘写保护或已满!',  
                                                    mtError,   [mbOK],   0   );  
                                        End;  
                                        Hourglass(   false,   false   );  
                                    End;  
          End;  
      Hourglass(   false,   true   );  
      Try  
          QRPreview.QRPrinter.Cleanup;  
          QRPreview.QRPrinter   :=   nil;  
          QuickReport.QRPrinter.Load(   OpenDialog1.FileName   );  
          QRPreview.QRPrinter   :=   QuickReport.QRPrinter;  
      Except  
          Hourglass(   false,   false   );  
          cn_MessageDlg(   '该文件不是合法的QuickReport文件,或已被破坏!'   ,  
                                          mtError,   [mbOK],   0   );  
      End;  
      Hourglass(   false,   false   );  
  //     QRPreview.Refresh;  
  end;  
   
  procedure   TPrevForm.sbSaveClick(Sender:   TObject);  
  begin  
      If   Not   SaveDialog1.Execute   Then   Exit;  
      Hourglass(   false,   true   );  
      Try  
          QRPreview.QRPrinter.Save(   SaveDialog1.FileName   );  
      Except  
          Hourglass(   false,   false   );  
          cn_MessageDlg(   '保存失败,可能磁盘写保护或已满!',  
                                          mtError,   [mbOK],   0   );  
      End;  
      Hourglass(   false,   false   );  
  end;  
   
  procedure   TPrevForm.SpeedButton1Click(Sender:   TObject);  
  begin  
      Close;  
  end;  
   
  procedure   TPrevForm.QRPreviewProgressUpdate(Sender:   TObject;  
      Progress:   Integer);  
  begin  
      If   (   Progress   <=   0   )   Then  
          Begin  
              ProgressBar1.Visible   :=   false;  
  //             If   Not   QRPreview.Visible   Then     QRPreview.Visible   :=   True;  
              Exit;  
          End;  
      If   (   Progress   >=   100   )   Then  
          Begin  
              ProgressBar1.Visible   :=   false;  
  //             If   Not   QRPreview.Visible   Then     QRPreview.Visible   :=   True;  
          End  
      Else  
          Begin  
  //             If   QRPreview.Visible   Then     QRPreview.Visible   :=   false;  
              If   Not   ProgressBar1.Visible   Then   ProgressBar1.Visible   :=   true;  
              ProgressBar1.Position   :=   Progress;  
          End;  
  end;  
   
  procedure   TPrevForm.QRPreviewPageAvailable(Sender:   TObject;  
      PageNum:   Integer);  
  begin  
      If   fComboChanged   Then   Exit;  
      If   PageNum   <   QRPreview.QRPrinter.PageCount   Then   Exit;  
      ResetFormFace;  
  end;  
   
  Procedure   TPrevForm.ResetFormFace;  
  Begin  
        sbPrint.Enabled   :=   QRPreview.QRPrinter.PrinterOK;  
        SpinEdit1.MinValue:=1;  
        SpinEdit1.MaxValue:=QRPreview.QRPrinter.PageCount;  
        lbPages.Caption   :=   '总共有'  
            +FormatFloat(   '###,###,##0',SpinEdit1.MaxValue)+'页';  
        SpinEdit1.Value:=1;  
        Button2.Down   :=   true;  
        fBtnClick   :=   true;  
        QRPreview.ZoomToWidth;  
        SpinEdit2.Value   :=   QRPreview.Zoom;  
   
        sbFirst.Enabled   :=   false;  
        sbPrev.Enabled   :=   false;  
   
        SpinEdit1.Enabled   :=   Not   (SpinEdit1.MaxValue<=1);  
        sbNext.Enabled   :=   SpinEdit1.Enabled;  
        sbLast.Enabled   :=   SpinEdit1.Enabled;  
   
  {       ComboBox1.Visible   :=   (QuickReport   <>   nil);  
        If   ComboBox1.Visible   Then  
            If   QuickReport.Page.Orientation   =   poPortrait   Then  
                  ComboBox1.ItemIndex   :=   0  
              Else  
                  ComboBox1.ItemIndex   :=   1;  
  }  
  End;  
   
  procedure   TPrevForm.ComboBox1Change(Sender:   TObject);  
  begin  
      If   QuickReport   =   nil   Then   Exit;  
   
      If   (   ComboBox1.ItemIndex   =   0   )   And   (   QuickReport.Page.Orientation   =   poPortrait   )   Then   Exit;  
      If   (   ComboBox1.ItemIndex   =   1   )   And   (   QuickReport.Page.Orientation   =   poLandScape   )   Then   Exit;  
   
      If   ComboBox1.ItemIndex   =   0   Then  
          QuickReport.Page.Orientation   :=   poPortrait  
      Else  
          QuickReport.Page.Orientation   :=   poLandScape;  
      Hourglass(   false,   true   );  
      fComboChanged   :=   true;  
      Try  
          QRPreview.Visible   :=   false;  
          ComboBox1.Enabled   :=   false;  
  //         QRPreview.QRPrinter   :=   nil;  
          Try  
  //             QuickReport.QRPrinter.Free;  
  //             QuickReport.QRPrinter   :=   nil;  
  //             While   Not   QuickReport.Available   Do   Application.HandleMessage;  
  //             QuickReport.PrinterSettings.Orientation   :=   QuickReport.Page.Orientation;  
  //             QuickReport.PrinterSettings.ApplySettings(   QRPreview.QRPrinter   );  
              QuickReport.Prepare;  
              QRPreview.QRPrinter   :=   nil;  
              QRPreview.QRPrinter   :=   QuickReport.QRPrinter;  
              ResetFormFace;  
          Finally  
              ComboBox1.Enabled   :=   true;  
              QRPreview.Visible   :=   true;  
          End;  
      Finally  
          fComboChanged   :=   false;  
          Hourglass(   false,   false   );  
      End;  
  end;  
   
  procedure   TPrevForm.ComboBox1Enter(Sender:   TObject);  
  begin  
      CommMouseMove(   Sender,   [],   0,   0   );  
  end;  
   
  end.  
   
  Top

4 楼pipai(我是P派)回复于 2001-04-25 10:52:00 得分 0

定义一个预览PrevForm  
   
  然后在调用form中如下  
  var         PrevForm         :   TPrevForm;  
  procedure   TForm1.FormCreate(Sender:   TObject);  
  begin  
      PrevForm   :=   TPrevForm.CreateForm(   nil,   QuickReport   );  
  end;  
   
  procedure   TForm1.FormDestroy(Sender:   TObject);  
  begin  
      PrevForm.Free;  
  end;  
   
  procedure   TForm1.QuickReportPreview(Sender:   TObject);  
  begin  
      PrevForm.QRPreview.QRPrinter   :=   TQRPrinter(Sender);  
      PrevForm.Show;  
  end;  
   
  我的PrevForm:  
  {*************************************************}  
  {*     QuickReport   for   Delphi                                               *}  
  {*     Created   By   He   Kai,   ZIQ                                               *}  
  {*                                                                                               *}  
  {*   used   for   chinese   environment                                     *}  
  {*************************************************}  
   
  unit   prevwin;  
   
  interface  
   
  uses  
      SysUtils,   Windows,   Classes,   Graphics,   Controls,  
      Forms,   Dialogs,   ExtCtrls,   Gauges,   StdCtrls,   Spin,   Buttons,  
      ComCtrls,   Rzlabel,   quickrpt,   Qrctrls,   qrprntr;  
   
  type  
      TPrevForm   =   class(TForm)  
          Panel1:   TPanel;  
          QRPreview:   TQRPreview;  
          Panel2:   TPanel;  
          button3:   TSpeedButton;  
          button2:   TSpeedButton;  
          SpinEdit2:   TSpinEdit;  
          Button1:   TSpeedButton;  
          Panel3:   TPanel;  
          SpeedButton1:   TSpeedButton;  
          sbLoad:   TSpeedButton;  
          sbSave:   TSpeedButton;  
          SaveDialog1:   TSaveDialog;  
          OpenDialog1:   TOpenDialog;  
          Panel4:   TPanel;  
          Label1:   TLabel;  
          sbFirst:   TSpeedButton;  
          sbPrev:   TSpeedButton;  
          Label2:   TLabel;  
          sbLast:   TSpeedButton;  
          sbNext:   TSpeedButton;  
          SpinEdit1:   TSpinEdit;  
          Panel5:   TPanel;  
          Panel6:   TPanel;  
          lbMessage:   TRzLabel;  
          lbPages:   TRzLabel;  
          PrintDialog1:   TPrintDialog;  
          sbPrint:   TSpeedButton;  
          ProgressBar1:   TProgressBar;  
          ComboBox1:   TComboBox;  
          procedure   SpinEdit1Change(Sender:   TObject);  
          procedure   SpinEdit2Change(Sender:   TObject);  
          procedure   Button1Click(Sender:   TObject);  
          procedure   Button2Click(Sender:   TObject);  
          procedure   button3Click(Sender:   TObject);  
          procedure   CommMouseMove(Sender:   TObject;   Shift:   TShiftState;   X,  
              Y:   Integer);  
          procedure   SpeedButton1Click(Sender:   TObject);  
          procedure   sbFirstClick(Sender:   TObject);  
          procedure   sbPrevClick(Sender:   TObject);  
          procedure   sbNextClick(Sender:   TObject);  
          procedure   sbLastClick(Sender:   TObject);  
          procedure   FormCreate(Sender:   TObject);  
          procedure   FormDestroy(Sender:   TObject);  
          procedure   sbPrintClick(Sender:   TObject);  
          procedure   sbLoadClick(Sender:   TObject);  
          procedure   sbSaveClick(Sender:   TObject);  
          procedure   FormClose(Sender:   TObject;   var   Action:   TCloseAction);  
          procedure   QRPreviewProgressUpdate(Sender:   TObject;   Progress:   Integer);  
          procedure   QRPreviewPageAvailable(Sender:   TObject;   PageNum:   Integer);  
          procedure   FormActivate(Sender:   TObject);  
          procedure   FormDeactivate(Sender:   TObject);  
          procedure   ComboBox1Change(Sender:   TObject);  
          procedure   ComboBox1Enter(Sender:   TObject);  
      private  
          {   Private   declarations   }  
          fComboChanged     :   Boolean;  
          fBtnClick             :   Boolean;  
          OldExceptEvent   :   TExceptionEvent;  
          QuickReport         :   TQuickRep;  
          Procedure   ExceptEvent(   Sender   :   TObject;   E   :   Exception   );  
      Private  
          Procedure   ResetFormFace;  
      Protected  
          Constructor   Create(   AOwner   :   TComponent   );   Override;  
   
      public  
          {   Public   declarations   }  
   
          Constructor   CreateForm(   AOwner   :   TComponent;   AQuickReport   :   TQuickRep   );  
      end;  
   
  implementation  
   
  {$R   *.DFM}  
   
  Uses   Printers,   Db,   Common;  
   
  Constructor   TPrevForm.Create(   AOwner   :   TComponent   );  
  Begin  
      Inherited   Create(   AOwner   );  
  End;  
   
  Constructor   TPrevForm.CreateForm(   AOwner   :   TComponent;   AQuickReport   :   TQuickRep   );  
  Begin  
      If   AQuickReport   =   nil   Then   Raise   Exception.Create(   '没有可用的报表!'   );  
      Create(   AOwner   );  
      QuickReport   :=   AQuickReport;  
  End;  
   
  procedure   TPrevForm.FormCreate(Sender:   TObject);  
  begin  
      fComboChanged   :=   false;  
  end;  
   
  procedure   TPrevForm.FormDestroy(Sender:   TObject);  
  begin  
  //     QRPrinter.Cleanup;  
  end;  
   
  procedure   TPrevForm.FormClose(Sender:   TObject;   var   Action:   TCloseAction);  
  begin  
      QRPreview.QRPrinter.Cleanup;  
      QRPreview.QRPrinter   :=   nil;  
      Action   :=   caHide;  
  end;  
   
  procedure   TPrevForm.FormActivate(Sender:   TObject);  
  begin  
      OldExceptEvent   :=   Application.OnException;  
      Application.OnException   :=   ExceptEvent;  
  end;  
   
  procedure   TPrevForm.FormDeactivate(Sender:   TObject);  
  begin  
      Application.OnException   :=   OldExceptEvent;  
  end;  
   
  Procedure   TPrevForm.ExceptEvent(   Sender   :   TObject;   E   :   Exception   );  
  Begin  
      MessageBeep(   $FFFFFFFF   );  
      lbMessage.Caption   :=   E.Message;  
  End;  
   
  procedure   TPrevForm.SpinEdit1Change(Sender:   TObject);  
      Var   i         :   Integer;  
              Code   :   Integer;  
              S         :   String;  
  begin  
        If   SpinEdit1.Text   =   ''   Then   Exit;  
        S   :=   SpinEdit1.Text;  
        Val(   S,   i,   Code   );  
        If   Code   >   0   Then  
            Delete(   S,   Length(S),   1   )  
        Else   If   i   >   SpinEdit1.MaxValue   Then  
            Begin  
              If   i   <=   9   Then   Str(   SpinEdit1.MaxValue,   S   )  
              Else     Delete(   S,   Length(S),   1   );  
            End;  
        If   S   <>   SpinEdit1.Text   Then   SpinEdit1.Text   :=   S;  
   
        QRPreview.PageNumber:=Spinedit1.Value;  
   
        If   (SpinEdit1.MaxValue<=1)   Then   Exit;  
   
        sbFirst.Enabled   :=   Not   (   Spinedit1.Value   =   1   );  
        sbPrev.Enabled   :=   Not   (   Spinedit1.Value   =   1   );  
        sbLast.Enabled   :=   Not   (   Spinedit1.Value   =   SpinEdit1.MaxValue   );  
        sbNext.Enabled   :=   Not   (   Spinedit1.Value   =   SpinEdit1.MaxValue   );  
  end;  
   
  procedure   TPrevForm.sbFirstClick(Sender:   TObject);  
  begin  
      SpinEdit1.Value   :=   1;  
  end;  
   
  procedure   TPrevForm.sbPrevClick(Sender:   TObject);  
  begin  
      If   SpinEdit1.Value   >   1   Then  
          SpinEdit1.Value   :=   SpinEdit1.Value   -   1;  
  end;  
   
  procedure   TPrevForm.sbNextClick(Sender:   TObject);  
  begin  
      If   SpinEdit1.Value   <   SpinEdit1.MaxValue   Then  
          SpinEdit1.Value   :=   SpinEdit1.Value   +   1;  
  end;  
   
  procedure   TPrevForm.sbLastClick(Sender:   TObject);  
  begin  
      SpinEdit1.Value   :=   SpinEdit1.MaxValue;  
  end;  
   
  procedure   TPrevForm.SpinEdit2Change(Sender:   TObject);  
  begin  
        If   SpinEdit2.Text   =   ''   Then   Exit;  
   
        If   (   QRPreview.Zoom   <>   SpinEdit2.Value   )   Then  
            QRPreview.Zoom   :=   SpinEdit2.Value;  
        If   fBtnClick   Then  
            Begin  
                fBtnClick   :=   false;  
                Exit;  
            End;  
        Button1.Down   :=   false;  
        Button2.Down   :=   false;  
        Button3.Down   :=   false;  
  end;  
   
  procedure   TPrevForm.Button1Click(Sender:   TObject);  
  begin  
      Button1.Down   :=   true;  
      QRPreview.ZoomToFit;  
      If   SpinEdit2.Value=QRPreview.Zoom   Then   Exit;  
      fBtnClick   :=   true;  
      SpinEdit2.Value:=QRPreview.Zoom;  
  end;  
   
  procedure   TPrevForm.Button2Click(Sender:   TObject);  
  begin  
      Button2.Down   :=   true;  
      QRPreview.ZoomToWidth;  
      If   SpinEdit2.Value=QRPreview.Zoom   Then   Exit;  
      fBtnClick   :=   true;  
      SpinEdit2.Value:=QRPreview.Zoom;  
  end;  
   
  procedure   TPrevForm.button3Click(Sender:   TObject);  
  begin  
      Button3.Down   :=   true;  
      QRPreview.Zoom   :=   100;  
      If   SpinEdit2.Value=QRPreview.Zoom   Then   Exit;  
      fBtnClick   :=   true;  
      SpinEdit2.Value   :=   100;  
  end;  
   
  procedure   TPrevForm.CommMouseMove(Sender:   TObject;   Shift:   TShiftState;  
      X,   Y:   Integer);  
  begin  
      If   (   (Sender   As   TControl).Hint   <>   ''   )     Then  
          lbMessage.Caption   :=   GetLongHint((Sender   As   TControl).Hint)  
      Else  
          lbMessage.Caption   :=   '';  
  end;  
   
  procedure   TPrevForm.sbPrintClick(Sender:   TObject);  
  begin  
      If   QuickReport   <>   nil   Then  
          Begin  
              PrintDialog1.MaxPage   :=   QRPreview.QRPrinter.PageCount;  
              PrintDialog1.MinPage   :=   1;  
              PrintDialog1.ToPage   :=   QRPreview.QRPrinter.PageCount;  
              PrintDialog1.FromPage   :=   1;  
              If   Not   PrintDialog1.Execute   Then   Exit;  
              With   QuickReport.PrinterSettings   Do  
                  Begin  
                      Copies   :=   PrintDialog1.Copies;  
                      Duplex   :=   PrintDialog1.Collate;  
                      Case   PrintDialog1.PrintRange   Of  
                          prAllPages     :   Begin   FirstPage   :=   0;   LastPage   :=   0;   End;  
                          prSelection   :   Begin   FirstPage   :=   QRPreview.PageNumber;  
                                                                  LastPage     :=   QRPreview.PageNumber;  
                                                      End;  
                          prPageNums     :   Begin   FirstPage   :=   PrintDialog1.FromPage;  
                                                                  LastPage   :=   PrintDialog1.ToPage;  
                                                      End;  
                      End;  
                      ApplySettings(   QRPrinter   );  
                      ApplySettings(   QRPreview.QRPrinter   );  
                  End;  
          End;  
      QRPreview.QRPrinter.Print;  
  end;  
   
  procedure   TPrevForm.sbLoadClick(Sender:   TObject);  
  begin  
      If   Not   OpenDialog1.Execute   Then   Exit;  
      If   (   QuickReport   <>   nil   )   Then  
          Case   cn_MessageDlg(   '是否保存当前的报表内容?',   mtConfirmation,  
                        mbYesNoCancel,   0   )   Of  
              mrCancel   :   Exit;  
              mrYes           :   Begin  
                                        If   Not   SaveDialog1.Execute   Then   Exit;  
                                        Hourglass(   false,   true   );  
                                        Try  
                                            QRPreview.QRPrinter.Save(   SaveDialog1.FileName   );  
                                        Except  
                                            Hourglass(   false,   false   );  
                                            cn_MessageDlg(   '保存失败,可能磁盘写保护或已满!',  
                                                    mtError,   [mbOK],   0   );  
                                        End;  
                                        Hourglass(   false,   false   );  
                                    End;  
          End;  
      Hourglass(   false,   true   );  
      Try  
          QRPreview.QRPrinter.Cleanup;  
          QRPreview.QRPrinter   :=   nil;  
          QuickReport.QRPrinter.Load(   OpenDialog1.FileName   );  
          QRPreview.QRPrinter   :=   QuickReport.QRPrinter;  
      Except  
          Hourglass(   false,   false   );  
          cn_MessageDlg(   '该文件不是合法的QuickReport文件,或已被破坏!'   ,  
                                          mtError,   [mbOK],   0   );  
      End;  
      Hourglass(   false,   false   );  
  //     QRPreview.Refresh;  
  end;  
   
  procedure   TPrevForm.sbSaveClick(Sender:   TObject);  
  begin  
      If   Not   SaveDialog1.Execute   Then   Exit;  
      Hourglass(   false,   true   );  
      Try  
          QRPreview.QRPrinter.Save(   SaveDialog1.FileName   );  
      Except  
          Hourglass(   false,   false   );  
          cn_MessageDlg(   '保存失败,可能磁盘写保护或已满!',  
                                          mtError,   [mbOK],   0   );  
      End;  
      Hourglass(   false,   false   );  
  end;  
   
  procedure   TPrevForm.SpeedButton1Click(Sender:   TObject);  
  begin  
      Close;  
  end;  
   
  procedure   TPrevForm.QRPreviewProgressUpdate(Sender:   TObject;  
      Progress:   Integer);  
  begin  
      If   (   Progress   <=   0   )   Then  
          Begin  
              ProgressBar1.Visible   :=   false;  
  //             If   Not   QRPreview.Visible   Then     QRPreview.Visible   :=   True;  
              Exit;  
          End;  
      If   (   Progress   >=   100   )   Then  
          Begin  
              ProgressBar1.Visible   :=   false;  
  //             If   Not   QRPreview.Visible   Then     QRPreview.Visible   :=   True;  
          End  
      Else  
          Begin  
  //             If   QRPreview.Visible   Then     QRPreview.Visible   :=   false;  
              If   Not   ProgressBar1.Visible   Then   ProgressBar1.Visible   :=   true;  
              ProgressBar1.Position   :=   Progress;  
          End;  
  end;  
   
  procedure   TPrevForm.QRPreviewPageAvailable(Sender:   TObject;  
      PageNum:   Integer);  
  begin  
      If   fComboChanged   Then   Exit;  
      If   PageNum   <   QRPreview.QRPrinter.PageCount   Then   Exit;  
      ResetFormFace;  
  end;  
   
  Procedure   TPrevForm.ResetFormFace;  
  Begin  
        sbPrint.Enabled   :=   QRPreview.QRPrinter.PrinterOK;  
        SpinEdit1.MinValue:=1;  
        SpinEdit1.MaxValue:=QRPreview.QRPrinter.PageCount;  
        lbPages.Caption   :=   '总共有'  
            +FormatFloat(   '###,###,##0',SpinEdit1.MaxValue)+'页';  
        SpinEdit1.Value:=1;  
        Button2.Down   :=   true;  
        fBtnClick   :=   true;  
        QRPreview.ZoomToWidth;  
        SpinEdit2.Value   :=   QRPreview.Zoom;  
   
        sbFirst.Enabled   :=   false;  
        sbPrev.Enabled   :=   false;  
   
        SpinEdit1.Enabled   :=   Not   (SpinEdit1.MaxValue<=1);  
        sbNext.Enabled   :=   SpinEdit1.Enabled;  
        sbLast.Enabled   :=   SpinEdit1.Enabled;  
   
  {       ComboBox1.Visible   :=   (QuickReport   <>   nil);  
        If   ComboBox1.Visible   Then  
            If   QuickReport.Page.Orientation   =   poPortrait   Then  
                  ComboBox1.ItemIndex   :=   0  
              Else  
                  ComboBox1.ItemIndex   :=   1;  
  }  
  End;  
   
  procedure   TPrevForm.ComboBox1Change(Sender:   TObject);  
  begin  
      If   QuickReport   =   nil   Then   Exit;  
   
      If   (   ComboBox1.ItemIndex   =   0   )   And   (   QuickReport.Page.Orientation   =   poPortrait   )   Then   Exit;  
      If   (   ComboBox1.ItemIndex   =   1   )   And   (   QuickReport.Page.Orientation   =   poLandScape   )   Then   Exit;  
   
      If   ComboBox1.ItemIndex   =   0   Then  
          QuickReport.Page.Orientation   :=   poPortrait  
      Else  
          QuickReport.Page.Orientation   :=   poLandScape;  
      Hourglass(   false,   true   );  
      fComboChanged   :=   true;  
      Try  
          QRPreview.Visible   :=   false;  
          ComboBox1.Enabled   :=   false;  
  //         QRPreview.QRPrinter   :=   nil;  
          Try  
  //             QuickReport.QRPrinter.Free;  
  //             QuickReport.QRPrinter   :=   nil;  
  //             While   Not   QuickReport.Available   Do   Application.HandleMessage;  
  //             QuickReport.PrinterSettings.Orientation   :=   QuickReport.Page.Orientation;  
  //             QuickReport.PrinterSettings.ApplySettings(   QRPreview.QRPrinter   );  
              QuickReport.Prepare;  
              QRPreview.QRPrinter   :=   nil;  
              QRPreview.QRPrinter   :=   QuickReport.QRPrinter;  
              ResetFormFace;  
          Finally  
              ComboBox1.Enabled   :=   true;  
              QRPreview.Visible   :=   true;  
          End;  
      Finally  
          fComboChanged   :=   false;  
          Hourglass(   false,   false   );  
      End;  
  end;  
   
  procedure   TPrevForm.ComboBox1Enter(Sender:   TObject);  
  begin  
      CommMouseMove(   Sender,   [],   0,   0   );  
  end;  
   
  end.  
   
  Top

5 楼pipai(我是P派)回复于 2001-04-25 10:54:00 得分 0

你是否是指自定义QuickReport的报表预览,如是,则定义一个PrevWin,  
  然后在调用form如下调用:  
  var         PrevForm         :   TPrevForm;  
        ..........  
   
  procedure   THGDForm.FormCreate(Sender:   TObject);  
  begin  
      PrevForm   :=   TPrevForm.CreateForm(   nil,   QuickReport   );  
  end;  
   
  procedure   THGDForm.FormDestroy(Sender:   TObject);  
  begin  
      PrevForm.Free;  
  end;  
   
  procedure   THGDForm.QuickReportPreview(Sender:   TObject);  
  begin  
      PrevForm.QRPreview.QRPrinter   :=   TQRPrinter(Sender);  
      PrevForm.Show;  
  end;  
  我自己开发了一个prevform,如需要我发给你Top

6 楼pipai(我是P派)回复于 2001-04-25 10:57:00 得分 0

对不起,我以为没有发送成功,发了多次,耽误大家的时间,实在抱歉Top

7 楼wanwangzhiwang(万王之王)回复于 2001-04-25 10:58:00 得分 0

faint!Top

8 楼zoujmbird()回复于 2001-04-25 14:15:00 得分 0

请pipai(我是屁派) 发给我原程序,谢谢!sbxzjm@263.netTop

9 楼zoujmbird()回复于 2001-04-27 17:44:00 得分 0

谢谢!Top

相关问题

  • 如何自定义报表预览程序?
  • 如何自定义报表的字段?
  • 急急!!!QuickReport自定义预览窗口如何显示报表预览的进度(页数很多,用进度条显示)
  • 自定义报表
  • 自定义报表?
  • 自定义报表
  • 自定义报表
  • 紧急呼救:“自定义报表”如何设计表?
  • vfp报表如何自定义纸张大小,在线急等!
  • 如何在FAST REPORT 中自定义报表的大小

关键词

  • qrpreview
  • qrprinter
  • hourglass
  • tprevform
  • printdialog
  • spinedit
  • quickreport
  • messagedlg
  • savedialog
  • mterror

得分解答快速导航

  • 帖主:zoujmbird
  • pipai

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
惹火投票。。火热进行中...
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
CSDN网站24小时值班电话:13552009689
Copyright © 2000-2009, CSDN.NET, All Rights Reserved
GongshangLogo