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

📄 rm_desgn.pas

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

{*****************************************}
{                                         }
{           Report Machine v2.1           }
{             Report Designer             }
{                                         }
{*****************************************}

unit RM_Desgn;

interface

{$I RM.inc}

uses
  SysUtils, Windows, Messages, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Buttons, ExtCtrls, Printers, ComCtrls, Mask, Menus, {$IFDEF Delphi4}ImgList, {$ENDIF}
  RM_Class, RM_Insp, RM_Edit, RM_View, RM_Common,
  TB97Ctls, TB97Tlbr, TB97
{$IFDEF Delphi6}, Variants{$ENDIF};

const
  MaxUndoBuffer = 100;
  crPencil = 11;
  DefaultPopupItemsCount = 8;

type
  TRMLoadReportEvent = procedure(Report: TRMReport; var ReportName: string; var Opened: Boolean) of object;
  TRMSaveReportEvent = procedure(Report: TRMReport; var ReportName: string; SaveAs: Boolean; var Saved: Boolean) of object;
  TRMNewReportEvent = procedure(Report: TRMReport; var ReportName: string) of object;

  TRMDesignerForm = class;

  { TRMDesigner }
  TRMDesigner = class(TComponent) // fake component
  private
    FHelpFile: string;
    FCloseQuery: Boolean;
    FHideDisabledButtons: Boolean;
    FTemplDir, FOpenDir, FSaveDir: string;
    FOnLoadReport: TRMLoadReportEvent;
    FOnSaveReport: TRMSaveReportEvent;
    FOnNewReport: TRMNewReportEvent;
    FOnShow: TNotifyEvent;
    FOnShowAboutForm: TNotifyEvent;
    FOpenFileCount: Integer;
    procedure SetOpenFileCount(Value: Integer);
  protected
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    property CloseQuery: Boolean read FCloseQuery write FCloseQuery default True;
    property HideDisabledButtons: Boolean read FHideDisabledButtons write FHideDisabledButtons default True;
    property OpenDir: string read FOpenDir write FOpenDir;
    property SaveDir: string read FSaveDir write FSaveDir;
    property TemplateDir: string read FTemplDir write FTemplDir;
    property OnLoadReport: TRMLoadReportEvent read FOnLoadReport write FOnLoadReport;
    property OnSaveReport: TRMSaveReportEvent read FOnSaveReport write FOnSaveReport;
    property OnShow: TNotifyEvent read FOnShow write FOnShow;
    property OnShowAboutForm: TNotifyEvent read FOnShowAboutForm write FOnShowAboutForm;
    property OnNewReport: TRMNewReportEvent read FOnNewReport write FOnNewReport;
    property HelpFile: string read FHelpFile write FHelpFile;
    property OpenFileCount: Integer read FOpenFileCount write SetOpenFileCount default 4;
  end;

  TRMSelectionType = (ssBand, ssMemo, ssOther, ssMultiple, ssClipboardFull);
  TRMSelectionStatus = set of TRMSelectionType;
  TRMShapeMode = (smFrame, smAll);
  TRMDesignerDrawMode = (dmAll, dmSelection, dmShape);
  TRMDesignerRestriction =
    (RMdrDontEditObj, RMdrDontModifyObj, RMdrDontSizeObj, RMdrDontMoveObj,
    RMdrDontDeleteObj, RMdrDontCreateObj,
    RMdrDontDeletePage, RMdrDontCreatePage, RMdrDontEditPage,
    RMdrDontCreateReport, RMdrDontLoadReport, RMdrDontSaveReport,
    RMdrDontPreviewReport, RMdrDontEditVariables, RMdrDontChangeReportOptions);
  TRMDesignerRestrictions = set of TRMDesignerRestriction;

  TRMUndoAction = (acInsert, acDelete, acEdit, acZOrder);
  PRMUndoObj = ^TRMUndoObj;
  TRMUndoObj = packed record
    Next: PRMUndoObj;
    ObjID: Integer;
    ObjPtr: TRMView;
    Int: Integer;
  end;

  TRMUndoRec = packed record
    Action: TRMUndoAction;
    Page: Integer;
    Objects: PRMUndoObj;
  end;

  PRMUndoRec1 = ^TRMUndoRec1;
  TRMUndoRec1 = packed record
    ObjPtr: TRMView;
    Int: Integer;
  end;

  PRMUndoBuffer = ^TRMUndoBuffer;
  TRMUndoBuffer = array[0..MaxUndoBuffer - 1] of TRMUndoRec;

  TRMSplitInfo = packed record
    SplRect: TRect;
    SplX: Integer;
    View1, View2: TRMView;
  end;

  { TRMDesignerPage }
  TRMDesignerPage = class(TPanel)
  private
    FDown: Boolean; // mouse button was pressed
    FMoved: Boolean; // mouse was moved (with pressed btn)
    FDFlag: Boolean; // was double click
    FRFlag: Boolean; // selecting objects by RMaming
    FMode: (mdInsert, mdSelect); // current mode
    FCT: (ctNone, ct1, ct2, ct3, ct4, ct5, ct6, ct7, ct8); // cursor type
    FLastX, FLastY: Integer; // here stored last mouse coords
    FSplitInfo: TRMSplitInfo;
    FRightBottom: Integer;
    FLeftTop: TPoint;
    FFirstBandMove: Boolean;
    FWasCtrl: Boolean;
    FDesigner: TRMDesignerForm;
    FDrag: Boolean;
    FDisableDraw: Boolean;
    procedure NormalizeRect(var r: TRect);
    procedure NormalizeCoord(t: TRMView);
    function FindNearestEdge(var x, y: Integer): Boolean;
    procedure RoundCoord(var x, y: Integer);
    procedure Draw(N: Integer; ClipRgn: HRGN);
    procedure DrawPage(DrawMode: TRMDesignerDrawMode);
    procedure DrawRectLine(Rect: TRect);
    procedure DrawFocusRect(Rect: TRect);
    procedure DrawHSplitter(Rect: TRect);
    procedure DrawSelection(t: TRMView);
    procedure DrawShape(t: TRMView);
    procedure MDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    procedure MUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    procedure MMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
    procedure DClick(Sender: TObject);
    procedure DoDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
    procedure DoDragDrop(Sender, Source: TObject; X, Y: Integer);
  protected
    procedure Paint; override;
    procedure WMEraseBackground(var Message: TMessage); message WM_ERASEBKGND;
  public
    constructor Create(AOwner: TComponent); override;
    procedure Init;
    procedure SetPage;
    procedure GetMultipleSelected;
  end;

  { TRMDesignerForm }
  TRMDesignerForm = class(TRMReportDesigner)
    Popup1: TPopupMenu;
    padpopCopy: TMenuItem;
    padpopCut: TMenuItem;
    padpopPaste: TMenuItem;
    padpopDelete: TMenuItem;
    padpopEdit: TMenuItem;
    MainMenu1: TMainMenu;
    barFile: TMenuItem;
    barEdit: TMenuItem;
    barTools: TMenuItem;
    padExit: TMenuItem;
    padCut: TMenuItem;
    padCopy: TMenuItem;
    padPaste: TMenuItem;
    padFileOpen: TMenuItem;
    padFileSave: TMenuItem;
    N21: TMenuItem;
    padFileNew: TMenuItem;
    N24: TMenuItem;
    padDelete: TMenuItem;
    padSelectAll: TMenuItem;
    N26: TMenuItem;
    padNewPage: TMenuItem;
    padDeletePage: TMenuItem;
    N31: TMenuItem;
    padBringtoFront: TMenuItem;
    padSendtoBack: TMenuItem;
    padEdit: TMenuItem;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    Pan5: TMenuItem;
    Pan6: TMenuItem;
    padPreview: TMenuItem;
    N40: TMenuItem;
    padVarList: TMenuItem;
    padAddTools: TMenuItem;
    padpopSelectAll: TMenuItem;
    padSetToolbar: TMenuItem;
    Pan2: TMenuItem;
    Pan3: TMenuItem;
    Pan1: TMenuItem;
    Pan4: TMenuItem;
    barHelp: TMenuItem;
    padAbout: TMenuItem;
    padUndo: TMenuItem;
    N47: TMenuItem;
    padRedo: TMenuItem;
    Pan7: TMenuItem;
    padOptions: TMenuItem;
    padFileSaveAs: TMenuItem;
    N18: TMenuItem;
    padHelp: TMenuItem;
    Dock971: TDock97;
    ToolbarStandard: TToolbar97;
    btnPreview: TToolbarButton97;
    BtnFileNew: TToolbarButton97;
    btnFileSave: TToolbarButton97;
    btnFileOpen: TToolbarButton97;
    ToolbarSep971: TToolbarSep97;
    btnCut: TToolbarButton97;
    btnCopy: TToolbarButton97;
    btnPaste: TToolbarButton97;
    ToolbarSep972: TToolbarSep97;
    btnRedo: TToolbarButton97;
    btnUndo: TToolbarButton97;
    ToolbarSep973: TToolbarSep97;
    btnSendtoBack: TToolbarButton97;
    btnSelectAll: TToolbarButton97;
    btnBringtoFront: TToolbarButton97;
    ToolbarSep974: TToolbarSep97;
    btnDeletePage: TToolbarButton97;
    btnPageSetup: TToolbarButton97;
    btnAddPage: TToolbarButton97;
    ToolbarSep975: TToolbarSep97;
    GB2: TToolbarButton97;
    GB3: TToolbarButton97;
    GB1: TToolbarButton97;
    ToolbarButton9720: TToolbarButton97;
    ToolbarButton9721: TToolbarButton97;
    ToolbarButton9722: TToolbarButton97;
    ToolbarButton9723: TToolbarButton97;
    ToolbarSep976: TToolbarSep97;
    btnExit: TToolbarButton97;
    ToolbarEdit: TToolbar97;
    btnFontUnderline: TToolbarButton97;
    ToolbarBorder: TToolbar97;
    btnFrameTop: TToolbarButton97;
    btnFrameLeft: TToolbarButton97;
    btnNoFrame: TToolbarButton97;
    btnFrameBottom: TToolbarButton97;
    ToolbarButton9732: TToolbarButton97;
    ToolbarButton9733: TToolbarButton97;
    btnSetFrame: TToolbarButton97;
    btnFrameRight: TToolbarButton97;
    ToolbarSep9711: TToolbarSep97;
    btnFont90: TToolbarButton97;
    btnTextAlignCenter: TToolbarButton97;
    btnFontBold: TToolbarButton97;
    btnFontItalic: TToolbarButton97;
    btnTextAlignVCenter: TToolbarButton97;
    btnTextAlignLeft: TToolbarButton97;
    HlB1: TToolbarButton97;
    btnTextAlignTop: TToolbarButton97;
    btnTextAlignRight: TToolbarButton97;
    btnTextAlignH: TToolbarButton97;
    btnTextAlignBottom: TToolbarButton97;
    Dock972: TDock97;
    ToolbarComponent: TToolbar97;
    OB6: TToolbarButton97;
    ToolbarSep9712: TToolbarSep97;
    OB1: TToolbarButton97;
    OB5: TToolbarButton97;
    OB2: TToolbarButton97;
    OB3: TToolbarButton97;
    OB4: TToolbarButton97;
    Dock973: TDock97;
    ToolbarAlign: TToolbar97;
    btnAlignVWCenter: TToolbarButton97;
    btnAlignLeft: TToolbarButton97;
    btnAlignHWCenter: TToolbarButton97;
    btnAlignHCenter: TToolbarButton97;
    btnAlignVSE: TToolbarButton97;
    btnAlignHSE: TToolbarButton97;
    btnAlignRight: TToolbarButton97;
    btnAlignBottom: TToolbarButton97;
    btnAlignTop: TToolbarButton97;
    btnAlignVCenter: TToolbarButton97;
    ToolBarAddinTools: TToolbar97;
    Dock974: TDock97;
    ToolbarSep9713: TToolbarSep97;
    ToolbarSep9714: TToolbarSep97;
    ToolbarSep9715: TToolbarSep97;
    ToolbarSep9716: TToolbarSep97;
    ToolbarSep9717: TToolbarSep97;
    ToolbarSep9718: TToolbarSep97;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    Tab1: TTabControl;
    ScrollBox1: TScrollBox;
    LinePanel: TPanel;
    SpeedButton1: TSpeedButton;
    SpeedButton2: TSpeedButton;
    SpeedButton3: TSpeedButton;
    SpeedButton4: TSpeedButton;
    SpeedButton5: TSpeedButton;
    pnlPreviewToolBar: TPanel;
    btnPreview_Print: TToolbarButton97;
    BtnPreviewWhole: TToolbarButton97;
    BtnPreview100: TToolbarButton97;
    BtnPreviewWidth: TToolbarButton97;
    btnPreview_First: TToolbarButton97;
    btnPreview_Prev: TToolbarButton97;
    btnPreview_Next: TToolbarButton97;
    btnPreview_Last: TToolbarButton97;
    mskPreviewPercentage: TMaskEdit;
    ToolbarSep9719: TToolbarSep97;
    ToolbarSep9720: TToolbarSep97;
    ToolbarSep9721: TToolbarSep97;
    ToolbarSize: TToolbar97;
    btnSetHeightToMin: TToolbarButton97;
    btnSetWidthToMin: TToolbarButton97;
    ToolbarSep979: TToolbarSep97;
    btnSetHeightToMax: TToolbarButton97;
    btnSetWidthToMax: TToolbarButton97;
    N8: TMenuItem;
    ToolbarSep9710: TToolbarSep97;
    btnAlignLeftRight: TToolbarButton97;
    OB7: TToolbarButton97;
    Pan8: TMenuItem;
    btnSetFrameStyle: TToolbarButton97;
    edtFrameWidth: TEdit97;
    UpDown1: TUpDown;
    ToolbarSep9722: TToolbarSep97;
    StatusBar1: TStatusBar;
    Panel7: TPanel;
    PBox1: TPaintBox;
    SpeedButton6: TSpeedButton;
    Pan9: TMenuItem;
    btnAddForm: TToolbarButton97;
    Popup2: TPopupMenu;
    padpopAddPage: TMenuItem;
    padpopAddForm: TMenuItem;
    padpopDeletePage: TMenuItem;
    padpopPageSetup: TMenuItem;
    N9: TMenuItem;
    padNewForm: TMenuItem;
    padPrint: TMenuItem;
    ToolbarButton971: TToolbarButton97;
    btnPrint: TToolbarButton97;
    ToolbarSep9723: TToolbarSep97;
    padPageSetup: TMenuItem;
    ImageListStand: TImageList;
    ImageListFont: TImageList;
    ImageListAlign: TImageList;
    ImageListPreview: TImageList;
    ImageListSize: TImageList;
    ImageListFrame: TImageList;
    ImageListPosition: TImageList;
    OB9: TToolbarButton97;
    N1: TMenuItem;
    itmFileFile9: TMenuItem;
    itmFileFile8: TMenuItem;
    itmFileFile7: TMenuItem;
    itmFileFile6: TMenuItem;
    itmFileFile5: TMenuItem;
    itmFileFile4: TMenuItem;
    itmFileFile3: TMenuItem;
    itmFileFile2: TMenuItem;
    itmFileFile1: TMenuItem;
    edtPreviewPage: TEdit;
    padpopFrame: TMenuItem;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure DoClick(Sender: TObject);
    procedure GB1Click(Sender: TObject);
    procedure btnBringtoFrontClick(Sender: TObject);
    procedure btnSendtoBackClick(Sender: TObject);
    procedure btnAddPageClick(Sender: TObject);
    procedure btnDeletePageClick(Sender: TObject);
    procedure OB2MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    procedure OB1Click(Sender: TObject);
    procedure btnCutClick(Sender: TObject);
    procedure btnCopyClick(Sender: TObject);
    procedure btnPasteClick(Sender: TObject);
    procedure btnSelectAllClick(Sender: TObject);
    procedure btnExitClick(Sender: TObject);
    procedure btnPageSetupClick(Sender: TObject);
    procedure FormResize(Sender: TObject);
    procedure padpopDeleteClick(Sender: TObject);
    procedure padpopEditClick(Sender: TObject);
    procedure GB2Click(Sender: TObject);
    procedure BtnFileNewClick(Sender: TObject);
    procedure btnFileOpenClick(Sender: TObject);
    procedure btnFileSaveClick(Sender: TObject);
    procedure HlB1Click(Sender: TObject);
    procedure btnPreviewClick(Sender: TObject);
    procedure padVarListClick(Sender: TObject);
    procedure Popup1Popup(Sender: TObject);
    procedure padFileNewClick(Sender: TObject);
    procedure padSetToolbarClick(Sender: TObject);
    procedure Pan2Click(Sender: TObject);
    procedure padOptionsClick(Sender: TObject);
    procedure btnAlignLeftClick(Sender: TObject);
    procedure btnAlignHCenterClick(Sender: TObject);
    procedure btnAlignRightClick(Sender: TObject);
    procedure btnAlignTopClick(Sender: TObject);
    procedure btnAlignBottomClick(Sender: TObject);
    procedure btnAlignHSEClick(Sender: TObject);
    procedure btnAlignVSEClick(Sender: TObject);
    procedure btnAlignHWCenterClick(Sender: TObject);
    procedure btnAlignVWCenterClick(Sender: TObject);
    procedure Tab1Change(Sender: TObject);
    procedure padAboutClick(Sender: TObject);
    procedure GB3Click(Sender: TObject);
    procedure btnUndoClick(Sender: TObject);
    procedure btnRedoClick(Sender: TObject);
    procedure PBox1Paint(Sender: TObject);
    procedure padHelpClick(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure btnSetFrameStyleClick(Sender: TObject);
    procedure edtFrameWidthChange(Sender: TObject);
    procedure PageControl1Change(Sender: TObject);
    procedure btnPreview_FirstClick(Sender: TObject);
    procedure btnPreview_PrevClick(Sender: TObject);
    procedure btnPreview_NextClick(Sender: TObject);
    procedure btnPreview_LastClick(Sender: TObject);
    procedure BtnPreview100Click(Sender: TObject);
    procedure BtnPreviewWholeClick(Sender: TObject);
    procedure BtnPreviewWidthClick(Sender: TObject);
    procedure mskPreviewPercentageKeyPress(Sender: TObject; var Key: Char);
    procedure btnPreview_PrintClick(Sender: TObject);
    procedure btnSetWidthToMinClick(Sender: TObject);
    procedure btnSetWidthToMaxClick(Sender: TObject);
    procedure btnSetHeightToMinClick(Sender: TObject);
    procedure btnSetHeightToMaxClick(Sender: TObject);
    procedure btnAlignLeftRightClick(Sender: TObject);
    procedure padFileSaveAsClick(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure ScrollBox1Resize(Sender: TObject);
    procedure StatusBar1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    procedure StatusBar1DblClick(Sender: TObject);
    procedure Tab1DragDrop(Sender, Source: TObject; X, Y: Integer);
    procedure Tab1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
    procedure Tab1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    procedure Tab1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    procedure Tab1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    procedure btnAddFormClick(Sender: TObject);
    procedure padNewFormClick(Sender: TObject);

⌨️ 快捷键说明

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