⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 prpreview.pas

📁 是 delphi6的函数库
💻 PAS
字号:
unit prPreview;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, Buttons, StdCtrls, Spin, ComCtrls, PReport;

type
  TfrmPreview = class(TForm)
    StatusBar1: TStatusBar;
    ScrollBox1: TScrollBox;
    Panel1: TPanel;
    btnPrior: TSpeedButton;
    btnNext: TSpeedButton;
    btnFirst: TSpeedButton;
    btnLast: TSpeedButton;
    btnCancel: TSpeedButton;
    btnZoomOut: TSpeedButton;
    btnZoomIn: TSpeedButton;
    Bevel1: TBevel;
    Bevel3: TBevel;
    btnFit: TSpeedButton;
    btnEdit: TSpeedButton;
    btnPrint: TSpeedButton;
    cboScale: TComboBox;
    btnClose: TSpeedButton;
    PRClass1: TPRClass;
    procedure ScrollBox1Resize(Sender: TObject);
    procedure btnNextClick(Sender: TObject);
    procedure btnPriorClick(Sender: TObject);
    procedure btnFirstClick(Sender: TObject);
    procedure btnLastClick(Sender: TObject);
    procedure btnCancelClick(Sender: TObject);
    procedure btnZoomInClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure btnZoomOutClick(Sender: TObject);
    procedure FormResize(Sender: TObject);
    procedure btnFitClick(Sender: TObject);
    procedure btnEditClick(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure btnPrintClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure cboScaleChange(Sender: TObject);
    procedure PRClass1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure btnCloseClick(Sender: TObject);
  private
     ZoomRate:integer;
    IsFile:Boolean;
    IsStream:Boolean;
    FFiles:TStrings;
    FStreams:array of TStream;
    { Private declarations }
  public
    { Public declarations }
    PageCount: Integer;
    CurrentPage: Integer;
    DataNameFilst:Tlist;
    sPreviewFile:string;
    procedure updatepage;
    procedure UpdateStreams(Streams:array of TStream);

    procedure PrintFile(strFileName: string);
    procedure SetPreviewMode(bPreview: Boolean);
    procedure PreviewStreams(Streams:array of TStream);
    procedure PrintStreams(Streams:array of TStream);
  end;

var
  frmPreview: TfrmPreview;
  EnableBz: Boolean;
  EditeptBz:Boolean;

implementation

uses  prProgress, prBorder,prSplit,prColor,prIncline,prNewTable,
  PRDesigner;

{$R *.DFM}

procedure TfrmPreview.ScrollBox1Resize(Sender: TObject);
begin
  PRClass1.Left:=16;
  PRClass1.top:=16;
end;
procedure TfrmPreview.PreviewStreams(Streams: array of TStream);
begin
  IsStream:=True;
  try
    if Length(Streams)<1 then Exit;
    UpdateStreams(Streams);
    UpdatePage;
    ShowModal;
  finally
    IsStream:=False;
  end;
end;
procedure TfrmPreview.btnNextClick(Sender: TObject);
begin
  if CurrentPage >= PageCount then
    Exit;
  Inc(CurrentPage);
  UpdatePage;
end;

procedure TfrmPreview.btnPriorClick(Sender: TObject);
begin
  if CurrentPage <= 1 then  Exit;
  Dec(CurrentPage);
  UpdatePage;
end;

procedure TfrmPreview.PrintFile(strFileName: string);
begin
  PRClass1.LoadFromFile(strFileName);
  PRClass1.PrintIt;
end;

procedure TfrmPreview.SetPreviewMode(bPreview: Boolean);
begin
  PRClass1.IsPreview := bPreview;
  PRClass1.Refresh;
end;

procedure TfrmPreview.btnFirstClick(Sender: TObject);
begin
  CurrentPage := 1;
  UpdatePage;
end;

procedure TfrmPreview.btnLastClick(Sender: TObject);
begin
  CurrentPage := PageCount;
  UpdatePage;
end;

procedure TfrmPreview.btnCancelClick(Sender: TObject);
begin
   btnCancel.Enabled:=Not TPRExcute(Owner).CancelPrint;
end;

procedure TfrmPreview.btnZoomInClick(Sender: TObject);
begin
  PRClass1.FreeEdit;
  ZoomRate:=ZoomRate-10;
  ShowWindow(PRClass1.Handle, SW_HIDE);
  PRClass1.ReportScale := ZoomRate;
  ScrollBox1Resize(Self);
  ShowWindow(PRClass1.Handle, SW_SHOW);
end;

procedure TfrmPreview.FormCreate(Sender: TObject);
var
  strFileDir: TFileName;
begin
  height := 550;
  width := 715;
  PageCount := 1;
  CurrentPage := 1;
  zoomRate := 75;
  btnFit.OnClick(sender);
end;

procedure TfrmPreview.btnZoomOutClick(Sender: TObject);
begin
  PRClass1.FreeEdit;
  ZoomRate:=ZoomRate+10;
  ShowWindow(PRClass1.Handle, SW_HIDE);
  PRClass1.ReportScale := ZoomRate;
  ScrollBox1Resize(Self);
  ShowWindow(PRClass1.Handle, SW_SHOW);
end;

procedure TfrmPreview.PRClass1MouseUp(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  ZoomRate:=100;
end;
procedure TfrmPreview.updatepage;
var
  nPrevScale: Integer;
  strFileDir: TFileName;
begin
  nPrevScale := PRClass1.ReportScale;
  if PageCount>= CurrentPage then
     CurrentPage := CurrentPage  else CurrentPage :=1;

  if CurrentPage = 1 then
  begin
     btnPrior.Enabled := False;
     btnFirst.Enabled := false;
     btnNext.Enabled := true;
     btnLast.Enabled := true;
  end else
  begin
     btnPrior.Enabled := true;
     btnFirst.Enabled := true;
     if CurrentPage= PageCount  then
     begin
       btnNext.Enabled := false;
       btnLast.Enabled := false;
     end;
  end;
  StatusBar1.Panels[0].Text :='第'+IntToStr(CurrentPage)+'/' +IntToStr(PageCount) +  '页';

  LockWindowUpdate(Handle);

  if IsFile then PRClass1.LoadFromFile(FFiles[CurrentPage-1]);
  if IsStream then PRClass1.LoadFromStream(FStreams[Low(FStreams)+CurrentPage-1]);
  PRClass1.ReportScale := nPrevScale;
  PRClass1.Enabled:=EnableBz;
  LockWindowUpdate(0);
end;

procedure TfrmPreview.FormResize(Sender: TObject);
var z1,z2:integer;
begin
  if (height-110) < cp_pgh then
    z1:=trunc(((height-110) / cp_pgh)*100)  else   z1:=100;

  if (width-170) < cp_pgw then
    z2:=trunc(((width-170) / cp_pgw)*100)  else   z2:=100;

 if z1 <= z2 then  ZoomRate:=z1 else  ZoomRate:=z2;
//
  ShowWindow(PRClass1.Handle, SW_HIDE);
  PRClass1.ReportScale := ZoomRate;
  ScrollBox1Resize(Self);
  ShowWindow(PRClass1.Handle, SW_SHOW);
end;

procedure TfrmPreview.btnFitClick(Sender: TObject);
var z1,z2:integer;    //显示比例
begin
  PRClass1.FreeEdit; 

   if (height-110) < cp_pgh then  
    z1:=trunc(((height-110) / cp_pgh)*100) else z1:=100;

  if (width-170) < cp_pgw then  
    z2:=trunc(((width-170) / cp_pgw)*100) else z2:=100;

 if z1 <= z2 then ZoomRate:=z1
 else ZoomRate:=z2;

  ShowWindow(PRClass1.Handle, SW_HIDE);
  PRClass1.ReportScale := ZoomRate;
  ScrollBox1Resize(Self);
  ShowWindow(PRClass1.Handle, SW_SHOW);
end;

procedure TfrmPreview.btnEditClick(Sender: TObject);  
var i:integer;
begin
  Application.CreateForm(TfrmPRDesigner,frmPRDesigner);
  Application.CreateForm(TfrmBorder,frmBorder );
  Application.CreateForm(TColorform,Colorform );
  Application.CreateForm(TfrmIncline,frmIncline);
  Application.CreateForm(TfrmNewTable,frmNewTable);
  Application.CreateForm(TfrmSplit,frmSplit);
   //导致显示错误 if IsFile then      frmPRDesigner.PRClass1.LoadFromFile(FFiles[CurrentPage-1]);
   frmPRDesigner.PRClass1.LoadFromFile(sPreviewFile);
  frmPRDesigner.Caption:=sPreviewFile;
   frmPRDesigner.PRClass1.EditStatus:=true; 
  frmPRDesigner.TempFileName :=sPreviewFile;
  frmPRDesigner.savefilename := sPreviewFile;
  //传递数据
    frmPRDesigner.DSDefine:= TPRExcute(owner).Datasources; //传递定义数据
  frmPRDesigner.showmodal;

  if Self.Owner is TPRExcute then (Self.Owner as TPRExcute).UpdatePage;
  TPRExcute(owner).updatepage;  //
  btnFirst.OnClick(Sender); //预览第一页
  frmPRDesigner.Free;
  frmBorder.Free;
  Colorform.Free;
  frmIncline.Free;
  frmNewTable.Free;
  frmSplit.Free;
end;

procedure TfrmPreview.FormActivate(Sender: TObject);
begin
  PRClass1.Enabled:=EnableBz;
  Cpreviewedit:=btnEdit.Visible; //  如果充许编辑模板则可编辑单元格否则不行。
end;

procedure TfrmPreview.btnPrintClick(Sender: TObject);
begin
  btnCancel.Enabled:=True;
  TPRExcute(Owner).Print(true); //直接打印
  btnCancel.Enabled:=false;
end;

procedure TfrmPreview.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  frmPreview:=nil;
end;

procedure TfrmPreview.cboScaleChange(Sender: TObject);
var
  nScale: Integer;
begin
  case cboScale.ItemIndex of
    0: nScale := 200;
    1: nScale := 150;
    2: nScale := 125;
    3: nScale := 100;
    4: nScale := 75;
    5: nScale := 50;
    6: nScale := 20;
  else nScale := 100;
  end;
  PRClass1.FreeEdit;
  ShowWindow(PRClass1.Handle, SW_HIDE);
  PRClass1.ReportScale := nScale;
  ScrollBox1Resize(Self);
  ShowWindow(PRClass1.Handle, SW_SHOW);
end;
procedure TfrmPreview.UpdateStreams(Streams: array of TStream);
var
  FL,L,I:Integer;
begin
  SetLength(FStreams,Length(Streams));
  FL:=Low(FStreams);
  L:=Low(Streams);
  for I:=FL to High(FStreams) do begin
    FStreams[I]:=Streams[L+I-FL];
  end;
end;
procedure TfrmPreview.PrintStreams(Streams: array of TStream);
var
  I:Integer;
begin
  IsStream:=True;
  try
    for I:=Low(Streams) to High(Streams) do begin
      PRClass1.LoadFromStream(Streams[I]);
      PRClass1.PrintIt;
    end;
  finally
    IsStream:=False;
  end;
end;
procedure TfrmPreview.btnCloseClick(Sender: TObject);
begin
  Close;
end;

end.


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -