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

📄 scformpreview.pas

📁 设备巡检操作系统 本程序是专门为某电厂开发的设备巡检系统
💻 PAS
📖 第 1 页 / 共 2 页
字号:
{*************************************************************************}
{ Rave Reports version 5.0                                               }
{ Copyright (c), 1995-2002, Nevrona Designs, all rights reserved          }
{*************************************************************************}
unit SCFormPreview;

interface

uses
  Windows, Messages, Graphics, Controls, Forms, Dialogs, StdCtrls,
  Buttons, ExtCtrls, Menus, ActnList, ImgList, ComCtrls, ToolWin,
  SysUtils, Classes, RpBase, RpFiler, RpRenderPrinter, RpRenderPreview,
  RpDefine, RpSystem, RpFormSetup;

type
  TSCRavePreviewForm = class(TForm)
    ScrollBox1: TScrollBox;
    ActionList1: TActionList;
    MainMenu1: TMainMenu;
    PopupMenu1: TPopupMenu;
    actnFile_Print: TAction;
    actnFile_Save: TAction;
    actnFile_Exit: TAction;
    actnFile_Open: TAction;
    sbarMain: TStatusBar;
    actnPage_First: TAction;
    actnPage_Next: TAction;
    actnPage_Previous: TAction;
    actnPage_Last: TAction;
    actnZoom_In: TAction;
    actnZoom_Out: TAction;
    actnZoom_PageWidth: TAction;
    actnZoom_Page: TAction;
    Page1: TMenuItem;
    Zoom1: TMenuItem;
    First1: TMenuItem;
    Next1: TMenuItem;
    Previous1: TMenuItem;
    Last1: TMenuItem;
    N2: TMenuItem;
    GotoPage1: TMenuItem;
    In1: TMenuItem;
    Out1: TMenuItem;
    N3: TMenuItem;
    Page2: TMenuItem;
    PageWidth1: TMenuItem;
    In2: TMenuItem;
    Out2: TMenuItem;
    ilstActions: TImageList;
    ToolBar1: TToolBar;
    ToolButton1: TToolButton;
    ToolButton2: TToolButton;
    ToolButton3: TToolButton;
    ToolButton4: TToolButton;
    ToolButton5: TToolButton;
    ToolButton6: TToolButton;
    ToolButton7: TToolButton;
    ToolButton8: TToolButton;
    ToolButton10: TToolButton;
    ToolButton11: TToolButton;
    ToolButton12: TToolButton;
    ToolButton13: TToolButton;
    ToolButton14: TToolButton;
    dlogOpen: TOpenDialog;
    dlogSave: TSaveDialog;
    File1: TMenuItem;
    Open1: TMenuItem;
    SaveAs1: TMenuItem;
    Print1: TMenuItem;
    N1: TMenuItem;
    Exit1: TMenuItem;
    ZoomEdit: TEdit;
    PageEdit: TEdit;
    PageLabel: TPanel;
    Panel1: TPanel;
    Panel2: TPanel;
    ToolButton9: TToolButton;
    ToolButton15: TToolButton;
    Panel3: TPanel;
    PreviewTimer: TTimer;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure NDRPreviewPageChange(Sender: TObject);
    procedure NDRPreviewZoomChange(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: word; Shift: TShiftState);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure actnFile_ExitExecute(Sender: TObject);
    procedure actnPage_GotoPageExecute(Sender: TObject);
    procedure actnZoom_InExecute(Sender: TObject);
    procedure actnZoom_OutExecute(Sender: TObject);
    procedure actnPage_PreviousExecute(Sender: TObject);
    procedure actnPage_NextExecute(Sender: TObject);
    procedure actnZoom_PageWidthExecute(Sender: TObject);
    procedure actnZoom_PageExecute(Sender: TObject);
    procedure actnFile_PrintExecute(Sender: TObject);
    procedure actnPage_FirstExecute(Sender: TObject);
    procedure actnPage_LastExecute(Sender: TObject);
    procedure actnPage_FirstUpdate(Sender: TObject);
    procedure actnPage_PreviousUpdate(Sender: TObject);
    procedure actnPage_NextUpdate(Sender: TObject);
    procedure actnPage_LastUpdate(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure actnFile_SaveExecute(Sender: TObject);
    procedure actnFile_OpenExecute(Sender: TObject);
    procedure actnFile_PrintUpdate(Sender: TObject);
    procedure actnFile_SaveUpdate(Sender: TObject);
    procedure actnZoom_InUpdate(Sender: TObject);
    procedure actnZoom_OutUpdate(Sender: TObject);
    procedure actnZoom_PageWidthUpdate(Sender: TObject);
    procedure actnZoom_PageUpdate(Sender: TObject);
    procedure ZoomEditKeyPress(Sender: TObject; var Key: Char);
    procedure ZoomEditExit(Sender: TObject);
    procedure PageEditExit(Sender: TObject);
    procedure PageEditKeyPress(Sender: TObject; var Key: Char);
    procedure PreviewTimerTimer(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormShow(Sender: TObject);
  protected
    FPageNum: integer;
    FOnGenerate: TNotifyEvent;
    FInputFileName: string;
    FInputStream: TStream;
    FOnAfterPreviewPrint: TNotifyEvent;

    procedure AfterPreviewPrintEvent; virtual;
    procedure SetSaveOptions(SaveDialog: TSaveDialog);
    procedure NewRenderPage(Sender: TObject);
    procedure SetButtonState;
  public
    ReportSystem: TRvSystem;
    FormClosed: boolean;
    RvRenderPrinter: TRvRenderPrinter;
    RvRenderPreview: TRvRenderPreview;
    //
    procedure InitFromRPSystem;
    procedure OpenFile(const AFileName: string);
    class procedure PreviewFile(const AFileName: string);

    property PageNum: integer read FPageNum write FPageNum;
    property OnGenerate: TNotifyEvent read FOnGenerate write FOnGenerate;
    property OnAfterPreviewPrint: TNotifyEvent read FOnAfterPreviewPrint write
      FOnAfterPreviewPrint;
    property InputFileName: string read FInputFileName write FInputFileName;
    property InputStream: TStream read FInputStream write FInputStream;
  end;

var
  SCRavePreviewForm: TSCRavePreviewForm;

implementation

{$R *.dfm}

uses
  RpRender;

procedure TSCRavePreviewForm.FormClose(Sender: TObject; var Action:
  TCloseAction);
begin
  FormClosed := true;
end;

procedure TSCRavePreviewForm.NDRPreviewPageChange(Sender: TObject);
begin
  with RvRenderPreview do begin
    PageEdit.Text := IntToStr(CurrentPage);
    PageLabel.Caption := Trans('of') + ' ' + IntToStr(Pages);
    PageLabel.Width := self.canvas.TextWidth(PageLabel.Caption) + 8;
    sbarMain.SimpleText := Trans('Page') + ' ' + IntToStr(CurrentPage) +
      ' ' + Trans('of') + ' ' + IntToStr(Pages);
  end; { with }
end;

procedure TSCRavePreviewForm.NDRPreviewZoomChange(Sender: TObject);
var
  S1: string[10];
begin
  Str(RvRenderPreview.ZoomFactor: 1: 1, S1);
  ZoomEdit.Text := S1;
  if Assigned(RvRenderPreview.Image) then begin
    RvRenderPreview.RedrawPage;
  end; { if }
end;

procedure TSCRavePreviewForm.FormKeyDown(Sender: TObject; var Key: word; Shift:
  TShiftState);
var
  I1: integer;
begin
  case Key of
    vk_Up: begin
        if (Shift = []) or (Shift = [ssCtrl]) then begin
          with ScrollBox1.VertScrollBar do begin
            I1 := Position - Increment;
            if I1 < 0 then begin
              if RvRenderPreview.CurrentPage > 1 then begin
                RvRenderPreview.PrevPage;
                I1 := Range;
              end else begin
                I1 := 0;
              end; { else }
            end; { if }
            Position := I1;
            Key := 0;
          end; { with }
        end; { if }
      end;
    vk_Down: begin
        if (Shift = []) or (Shift = [ssCtrl]) then begin
          with ScrollBox1.VertScrollBar do begin
            I1 := Position + Increment;
            if I1 >= Range then begin
              I1 := Range - 1;
            end; { if }
            Position := I1;
            if (I1 > Position) and (RvRenderPreview.CurrentPage <
              RvRenderPreview.Pages) then begin
              RvRenderPreview.NextPage;
              Position := 0;
            end; { if }
            Key := 0;
          end; { with }
        end; { if }
      end;
    vk_Home: begin
        if (Shift = []) or (Shift = [ssCtrl]) then begin
          with ScrollBox1.VertScrollBar do begin
            Position := 0;
            Key := 0;
          end; { with }
        end; { if }
      end;
    vk_End: begin
        if (Shift = []) or (Shift = [ssCtrl]) then begin
          with ScrollBox1.VertScrollBar do begin
            Position := Range - 1;
            Key := 0;
          end; { with }
        end; { if }
      end;
    vk_Prior: begin
        if (Shift = []) or (Shift = [ssCtrl]) then begin
          with ScrollBox1.VertScrollBar do begin
            if (Position = 0) and (RvRenderPreview.CurrentPage > 1) then begin
              RvRenderPreview.PrevPage;
              SetButtonState;
              I1 := Range - 1;
            end else begin
              I1 := Position - ScrollBox1.Height;
              if I1 < 0 then begin
                I1 := 0;
              end; { if }
            end; { else }
            Position := I1;
            Key := 0;
          end; { with }
        end; { if }
      end;
    vk_Next: begin
        if (Shift = []) or (Shift = [ssCtrl]) then begin
          with ScrollBox1.VertScrollBar do begin
            I1 := Position + ScrollBox1.Height;
            if I1 >= Range then begin
              if RvRenderPreview.CurrentPage < RvRenderPreview.Pages then begin
                RvRenderPreview.NextPage;
                SetButtonState;
                I1 := 0;
              end else begin
                I1 := Range - 1;
              end; { else }
            end; { if }
            Position := I1;
            Key := 0;
          end; { with }
        end; { if }
      end;
    vk_Left: begin
        with ScrollBox1.HorzScrollBar do begin
          if Shift = [ssCtrl] then begin
            I1 := Position - Increment;
            if I1 < 0 then begin
              I1 := 0;
            end; { if }
            Position := I1;
            Key := 0;
          end else if Shift = [ssCtrl, ssShift] then begin
            I1 := Position - ScrollBox1.Width;
            if I1 < 0 then begin
              I1 := 0;
            end; { if }
            Position := I1;
            Key := 0;
          end; { else }
        end; { with }
      end;
    vk_Right: begin
        with ScrollBox1.HorzScrollBar do begin
          if Shift = [ssCtrl] then begin
            I1 := Position + Increment;
            if I1 >= Range then begin
              I1 := Range - 1;
            end; { if }
            Position := I1;
            Key := 0;
          end else if Shift = [ssCtrl, ssShift] then begin
            I1 := Position + ScrollBox1.Width;
            if I1 >= Range then begin
              I1 := Range - 1;
            end; { if }
            Position := I1;
            Key := 0;
          end; { else }
        end; { with }
      end;
  end; { case }
end;

procedure TSCRavePreviewForm.FormKeyPress(Sender: TObject; var Key: Char);
var
  ValidKeys: string;
begin
  if (Key = #27) or (Key = 'x') then begin
    actnFile_Exit.Execute;
    Key := #0;
  end else begin
    ValidKeys := {Trans-} 'eEbBwWfFnNpP+-01234567890.'#13#8;
    if Pos(Key, ValidKeys) > 0 then begin
      case Key of
        'b', 'B': begin
            RvRenderPreview.RenderPage(1);
            SetButtonState;
            Key := #0;
          end;
        'e', 'E': begin
            RvRenderPreview.RenderPage(RvRenderPreview.Pages);
            SetButtonState;
            Key := #0;
          end;
        '-': begin
            RvRenderPreview.ZoomOut;
            SetButtonState;
            Key := #0;
          end;
        '+': begin
            RvRenderPreview.ZoomIn;
            SetButtonState;
            Key := #0;
          end;
        'w', 'W': begin
            RvRenderPreview.ZoomFactor := RvRenderPreview.ZoomPageWidthFactor;
            SetButtonState;
            Key := #0;
          end;
        'f', 'F': begin
            RvRenderPreview.ZoomFactor := RvRenderPreview.ZoomPageFactor;
            SetButtonState;
            Key := #0;
          end;
        'n', 'N': begin
            if RvRenderPreview.CurrentPage < RvRenderPreview.Pages then begin
              RvRenderPreview.NextPage;
              SetButtonState;
            end; { if }
            Key := #0;
          end;
        'p', 'P': begin
            if RvRenderPreview.CurrentPage > 1 then begin
              RvRenderPreview.PrevPage;
              SetButtonState;
            end; { if }
            Key := #0;
          end;
      end; { case }
    end else begin
      Key := #0;
    end; { else }
  end; { else }
  if Key = #0 then begin
    PageEdit.SelStart := 0;
    PageEdit.SelLength := Length(PageEdit.Text);
    ZoomEdit.SelStart := 0;
    ZoomEdit.SelLength := Length(ZoomEdit.Text);
  end; { if }
end;

procedure TSCRavePreviewForm.actnFile_ExitExecute(Sender: TObject);
begin
  Close;
end;

⌨️ 快捷键说明

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