📄 prpreview.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 + -