📄 scformpreview.pas
字号:
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 + -