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

📄 rm_prvdlg.pas

📁 report machine 2.3 功能强大
💻 PAS
📖 第 1 页 / 共 2 页
字号:

{*****************************************}
{                                         }
{             Report Machine v2.0         }
{             Report preview Dlg          }
{                                         }
{*****************************************}

unit RM_PrvDlg;

interface

{$I RM.inc}

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, Buttons, StdCtrls, Menus, RM_Const, RM_View, RM_Class,
  TB97Tlbr, TB97Ctls, TB97
{$IFDEF Delphi4}, ImgList{$ENDIF};

type
  TRMPreviewForm = class(TForm)
    ProcMenu: TPopupMenu;
    itmScale200: TMenuItem;
    itmScale150: TMenuItem;
    itmScale100: TMenuItem;
    itmScaale75: TMenuItem;
    itmScale50: TMenuItem;
    itmScale25: TMenuItem;
    itmScale10: TMenuItem;
    itmPageWidth: TMenuItem;
    itmOnePage: TMenuItem;
    itmDoublePage: TMenuItem;
    OpenDialog: TOpenDialog;
    SaveDialog: TSaveDialog;
    ImageList1: TImageList;
    N1: TMenuItem;
    itmNewPage: TMenuItem;
    itmDeletePage: TMenuItem;
    itmEditPage: TMenuItem;
    Dock971: TDock97;
    ToolbarStand: TToolbar97;
    btnAutoScale: TToolbarButton97;
    btnOnePage: TToolbarButton97;
    BtnExit: TToolbarButton97;
    btn100: TToolbarButton97;
    btnPageSetup: TToolbarButton97;
    btnPageWidth: TToolbarButton97;
    ToolbarSep972: TToolbarSep97;
    btnPrint: TToolbarButton97;
    ToolbarSep973: TToolbarSep97;
    btnTop: TToolbarButton97;
    btnSave: TToolbarButton97;
    btnPrev: TToolbarButton97;
    btnOpen: TToolbarButton97;
    btnNext: TToolbarButton97;
    btnLast: TToolbarButton97;
    btnFind: TToolbarButton97;
    ToolbarSep974: TToolbarSep97;
    ToolbarSep975: TToolbarSep97;
    tbLine: TToolbarSep97;
    Dock972: TDock97;
    Dock973: TDock97;
    Dock974: TDock97;
    N4: TMenuItem;
    itmPrint: TMenuItem;
    itmPrintCurrentPage: TMenuItem;
    btnDesign: TToolbarButton97;
    ToolbarSep971: TToolbarSep97;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
    procedure btnTopClick(Sender: TObject);
    procedure btnPrevClick(Sender: TObject);
    procedure btnNextClick(Sender: TObject);
    procedure btnLastClick(Sender: TObject);
    procedure btn100Click(Sender: TObject);
    procedure btnOnePageClick(Sender: TObject);
    procedure btnPageWidthClick(Sender: TObject);
    procedure itmScale10Click(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure btnOpenClick(Sender: TObject);
    procedure btnSaveClick(Sender: TObject);
    procedure btnPrintClick(Sender: TObject);
    procedure btnFindClick(Sender: TObject);
    procedure itmNewPageClick(Sender: TObject);
    procedure itmDeletePageClick(Sender: TObject);
    procedure itmEditPageClick(Sender: TObject);
    procedure btnPageSetupClick(Sender: TObject);
    procedure ProcMenuPopup(Sender: TObject);
    procedure btnAutoScaleClick(Sender: TObject);
    procedure BtnExitClick(Sender: TObject);
    procedure itmPrintCurrentPageClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure btnDesignClick(Sender: TObject);
  private
    { Private declarations }
    FDoc: Pointer;
    FViewer: TRMPreview;
    FCmbZoom: TComboBox;
    procedure WMGetMinMaxInfo(var Msg: TWMGetMinMaxInfo); message WM_GETMINMAXINFO;
    procedure OnStatusChange(Sender: TObject);
    procedure OnCmbZoomChange(Sender: TObject);
		procedure OnCmbzoomKeyPress(Sender: TObject; var Key: Char);
    procedure Localize;
  public
    { Public declarations }
    procedure Show_Modal(ADoc: Pointer);
    property Viewer: TRMPreview read FViewer;
    property Report: Pointer read FDoc;
  end;

implementation

{$R *.DFM}

uses Printers, RM_Prntr, RM_PrDlg, RM_Utils, RM_CmpReg;

var
  LastScale: Double = 1;
  LastScaleMode: TRMScaleMode = mdNone;
  LastAutoScale: Boolean = False;

procedure TRMPreviewForm.Localize;
begin
	Font.Name := RMLoadStr(SRMDefaultFontName);
  Font.Size := StrToInt(RMLoadStr(SRMDefaultFontSize));
  Font.Charset := StrToInt(RMLoadStr(SCharset));

  itmPageWidth.Caption := RMLoadStr(rmRes + 020);
  itmOnePage.Caption := RMLoadStr(rmRes + 021);
  itmDoublePage.Caption := RMLoadStr(rmRes + 022);
  itmNewPage.Caption := RMLoadStr(rmRes + 030);
  itmDeletePage.Caption := RMLoadStr(rmRes + 031);
  itmEditPage.Caption := RMLoadStr(rmRes + 029);
  itmPrint.Caption := RMLoadStr(rmRes + 40) + '...';
  itmPrintCurrentPage.Caption := RMLoadStr(rmRes + 376);

  btnOpen.Hint := RMLoadStr(rmRes + 025);
  btnSave.Hint := RMLoadStr(rmRes + 026);
  btnPrint.Hint := RMLoadStr(rmRes + 027);
  btnFind.Hint := RMLoadStr(rmRes + 028);
  btnOnePage.Hint := RMLoadStr(rmRes + 1858);
  btnPageWidth.Hint := RMLoadStr(rmRes + 1857);
  btnTop.Hint :=  RMLoadStr(rmRes + 32);
  btnPrev.Hint :=  RMLoadStr(rmRes + 33);
  btnNext.Hint :=  RMLoadStr(rmRes + 34);
  btnLast.Hint :=  RMLoadStr(rmRes + 35);
  btnPageSetup.Hint := RMLoadStr(rmRes + 24);
  btnExit.Hint := RMLoadStr(rmRes + 23);
end;

procedure TRMPreviewForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  if FormStyle <> fsMDIChild then RMSaveFormPosition(Self);
  Action := caFree;
end;

procedure TRMPreviewForm.Show_Modal(ADoc: Pointer);
begin
  FDoc := ADoc;
  FViewer.Connect(ADoc);
  FViewer.OnStatusChange := OnStatusChange;

  N4.Visible := RMDesignerClass <> nil;
  itmNewPage.Visible := N4.Visible;
  itmDeletePage.Visible := N4.Visible;
  itmEditPage.Visible := N4.Visible;

  if not (csDesigning in TRMReport(ADoc).ComponentState) then
  begin
	  FCmbZoom.Visible := pbZoom in TRMReport(ADoc).PreviewButtons;
  	tbLine.Visible := FCmbZoom.Visible;

	  btnFind.Visible := pbFind in TRMReport(ADoc).PreviewButtons;
  	ToolbarSep972.Visible := btnFind.Visible;

	  btnOpen.Visible := pbLoad in TRMReport(ADoc).PreviewButtons;
  	btnSave.Visible := pbSave in TRMReport(ADoc).PreviewButtons;
	  btnPrint.Visible := pbPrint in TRMReport(ADoc).PreviewButtons;
  	btnPageSetup.Visible := pbPageSetup in TRMReport(ADoc).PreviewButtons;
	  ToolbarSep975.Visible := btnOpen.Visible or btnSave.Visible or btnPrint.Visible or
	  	btnPageSetup.Visible;

	  btnExit.Visible := pbExit in TRMReport(ADoc).PreviewButtons;
  	ToolbarSep973.Visible := btnExit.Visible;
  end;

  case TRMReport(ADoc).InitialZoom of
    pzPageWidth: btnPageWidth.Down := TRUE;
    pzOnePage: btnOnePage.Down := TRUE;
  else
    FViewer.LastScale := LastScale;
    FViewer.ZoomMode := LastScaleMode;
//    btn100.Down := TRUE;
  end;

  FViewer.AutoScale := LastAutoScale;
  btnAutoScale.Down := FViewer.AutoScale;
  btnPrint.Enabled := Printer.Printers.Count > 0;
  FCmbZoom.Text := IntToStr(Round(FViewer.Zoom)) + '%';
  tbLine.Visible := FCmbZoom.Visible;
  btnDesign.Visible := pbDesign in TRMReport(FDoc).PreviewButtons;
  ToolbarSep971.Visible := btnDesign.Visible;
  if TRMReport(ADoc).ModalPreview and (not TRMReport(ADoc).MDIPreview) then
    ShowModal
  else
    Show;
end;

procedure TRMPreviewForm.FormCreate(Sender: TObject);
begin
	Localize;
	FCmbZoom := TComboBox.Create(ToolbarStand);
  with FCmbZoom do
  begin
  	Parent := ToolbarStand;
    SetBounds(0, 1, 80, 20);
    DropDownCount := 11;
    Items.Add('200%');
		Items.Add('150%');
		Items.Add('100%');
		Items.Add('75%');
		Items.Add('50%');
		Items.Add('25%');
		Items.Add('10%');
    Items.Add(RMLoadStr(rmRes + 1857));
    Items.Add(RMLoadStr(rmRes + 1858));
    Items.Add(RMLoadStr(rmRes + 1859));
    OnClick := OnCmbZoomChange;
    OnKeyPress := OnCmbZoomKeyPress;
//    OnChange := OnCmbZoomChange;
  end;
  ToolbarStand.OrderIndex[FCmbZoom] := 0;

  FViewer := TRMPreview.Create(Self);
  with FViewer do
  begin
    Parent := Self;
    Align := alClient;
    PopupMenu := ProcMenu;
    AutoScale := False;
    ParentForm := Self;
  end;
end;

procedure TRMPreviewForm.WMGetMinMaxInfo(var Msg: TWMGetMinMaxInfo);
begin
  with Msg.MinMaxInfo^ do
  begin
    ptMaxSize.x := Screen.Width;
    ptMaxSize.y := Screen.Height;
    ptMaxPosition.x := 0;
    ptMaxPosition.y := 0;
  end;
end;

procedure TRMPreviewForm.btnTopClick(Sender: TObject);
begin
  FViewer.First;
end;

procedure TRMPreviewForm.btnPrevClick(Sender: TObject);
begin
  FViewer.Prev;
end;

procedure TRMPreviewForm.btnNextClick(Sender: TObject);
begin
  FViewer.Next;
end;

procedure TRMPreviewForm.btnLastClick(Sender: TObject);
begin
  FViewer.Last;

⌨️ 快捷键说明

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