📄 preview.pas
字号:
unit Preview;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ReportControl, ExtCtrls, Buttons, StdCtrls, Spin, ComCtrls;
type
TPreviewForm = class(TForm)
StatusBar1: TStatusBar;
ScrollBox1: TScrollBox;
ReportControl1: TReportControl;
Panel1: TPanel;
PrevPageBtn: TSpeedButton;
NextPageBtn: TSpeedButton;
CloseBtn: TSpeedButton;
But1: TSpeedButton;
But2: TSpeedButton;
SpeedButton2: TSpeedButton;
SpeedButton4: TSpeedButton;
SpeedButton5: TSpeedButton;
Bevel1: TBevel;
Bevel3: TBevel;
SpeedButton1: TSpeedButton;
SpeedButton3: TSpeedButton;
EditEptk: TSpeedButton;
Panel2: TPanel;
Panel3: TPanel;
PrintBtn: TSpeedButton;
procedure ScrollBox1Resize(Sender: TObject);
procedure NextPageBtnClick(Sender: TObject);
procedure PrevPageBtnClick(Sender: TObject);
procedure CloseBtnClick(Sender: TObject);
procedure But1Click(Sender: TObject);
procedure But2Click(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
// procedure SpeedButton4Click(Sender: TObject);
procedure SpeedButton5Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure SpeedButton4Click(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure ReportControl1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormResize(Sender: TObject);
procedure SpeedButton3Click(Sender: TObject);
procedure EditEptkClick(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure PrintBtnClick(Sender: TObject);
private
zoomxxx: integer; // add 李泽伦
FIsFile:Boolean;
FIsStream:Boolean;
FFiles:TStrings;
FStreams:array of TStream;
FReportEnable:Boolean;
FReportEdit: Boolean;
procedure SetReportEnable(const Value: Boolean);
procedure SetReportEdit(const Value: Boolean);
public
{ Public declarations }
CurrentPage: Integer;
PageCount: Integer;
DataNameFilst: Tlist;
procedure UpdatePage;
procedure UpdateFiles(Files: TStrings);
procedure UpdateStreams(Streams:array of TStream);
procedure PrintFiles(Files: TStrings);
procedure PrintStreams(Streams:array of TStream);
procedure PreviewFiles(Files: TStrings);
procedure PreviewStreams(Streams:array of TStream);
procedure SetPreviewMode(bPreview: Boolean);
function GetStream(Page:Integer):TStream;
function GetFile(Page:Integer):String;
property IsFile:Boolean read FIsFile;
property IsStream:Boolean read FIsStream;
property ReportEnable:Boolean read FReportEnable write SetReportEnable;
property ReportEdit:Boolean read FReportEdit write SetReportEdit;
end;
implementation
uses REPmess
, Creport, About, Border, vsplit, Color, diagonal, NewDialog; // add 李泽伦
{$R *.DFM}
procedure TPreviewForm.ScrollBox1Resize(Sender: TObject);
begin
///////////////////////////// add 李泽伦
if ClientRect.Right > ReportControl1.Width + 20 then
ReportControl1.Left := (ClientRect.Right - ReportControl1.Width - 20) div 2
else
ReportControl1.Left := 23;
if ((height - 110 - ReportControl1.Height) div 2) + 10 > 10 then
ReportControl1.top := ((height - 110 - ReportControl1.Height) div 2) + 10
else
ReportControl1.top := 10;
//////////////////////////
end;
procedure TPreviewForm.NextPageBtnClick(Sender: TObject);
begin
if CurrentPage >= PageCount then
Exit;
Inc(CurrentPage);
UpdatePage;
end;
procedure TPreviewForm.PrevPageBtnClick(Sender: TObject);
begin
if CurrentPage <= 1 then
Exit;
Dec(CurrentPage);
UpdatePage;
end;
procedure TPreviewForm.CloseBtnClick(Sender: TObject);
begin
Close;
end;
procedure TPreviewForm.PrintFiles(Files: TStrings);
var
I:Integer;
begin
FIsFile:=True;
try
for I:=0 to Files.Count-1 do begin
ReportControl1.LoadFromFile(Files[I]);
ReportControl1.PrintIt;
end;
finally
FIsFile:=False;
end;
end;
procedure TPreviewForm.SetPreviewMode(bPreview: Boolean);
begin
ReportControl1.IsPreview := bPreview;
ReportControl1.Refresh;
end;
procedure TPreviewForm.But1Click(Sender: TObject);
begin
CurrentPage := 1;
UpdatePage;
end;
procedure TPreviewForm.But2Click(Sender: TObject);
begin
CurrentPage := PageCount;
UpdatePage;
end;
procedure TPreviewForm.SpeedButton2Click(Sender: TObject);
begin
SpeedButton2.Enabled := not TReportRunTime(Owner).CancelPrint;
end;
procedure TPreviewForm.SpeedButton5Click(Sender: TObject);
begin
//add 李泽伦
ReportControl1.FreeEdit;
zoomxxx := zoomxxx - 10;
ShowWindow(ReportControl1.Handle, SW_HIDE);
ReportControl1.ReportScale := zoomxxx;
ScrollBox1Resize(Self);
ShowWindow(ReportControl1.Handle, SW_SHOW);
end;
procedure TPreviewForm.FormCreate(Sender: TObject);
begin
height := 550;
width := 715;
PageCount := 1;
CurrentPage := 1;
zoomxxx := 75;
//if IsFile then
// ReportControl1.LoadFromFile(FFiles[CurrentPage-1]);
//if IsStream then
// ReportControl1.LoadFromStream(FStreams[Low(FStreams)+CurrentPage-1]);
//StatusBar1.Panels[0].Text := '第' + IntToStr(CurrentPage) + '/' + IntToStr(PageCount) + '页';
SpeedButton3.OnClick(sender);
end;
procedure TPreviewForm.SpeedButton4Click(Sender: TObject);
begin
//add 李泽伦
ReportControl1.FreeEdit;
zoomxxx := zoomxxx + 10;
ShowWindow(ReportControl1.Handle, SW_HIDE);
ReportControl1.ReportScale := zoomxxx;
ScrollBox1Resize(Self);
ShowWindow(ReportControl1.Handle, SW_SHOW);
end;
procedure TPreviewForm.SpeedButton1Click(Sender: TObject);
begin
if tReportRunTime(owner).shpreview = true then
But1.OnClick(Sender); //预览第一页
SpeedButton3Click(owner); //显示整页
end;
procedure TPreviewForm.ReportControl1MouseUp(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
zoomxxx := 100;
end;
procedure TPreviewForm.UpdatePage;
var
nPrevScale: Integer;
begin
nPrevScale := ReportControl1.ReportScale;
if IsFile then
PageCount:=FFiles.Count;
if IsStream then
PageCount:=High(FStreams)-Low(FStreams)+1;
if PageCount < CurrentPage then
CurrentPage := PageCount;
PrevPageBtn.Enabled := CurrentPage > 1;
but1.Enabled := CurrentPage > 1;
NextPageBtn.Enabled := CurrentPage < PageCount;
but2.Enabled := CurrentPage < PageCount;
StatusBar1.Panels[0].Text := '第' + IntToStr(CurrentPage) + '/' + IntToStr(PageCount) + '页';
LockWindowUpdate(Handle);
if IsFile then
ReportControl1.LoadFromFile(FFiles[CurrentPage-1]);
if IsStream then
ReportControl1.LoadFromStream(FStreams[Low(FStreams)+CurrentPage-1]);
ReportControl1.ReportScale := nPrevScale;
SetReportEnable(FReportEnable);
SetReportEdit(FReportEdit);
LockWindowUpdate(0);
end;
procedure TPreviewForm.FormResize(Sender: TObject);
var
z1, z2: integer;
begin
// add 李泽伦
////////////////////////////////
if (height - 110) < ReportControl1.cp_pgh then
z1 := trunc(((height - 110) / ReportControl1.cp_pgh) * 100)
else
z1 := 100;
if (width - 170) < ReportControl1.cp_pgw then
z2 := trunc(((width - 170) / ReportControl1.cp_pgw) * 100)
else
z2 := 100;
if z1 <= z2 then
zoomxxx := z1
else
zoomxxx := z2;
////////////////////////////////////////////////////
ShowWindow(ReportControl1.Handle, SW_HIDE);
ReportControl1.ReportScale := zoomxxx;
ScrollBox1Resize(Self);
ShowWindow(ReportControl1.Handle, SW_SHOW);
end;
procedure TPreviewForm.SpeedButton3Click(Sender: TObject); // add 李泽伦
var
z1, z2: integer;
begin
ReportControl1.FreeEdit; // add 李泽伦
{ if (width-171) > (height-110) then
zoomxxx:=trunc(((height-110) / cp_pgh)*100)
else
zoomxxx:=trunc(((width-171) / cp_pgw)*100);
}
if (height - 110) < ReportControl1.cp_pgh then // add 李泽伦
z1 := trunc(((height - 110) / ReportControl1.cp_pgh) * 100)
else
z1 := 100;
if (width - 170) < ReportControl1.cp_pgw then // add 李泽伦
z2 := trunc(((width - 170) / ReportControl1.cp_pgw) * 100)
else
z2 := 100;
if z1 <= z2 then // add 李泽伦
zoomxxx := z1
else
zoomxxx := z2;
ShowWindow(ReportControl1.Handle, SW_HIDE);
ReportControl1.ReportScale := zoomxxx;
ScrollBox1Resize(Self);
ShowWindow(ReportControl1.Handle, SW_SHOW);
end;
procedure TPreviewForm.EditEptkClick(Sender: TObject); // add 李泽伦
var
Creportform:TCreportform;
begin
Creportform:=TCreportform.Create(Self);
try
if IsFile then
Creportform.LoadFromFile(FFiles[CurrentPage-1]);
if IsStream then
Creportform.LoadFromStream(FStreams[Low(FStreams)+CurrentPage-1]);
//editept:=true;
Creportform.SpeedButton4.Enabled:=False;//不允许预览
Creportform.ShowModal;
//editept:=false;
if Self.Owner is TReportRunTime then
(Self.Owner as TReportRunTime).UpdatePage;
But1.OnClick(Sender); //预览第一页
finally
Creportform.Free;
end;
end;
procedure TPreviewForm.FormActivate(Sender: TObject);
begin
SetReportEnable(FReportEnable);
SetReportEdit(FReportEdit);
//Cpreviewedit := EditEptk.Visible; //add lzl 如果充许编辑模板则可编辑单元格否则不行。
end;
procedure TPreviewForm.PrintBtnClick(Sender: TObject);
begin
SpeedButton2.Enabled := True;
TReportRunTime(Owner).Print(false);
SpeedButton2.Enabled := false;
end;
procedure TPreviewForm.PrintStreams(Streams: array of TStream);
var
I:Integer;
begin
FIsStream:=True;
try
for I:=Low(Streams) to High(Streams) do begin
ReportControl1.LoadFromStream(Streams[I]);
ReportControl1.PrintIt;
end;
finally
FIsStream:=False;
end;
end;
procedure TPreviewForm.PreviewFiles(Files: TStrings);
begin
FIsFile:=True;
try
if Files.Count<1 then Exit;
UpdateFiles(Files);
UpdatePage;
ShowModal;
finally
FIsFile:=False;
end;
end;
procedure TPreviewForm.PreviewStreams(Streams: array of TStream);
begin
FIsStream:=True;
try
if Length(Streams)<1 then Exit;
UpdateStreams(Streams);
UpdatePage;
ShowModal;
finally
FIsStream:=False;
end;
end;
function TPreviewForm.GetFile(Page: Integer): String;
begin
if IsFile then
Result:=FFiles[Page-1]
else
Result:='';
end;
function TPreviewForm.GetStream(Page: Integer): TStream;
begin
if IsStream then
Result:=FStreams[Low(FStreams)+Page-1]
else
Result:=nil;
end;
procedure TPreviewForm.SetReportEnable(const Value: Boolean);
begin
ReportControl1.Enabled:=Value;
FReportEnable := Value;
end;
procedure TPreviewForm.SetReportEdit(const Value: Boolean);
begin
editeptk.Visible := Value;
FReportEdit := Value;
end;
procedure TPreviewForm.UpdateFiles(Files: TStrings);
begin
FFiles:=Files;
end;
procedure TPreviewForm.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;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -