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