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

📄 preview.pas

📁 企业智能(ERP)管理系统
💻 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 + -