?? preview.pas
字號(hào):
UNIT Preview;
INTERFACE
USES
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ReportControl, ExtCtrls, Buttons, StdCtrls, Spin, ComCtrls, Menus;
TYPE
TPreviewForm = CLASS(TForm)
StatusBar1: TStatusBar;
ScrollBox1: TScrollBox;
Panel1: TPanel;
SpeedButton2: TSpeedButton;
SpeedButton4: TSpeedButton;
SpeedButton5: TSpeedButton;
Bevel1: TBevel;
SpeedButton1: TSpeedButton;
SpeedButton3: TSpeedButton;
EditEptk: TSpeedButton;
Panel2: TPanel;
Panel3: TPanel;
PrintBtn: TSpeedButton;
filename: TLabel;
PrevPageBtn: TSpeedButton;
NextPageBtn: TSpeedButton;
But1: TSpeedButton;
But2: TSpeedButton;
Bevel2: TBevel;
PopupMenu1: TPopupMenu;
clBtnFace1: TMenuItem;
Bevel5: TBevel;
btnClose: TSpeedButton;
Bevel3: TBevel;
fh: TSpeedButton;
Bevel4: TBevel;
ReportControl1: TReportControl;
PROCEDURE ScrollBox1Resize(Sender: TObject);
PROCEDURE NextPageBtnClick(Sender: TObject);
PROCEDURE PrevPageBtnClick(Sender: TObject);
PROCEDURE But1Click(Sender: TObject);
PROCEDURE But2Click(Sender: TObject);
PROCEDURE SpeedButton2Click(Sender: TObject);
PROCEDURE FormCreate(Sender: TObject);
PROCEDURE FormResize(Sender: TObject);
PROCEDURE SpeedButton3Click(Sender: TObject);
PROCEDURE ReportControl1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
PROCEDURE FormClose(Sender: TObject; VAR Action: TCloseAction);
PROCEDURE btnCloseClick(Sender: TObject);
PROCEDURE SpeedButton4Click(Sender: TObject);
PROCEDURE SpeedButton5Click(Sender: TObject);
PROCEDURE SpeedButton1Click(Sender: TObject);
PROCEDURE PrintBtnClick(Sender: TObject);
PROCEDURE FormActivate(Sender: TObject);
PROCEDURE EditEptkClick(Sender: TObject);
PROCEDURE clBtnFace1Click(Sender: TObject);
PROCEDURE FormCloseQuery(Sender: TObject; VAR CanClose: Boolean);
PRIVATE
zoomxxx: integer; // add 李澤倫
FIsStream: Boolean;
FFiles: TStrings;
FStreams: ARRAY OF TStream;
PUBLIC
{ Public declarations }
CurrentPage: Integer;
PageCount: Integer;
DataNameFilst: Tlist;
ReportEdit: Boolean;
PROCEDURE UpdatePage;
PROCEDURE UpdateFiles(Files: TStrings);
PROCEDURE UpdateStreams(Streams: ARRAY OF TStream);
PROCEDURE PrintStreams(Streams: ARRAY OF TStream);
PROCEDURE PreviewStreams(Streams: ARRAY OF TStream);
PROCEDURE SetPreviewMode(bPreview: Boolean);
FUNCTION GetStream(Page: Integer): TStream;
PROPERTY IsStream: Boolean READ FIsStream;
END;
IMPLEMENTATION
USES Margin, Creport;
{$R *.DFM}
PROCEDURE TPreviewForm.ScrollBox1Resize(Sender: TObject);
BEGIN
IF ClientRect.Right > ReportControl1.Width + 20 THEN
ReportControl1.Left := (ClientRect.Right - ReportControl1.Width - 30) DIV 2
ELSE
ReportControl1.Left := 18;
IF ((height - 110 - ReportControl1.Height) DIV 2) + 10 > 10 THEN
ReportControl1.top := ((height - 110 - ReportControl1.Height) DIV 2) + 10
ELSE
ReportControl1.top := 5;
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.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.FormCreate(Sender: TObject);
BEGIN
PageCount := 1;
CurrentPage := 1;
zoomxxx := 100;
tag := 0;
END;
PROCEDURE TPreviewForm.UpdatePage;
VAR
nPrevScale: Integer;
BEGIN
nPrevScale := ReportControl1.ReportScale;
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);
ReportControl1.LoadFromStream(FStreams[Low(FStreams) + CurrentPage - 1]);
LockWindowUpdate(0);
ShowWindow(ReportControl1.Handle, SW_HIDE);
ReportControl1.ReportScale := zoomxxx;
ShowWindow(ReportControl1.Handle, SW_SHOW);
END;
PROCEDURE TPreviewForm.FormResize(Sender: TObject);
VAR
z1, z2: integer;
BEGIN
////////////////////////////////
IF (ScrollBox1.Height) < pgh THEN // lzl
z1 := trunc(((ScrollBox1.Height - 10) / pgh) * 100)
ELSE
z1 := 100;
IF (ScrollBox1.Width) < pgw THEN // add
z2 := trunc(((ScrollBox1.Width - 35) / 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.SpeedButton3Click(Sender: TObject); // add
VAR
z1, z2: integer;
BEGIN
IF (ScrollBox1.Height) < pgh THEN // add
z1 := trunc(((ScrollBox1.Height - 10) / pgh) * 100)
ELSE
z1 := 100-1;
IF (ScrollBox1.Width) < pgw THEN // add
z2 := trunc(((ScrollBox1.Width - 35) / pgw) * 100)
ELSE
z2 := 100-1;
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.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.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.GetStream(Page: Integer): TStream;
BEGIN
IF IsStream THEN
Result := FStreams[Low(FStreams) + Page - 1]
ELSE
Result := NIL;
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;
PROCEDURE TPreviewForm.ReportControl1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
VAR
pt, ptOrg: TPoint;
BEGIN
END;
PROCEDURE TPreviewForm.FormClose(Sender: TObject;
VAR Action: TCloseAction);
BEGIN
TReportRunTime(owner).DeleteTempStreams;
END;
PROCEDURE TPreviewForm.btnCloseClick(Sender: TObject);
BEGIN
Close;
END;
PROCEDURE TPreviewForm.SpeedButton4Click(Sender: TObject);
BEGIN
zoomxxx := zoomxxx + 10;
ShowWindow(ReportControl1.Handle, SW_HIDE);
ReportControl1.ReportScale := zoomxxx;
ScrollBox1Resize(Self);
ShowWindow(ReportControl1.Handle, SW_SHOW);
END;
PROCEDURE TPreviewForm.SpeedButton5Click(Sender: TObject);
BEGIN
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
ReportControl1.Visible := false;
ReportControl1.LoadFromFile(filename.caption); //裝入模版以做修改頁面或紙張
IF TMarginForm.EditReportControl(Self, ReportControl1) = mrOK THEN
BEGIN
pgw := 0;
ReportControl1.CalcWndSize;
ReportControl1.SaveToFile(filename.caption);
TReportRunTime(owner).UpdatePage;
END;
But1.OnClick(Sender); //預(yù)覽第一頁
SpeedButton3Click(Sender); //保證紙張變化后,顯示適中
ReportControl1.Visible := true;
END;
PROCEDURE TPreviewForm.PrintBtnClick(Sender: TObject);
BEGIN
SpeedButton2.Enabled := True;
TReportRunTime(Owner).Print(false);
SpeedButton2.Enabled := false;
END;
PROCEDURE TPreviewForm.FormActivate(Sender: TObject);
BEGIN
ReportControl1.CPreviewEdit := true;
SpeedButton3.OnClick(sender);
END;
PROCEDURE TPreviewForm.EditEptkClick(Sender: TObject);
VAR
Creportform: TCreportform;
BEGIN
Creportform := TCreportform.Create(Self);
TRY
Creportform.ReportControl1.LoadFromFile(filename.Caption);
Creportform.FFile := filename.Caption;
// IF (Self.Owner AS TReportRunTime).CreportButt THEN
IF PLCreportButt THEN
Creportform.setbuttonClose; //在模版程序中只能修改字體等
Creportform.Caption := filename.Caption;
Creportform.ShowModal;
IF Creportform.Tag = 1 THEN //=1說明修改過
BEGIN
IF Self.Owner IS TReportRunTime THEN
(Self.Owner AS TReportRunTime).UpdatePage;
But1.OnClick(Sender); //預(yù)覽第一頁
END;
FINALLY
Creportform.Free;
END;
SpeedButton3.OnClick(sender);
END;
PROCEDURE TPreviewForm.clBtnFace1Click(Sender: TObject);
var zomk:integer;
BEGIN
zomk:=zoomxxx;
ReportControl1.Visible := false;
ReportControl1.SetFileCellWidth(filename.Caption, Tag);
TReportRunTime(owner).UpdatePage;
But1.OnClick(Sender); //預(yù)覽第一頁
clBtnFace1.Enabled := false;
fh.Enabled := false;
ShowWindow(ReportControl1.Handle, SW_HIDE);
zoomxxx:=zomk;
ReportControl1.ReportScale := zoomxxx;
ScrollBox1Resize(Self);
ShowWindow(ReportControl1.Handle, SW_SHOW);
ReportControl1.Visible := true;
END;
PROCEDURE TPreviewForm.FormCloseQuery(Sender: TObject;
VAR CanClose: Boolean);
BEGIN
ReportControl1.CPreviewEdit := false;
END;
END.
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -