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

📄 scformpreview.pas

📁 设备巡检操作系统 本程序是专门为某电厂开发的设备巡检系统
💻 PAS
📖 第 1 页 / 共 2 页
字号:
procedure TSCRavePreviewForm.actnPage_GotoPageExecute(Sender: TObject);
var
  I1: integer;
begin
  I1 := StrToIntDef(Inputbox(Trans('Go to Page'),
    Trans('Enter page to move to:'),
    IntToStr(RvRenderPreview.CurrentPage)), -1);
  if (I1 > -1) and (RvRenderPreview.CurrentPage <> I1) then begin
    RvRenderPreview.RenderPage(I1);
  end; { if }
  SetButtonState;
end;

procedure TSCRavePreviewForm.actnZoom_InExecute(Sender: TObject);
begin
  RvRenderPreview.ZoomIn;
  SetButtonState;
end;

procedure TSCRavePreviewForm.actnZoom_OutExecute(Sender: TObject);
begin
  RvRenderPreview.ZoomOut;
  SetButtonState;
end;

procedure TSCRavePreviewForm.actnPage_PreviousExecute(Sender: TObject);
begin
  RvRenderPreview.PrevPage;
  SetButtonState;
end;

procedure TSCRavePreviewForm.actnPage_NextExecute(Sender: TObject);
begin
  RvRenderPreview.NextPage;
  SetButtonState;
end;

procedure TSCRavePreviewForm.actnZoom_PageWidthExecute(Sender: TObject);
begin
  RvRenderPreview.ZoomFactor := RvRenderPreview.ZoomPageWidthFactor;
  SetButtonState;
end;

procedure TSCRavePreviewForm.actnZoom_PageExecute(Sender: TObject);
begin
  RvRenderPreview.ZoomFactor := RvRenderPreview.ZoomPageFactor;
  SetButtonState;
end;

procedure TSCRavePreviewForm.actnFile_PrintExecute(Sender: TObject);
var
  DoPrint: boolean;
  I1: integer;
  ForceCopies: integer;
begin
  if soAllowPrintFromPreview in ReportSystem.SystemOptions then begin
    RvRenderPrinter.NDRStream := RvRenderPreview.NDRStream;
    RvRenderPrinter.Pages := RvRenderPreview.Pages;
    if ssAllowPreviewSetup in ReportSystem.SystemSetups then begin
      with TRpSetupForm.Create(self) do try
        PreviewSetup := true;
        ReportSystem := Self.ReportSystem;
        FilePrinter := RvRenderPrinter;
        DoPrint := (ShowModal = mrOK);
        RvRenderPrinter.IgnoreFileSettings := true;
      finally
        Free;
      end; { with }
    end else begin
      DoPrint := true;
    end; { else }

    if DoPrint then begin
      if (RvRenderPrinter.MaxCopies <= 1) and (RvRenderPrinter.Copies > 1) then
      begin
        ForceCopies := RvRenderPrinter.Copies;
        RvRenderPrinter.Copies := 1;
      end else begin
        ForceCopies := 1;
      end; { else }
      for I1 := 1 to ForceCopies do begin
        if Assigned(RvRenderPrinter.NDRStream) then begin
          RvRenderPrinter.Render(RvRenderPrinter.NDRStream);
        end else begin
          RvRenderPrinter.Render(InputStream);
        end; { else }
      end; { for }
      AfterPreviewPrintEvent;
      RvRenderPrinter.NDRStream := nil
    end; { if }
  end; { if }
  SetButtonState;
end;

procedure TSCRavePreviewForm.actnPage_FirstExecute(Sender: TObject);
begin
  RvRenderPreview.RenderPage(1);
  SetButtonState;
end;

procedure TSCRavePreviewForm.actnPage_LastExecute(Sender: TObject);
begin
  RvRenderPreview.RenderPage(RvRenderPreview.Pages);
  SetButtonState;
end;

procedure TSCRavePreviewForm.actnPage_FirstUpdate(Sender: TObject);
begin
  actnPage_First.Enabled := RvRenderPreview.CurrentPage > 1;
end;

procedure TSCRavePreviewForm.actnPage_PreviousUpdate(Sender: TObject);
begin
  actnPage_Previous.Enabled := RvRenderPreview.CurrentPage > 1;
end;

procedure TSCRavePreviewForm.actnPage_NextUpdate(Sender: TObject);
begin
  actnPage_Next.Enabled := RvRenderPreview.CurrentPage < RvRenderPreview.Pages;
end;

procedure TSCRavePreviewForm.actnPage_LastUpdate(Sender: TObject);
begin
  actnPage_Last.Enabled := RvRenderPreview.CurrentPage < RvRenderPreview.Pages;
end;

procedure TSCRavePreviewForm.FormCreate(Sender: TObject);
begin
  FPageNum := 1;

  RvRenderPreview := TRvRenderPreview.Create(self);
  with RvRenderPreview do begin
    OnZoomChange := NDRPreviewZoomChange;
    OnPageChange := NDRPreviewPageChange;
    ShadowDepth := 2;
    MarginPercent := 5;
    ZoomFactor := 100;
    ScrollBox := ScrollBox1;
  end; { with }

  RvRenderPrinter := TRvRenderPrinter.Create(self);
  with RvRenderPrinter do begin
  end; { with }
end;

procedure TSCRavePreviewForm.OpenFile(const AFileName: string);
begin
  with RvRenderPreview do begin
    InputFileName := AFileName;
    NDRStream.Free;
    Render(InputFileName);
    Caption := Application.Title + {Trans-} ' - [ ' +
      ExtractFileName(InputFileName) + {Trans-} ' ]';
  end; { with }
end;

procedure TSCRavePreviewForm.actnFile_SaveExecute(Sender: TObject);
var
  LDestStream: TFileStream;
  LRender: TRpRenderStream;
  LStreamPos: integer;
  LRenderList: TStrings;
begin
{ TODO: Allow user to select a single page or page range to save/export }
  SetSaveOptions(dlogSave);
  if dlogSave.Execute then begin
    Screen.Cursor := crHourGlass;
    try
      LStreamPos := RvRenderPreview.NDRStream.Position;
        // Save this before messing with its stream
      try
        RvRenderPreview.NDRStream.Position := 0;

        if dlogSave.FilterIndex > 1 then begin // Do Render
          LRenderList := TStringList.Create;
          try
            RpRender.GetRenderList(LRenderList);
            LRender := TRpRenderStream(LRenderList.Objects[dlogSave.FilterIndex
              - 2]);
            LRender.OutputFileName := dlogSave.FileName;
            LRender.Render(RvRenderPreview.NDRStream);
          finally
            LRenderList.Free;
          end; { tryf }
        end else begin // Do NDR
          LDestStream := TFileStream.Create(dlogSave.Filename, fmCreate);
          try
            LDestStream.CopyFrom(RvRenderPreview.NDRStream,
              RvRenderPreview.NDRStream.Size);
          finally
            FreeAndNil(LDestStream);
          end; { tryf }
        end; { else }
      finally
        RvRenderPreview.NDRStream.Position := LStreamPos;
      end; { tryf }
    finally
      Screen.Cursor := crDefault;
    end; { tryf }
  end; { if }
  SetButtonState;
end;

procedure TSCRavePreviewForm.actnFile_OpenExecute(Sender: TObject);
begin
  if dlogOpen.Execute then begin
    OpenFile(dlogOpen.Filename);
  end; { if }
  SetButtonState;
end;

procedure TSCRavePreviewForm.actnFile_PrintUpdate(Sender: TObject);
begin
  actnFile_Print.Enabled := true; //RvRenderPreview.Rendering;
end;

procedure TSCRavePreviewForm.actnFile_SaveUpdate(Sender: TObject);
begin
  actnFile_Save.Enabled := true; //RvRenderPreview.Rendering;
end;

procedure TSCRavePreviewForm.actnZoom_InUpdate(Sender: TObject);
begin
  actnZoom_In.Enabled := true; //RvRenderPreview.Rendering;
end;

procedure TSCRavePreviewForm.actnZoom_OutUpdate(Sender: TObject);
begin
  actnZoom_Out.Enabled := true; //RvRenderPreview.Rendering;
end;

procedure TSCRavePreviewForm.actnZoom_PageWidthUpdate(Sender: TObject);
begin
  actnZoom_PageWidth.Enabled := true; //RvRenderPreview.Rendering;
end;

procedure TSCRavePreviewForm.actnZoom_PageUpdate(Sender: TObject);
begin
  actnZoom_Page.Enabled := true; //RvRenderPreview.Rendering;
end;

procedure TSCRavePreviewForm.InitFromRPSystem;
begin
  if InputFileName <> '' then begin
    RvRenderPreview.NDRStream := TFileStream.Create(InputFileName, fmOpenRead or
      fmShareDenyWrite);
  end else begin
    RvRenderPreview.NDRStream := InputStream;
  end; { else }
  RvRenderPreview.Render;
  ReportSystem.PreviewShowEvent(RvRenderPreview);
end;

class procedure TSCRavePreviewForm.PreviewFile(const AFileName: string);
begin
  with TSCRavePreviewForm.Create(Application) do begin
    OpenFile(AFileName);
    Visible := true;
  end; { with }
end;

procedure TSCRavePreviewForm.ZoomEditKeyPress(Sender: TObject; var Key: Char);
begin
  if Pos(Key, {Trans-} '01234567890') > 0 then begin
    with Sender as TEdit do begin
      if (SelLength = 0) and (Pos('.', Text) > 0) and (Length(Text) > Pos('.',
        Text)) then begin
        Key := #0;
      end; { if }
    end; { with }
  end else if Key = #13 then begin
    ZoomEditExit(Sender);
    with Sender as TEdit do begin
      SelStart := 0;
      SelLength := Length(Text);
    end; { with }
    Key := #0;
  end; { else }
end;

procedure TSCRavePreviewForm.ZoomEditExit(Sender: TObject);
var
  F1: double;
  ErrCode: integer;
begin
  Val(ZoomEdit.Text, F1, ErrCode);
  if (ErrCode = 0) and (RvRenderPreview.ZoomFactor <> F1) then begin
    RvRenderPreview.ZoomFactor := F1;
  end; { if }
end;

procedure TSCRavePreviewForm.PageEditExit(Sender: TObject);
var
  I1: integer;
  ErrCode: integer;
begin
  Val(PageEdit.Text, I1, ErrCode);
  if (ErrCode = 0) and (RvRenderPreview.CurrentPage <> I1) then begin
    RvRenderPreview.RenderPage(I1);
  end; { if }
end;

procedure TSCRavePreviewForm.PageEditKeyPress(Sender: TObject; var Key: Char);
begin
  if Key = '.' then begin
    Key := #0;
  end else if Key = #13 then begin
    PageEditExit(Sender);
    with Sender as TEdit do begin
      SelStart := 0;
      SelLength := Length(Text);
    end; { with }
    Key := #0;
  end; { if }
end;

procedure TSCRavePreviewForm.SetSaveOptions(SaveDialog: TSaveDialog);
begin
  dlogSave.Filter := Trans('Rave Snapshot Files (*.ndr)|*.ndr');
  if RpRender.GetRenderFilter <> '' then begin
    dlogSave.Filter := dlogSave.Filter + '|' + RpRender.GetRenderFilter;
  end; { if }
end;

procedure TSCRavePreviewForm.PreviewTimerTimer(Sender: TObject);
begin
  PreviewTimer.Enabled := false;

//ReportSystem.OnRenderPage := NewRenderPage;
//ReportSystem.OnRenderData := nil; //!!!
//ReportSystem.Generate;
end;

procedure TSCRavePreviewForm.NewRenderPage(Sender: TObject);
begin
// Called when a new render page is available

// Update page count
  PageLabel.Caption := Trans('of') + ' ' + IntToStr((Sender as
    TRvNDRWriter).JobPages);

  if PageNum = 1 {(Sender.Pages = PageNum)} then begin
  // Draw page content

  end; { if }

// Make sure everything is refreshed
  Application.ProcessMessages;
end;

procedure TSCRavePreviewForm.FormDestroy(Sender: TObject);
begin
  FreeAndNil(RvRenderPreview);
  FreeAndNil(RvRenderPrinter);
end;

procedure TSCRavePreviewForm.AfterPreviewPrintEvent;
begin
  if Assigned(FOnAfterPreviewPrint) then begin
    OnAfterPreviewPrint(RvRenderPrinter);
  end; { if }
end;

procedure TSCRavePreviewForm.SetButtonState;
begin
  // actions don't update correctly with modeless dialogs
  if not (fsModal in FormState) then begin
    actnPage_First.Enabled := RvRenderPreview.CurrentPage > 1;
    actnPage_Previous.Enabled := RvRenderPreview.CurrentPage > 1;
    actnPage_Next.Enabled := RvRenderPreview.CurrentPage <
      RvRenderPreview.Pages;
    actnPage_Last.Enabled := RvRenderPreview.CurrentPage <
      RvRenderPreview.Pages;
    actnFile_Print.Enabled := true; //RvRenderPreview.Rendering;
    actnFile_Save.Enabled := true; //RvRenderPreview.Rendering;
    actnZoom_In.Enabled := true; //RvRenderPreview.Rendering;
    actnZoom_Out.Enabled := true; //RvRenderPreview.Rendering;
    actnZoom_PageWidth.Enabled := true; //RvRenderPreview.Rendering;
    actnZoom_Page.Enabled := true; //RvRenderPreview.Rendering;
  end;
end;

procedure TSCRavePreviewForm.FormShow(Sender: TObject);
begin
  SetButtonState;
end;

end.

⌨️ 快捷键说明

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