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

📄 rm_desgn.pas

📁 中小企业管理系统------ ERP系统原代码
💻 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, Printers, Menus, ComCtrls, ExtCtrls,
  RM_Class, RM_Insp, RM_Edit, RM_View, RM_Common, RM_DsgCtrls
{$IFDEF USE_TB2K}
  , TB2Item, TB2Dock, TB2Toolbar
{$ELSE}
{$IFDEF USE_INTERNALTB97}
  , RM_TB97Ctls, RM_TB97Tlbr, RM_TB97
{$ELSE}
  , TB97Ctls, TB97Tlbr, TB97
{$ENDIF}
{$ENDIF}
{$IFDEF Delphi4}, ImgList{$ENDIF}
{$IFDEF Delphi6}, Variants{$ENDIF};

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

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;

  TRMDesignerRestriction =
    (RMdrDontEditObj, RMdrDontModifyObj, RMdrDontSizeObj, RMdrDontMoveObj,
    RMdrDontDeleteObj, RMdrDontCreateObj,
    RMdrDontDeletePage, RMdrDontCreatePage, RMdrDontEditPage,
    RMdrDontCreateReport, RMdrDontLoadReport, RMdrDontSaveReport,
    RMdrDontPreviewReport, RMdrDontEditVariables, RMdrDontChangeReportOptions);
  TRMDesignerRestrictions = set of TRMDesignerRestriction;

  TRMDesignerForm = class;

  { TRMDesigner }
  TRMDesigner = class(TComponent) // fake component
  private
    FHelpFile: string;
    FCloseQuery: Boolean;
    FTemplDir, FOpenDir, FSaveDir: string;
    FOnLoadReport: TRMLoadReportEvent;
    FOnSaveReport: TRMSaveReportEvent;
    FOnNewReport: TRMNewReportEvent;
    FOnShow: TNotifyEvent;
    FOnShowAboutForm: TNotifyEvent;
    FOpenFileCount: Integer;
    FCanEditRestrictions: Boolean;
    FDesignerRestrictions_1: TRMDesignerRestrictions;
    procedure SetOpenFileCount(Value: Integer);
    procedure SetRestrictions(Value: TRMDesignerRestrictions);
  protected
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    property CanEditRestrictions: Boolean read FCanEditRestrictions write FCanEditRestrictions default True;
    property CloseQuery: Boolean read FCloseQuery write FCloseQuery 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;
    property DesignerRestrictions: TRMDesignerRestrictions read FDesignerRestrictions_1 write SetRestrictions;
  end;

  TRMSelectionType = (ssBand, ssMemo, ssOther, ssMultiple, ssClipboardFull);
  TRMSelectionStatus = set of TRMSelectionType;
  TRMShapeMode = (smFrame, smAll);
  TRMDesignerDrawMode = (dmAll, dmSelection, dmShape);

  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;

    FInplaceEditor: TWinControl;
    FInplaceEditedView: TRMView;
    FPrevView: TRMView;

    procedure InplaceEdit(aView: TRMView);
    procedure SaveInplaceEdit;
    procedure EndInplaceEdit;

    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;
    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;
    padOptions: TMenuItem;
    padFileSaveAs: TMenuItem;
    N18: TMenuItem;
    padHelp: TMenuItem;
    N8: TMenuItem;
    StatusBar1: TStatusBar;
    Panel7: TPanel;
    PBox1: TPaintBox;
    Pan9: TMenuItem;
    Popup2: TPopupMenu;
    padpopAddPage: TMenuItem;
    padpopAddForm: TMenuItem;
    padpopDeletePage: TMenuItem;
    padpopPageSetup: TMenuItem;
    N9: TMenuItem;
    padNewForm: TMenuItem;
    padPrint: TMenuItem;
    padPageSetup: TMenuItem;
    N1: TMenuItem;
    itmFileFile9: TMenuItem;
    itmFileFile8: TMenuItem;
    itmFileFile7: TMenuItem;
    itmFileFile6: TMenuItem;
    itmFileFile5: TMenuItem;
    itmFileFile4: TMenuItem;
    itmFileFile3: TMenuItem;
    itmFileFile2: TMenuItem;
    itmFileFile1: TMenuItem;
    padpopFrame: TMenuItem;
    padFileProperty: TMenuItem;
    N2: TMenuItem;
    Tab1: TTabControl;
    N3: TMenuItem;
    padEditReplace: TMenuItem;
    Panel2: TPanel;
    pnlHorizontalRuler: TPanel;
    pnlVerticalRuler: TPanel;
    ScrollBox1: TScrollBox;
    LinePanel: TPanel;
    SpeedButton1: TSpeedButton;
    SpeedButton2: TSpeedButton;
    SpeedButton3: TSpeedButton;
    SpeedButton4: TSpeedButton;
    SpeedButton5: TSpeedButton;
    SpeedButton6: TSpeedButton;
    ImageListStand: TImageList;
    ImageListFont: TImageList;
    ImageListFrame: TImageList;
    ImageListAlign: TImageList;
    ImageListSize: TImageList;
    ImageListPosition: TImageList;
    ImageListComponent: TImageList;
    Pan6: TMenuItem;
    Pan8: TMenuItem;
    Pan7: TMenuItem;
    ImageListModifyPreview: TImageList;
    ImageListAddinTools: TImageList;
    LoadDictionary1: TMenuItem;
    SaveAsDictionary1: TMenuItem;
    MergeDictionary1: TMenuItem;
    PopupMenu1: TPopupMenu;
    N4: TMenuItem;
    itmEditLockControls: TMenuItem;
    N5: TMenuItem;
    InplaceEdit1: 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 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);
    procedure btnAlignVCenterClick(Sender: TObject);
    procedure padPrintClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure itmFileFile9Click(Sender: TObject);
    procedure padpopFrameClick(Sender: TObject);
    procedure btnAlignTopBottomClick(Sender: TObject);
    procedure Pan5Click(Sender: TObject);
    procedure padFilePropertyClick(Sender: TObject);
    procedure padEditReplaceClick(Sender: TObject);
    procedure btnModifyPreviedFirstClick(Sender: TObject);
    procedure btnModifyPreviedPrevClick(Sender: TObject);
    procedure btnModifyPreviedLastClick(Sender: TObject);
    procedure btnModifyPreviedNextClick(Sender: TObject);
    procedure Edit1KeyPress(Sender: TObject; var Key: Char);
    procedure btnAutoSaveClick(Sender: TObject);
    procedure OB2Click(Sender: TObject);
    procedure LoadDictionary1Click(Sender: TObject);
    procedure MergeDictionary1Click(Sender: TObject);
    procedure SaveAsDictionary1Click(Sender: TObject);
    procedure itmEditLockControlsClick(Sender: TObject);
    procedure barEditClick(Sender: TObject);
    procedure InplaceEdit1Click(Sender: TObject);
    procedure Tab1Changing(Sender: TObject; var AllowChange: Boolean);
  private
    { Private declarations }
    FGridBitmap: TBitmap;
    FPageForm: TForm;
    FPageView: TRMDesignerPage;
    FInspForm: TRMInspForm;
    FItemWidths: TStringList;
    FCurPage: Integer;
    FGridSizeX, FGridSizeY: Integer;
    FGridShow, FGridAlign: Boolean;
    FUnits: TRMSizeUnits;
    FUndoBuffer, FRedoBuffer: TRMUndoBuffer;
    FUndoBufferLength, FRedoBufferLength: Integer;
    FAutoOpenLastFile: Boolean;
    FFirstTime: Boolean;
    Fld: array[0..63] of string;
    FEditAfterInsert: Boolean;
    FCurDocName, FCaption: string;
    FShapeMode: TRMShapeMode;
    FPagePosition: TAlign;
    FPageType: TRMPageType;
    FMDown, FChangeUnits: Boolean;
    FUnlimitedHeight: Boolean;
    FUseTableName: Boolean;
    FEditorForm: TRMEditorForm;
    FFindReplaceForm: TForm;
    FHRuler, FVRuler: TRMDesignerRuler;
    FLastLeft, FLastTop: Integer;

    //WHF Add
    FOpenFiles: TStringList;

    FBtnBackColor: TRMColorPickerButton;
    FBtnFrameColor: TRMColorPickerButton;
    SpinEditFrameWidth: TRMSpinEdit;
    FcmbFont: TRMFontComboBox;
    FcmbFontSize: TComboBox;
    FBtnFontColor: TRMColorPickerButton;
    FSaveDesignerRestrictions: TRMDesignerRestrictions;

    Dock971: TRMDock;
    Dock972: TRMDock;
    Dock973: TRMDock;
    Dock974: TRMDock;

    ToolbarStandard: TRMToolbar;
    ToolbarSize: TRMToolbar;
    ToolbarSep971: TRMToolbarSep;
    ToolbarEdit: TRMToolbar;
    ToolbarAlign: TRMToolbar;
    ToolbarModifyPrepared: TRMToolbar;
    ToolbarBorder: TRMToolbar;
    ToolbarComponent: TRMToolbar;
    ToolBarAddinTools: TRMToolbar;

    btnPreview: TRMToolbarButton;
    BtnFileNew: TRMToolbarButton;
    btnFileSave: TRMToolbarButton;
{$IFDEF USE_TB2K}
    btnFileOpen: TTBSubmenuItem;
{$ELSE}
    btnFileOpen: TRMToolbarButton;
{$ENDIF}
    btnPrint: TRMToolbarButton;
    btnCut: TRMToolbarButton;
    btnCopy: TRMToolbarButton;
    btnPaste: TRMToolbarButton;
    ToolbarSep972: TRMToolbarSep;
    btnRedo: TRMToolbarButton;
    btnUndo: TRMToolbarButton;
    btnAddForm: TRMToolbarButton;
    btnSetFrameStyle: TRMToolbarButton;
    btnAlignLeftRight: TRMToolbarButton;
    btnAlignTopBottom: TRMToolbarButton;
    btnSetWidthToMin: TRMToolbarButton;
    btnSetWidthToMax: TRMToolbarButton;
    btnSetHeightToMin: TRMToolbarButton;

⌨️ 快捷键说明

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