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

📄 rm_designer.pas

📁 这是一个功能强大
💻 PAS
📖 第 1 页 / 共 5 页
字号:
unit RM_Designer;

interface

{$I RM.INC}

uses
  SysUtils, Windows, Messages, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Buttons, Printers, Menus, ComCtrls, ExtCtrls, Clipbrd, Commctrl,
  TypInfo, ImgList,
  RM_Class, RM_Preview, RM_Common, RM_DsgCtrls, RM_Ctrls, RM_Insp, RM_PropInsp,
  RM_EditorInsField, RM_CodeGen
{$IFDEF USE_INTERNAL_JVCL}
  , rm_JvInterpreter, rm_JvInterpreterParser, rm_JvInterpreterConst
{$ELSE}
  , JvInterpreter, JvInterpreterParser, JvInterpreterConst
{$ENDIF}
{$IFDEF USE_TB2K}
  , TB2Item, TB2Dock, TB2Toolbar
{$ELSE}
{$IFDEF USE_INTERNALTB97}
  , RM_TB97Ctls, RM_TB97Tlbr, RM_TB97
{$ELSE}
  , TB97Ctls, TB97Tlbr, TB97
{$ENDIF}
{$ENDIF}
{$IFDEF USE_SYNEDIT}
  , SynEdit, SynEditHighlighter,SynHighlighterPas, SynHighlighterSQL
  , SynEditRegexSearch, SynEditSearch, SynEditTypes
{$ELSE}
{$IFDEF USE_INTERNAL_JVCL}
  , rm_JvEditor, rm_JvHLEditor , rm_JvEditorCommon
{$ELSE}
  , JvEditor, JvHLEditor, JvEditorCommon
{$ENDIF}
{$ENDIF}
{$IFDEF COMPILER6_UP}, Variants{$ENDIF};

const
  RM_MaxUndoBuffer = 100;

const
  crPencil = 11;
  DefaultPopupItemsCount = 9;

  TAG_SetFrameTop = 1;
  TAG_SetFrameLeft = 2;
  TAG_SetFrameBottom = 3;
  TAG_SetFrameRight = 4;
  TAG_BackColor = 5;
  //  TAG_FrameStyle = 6;

  TAG_SetFontName = 7;
  TAG_SetFontSize = 8;

  TAG_FontBold = 9;
  TAG_FontItalic = 10;
  TAG_FontUnderline = 11;

  TAG_HAlignLeft = 12;
  TAG_HAlignCenter = 13;
  TAG_HAlignRight = 14;
  TAG_HAlignEuqal = 15;

  TAG_FrameSize = 16;
  TAG_FontColor = 17;
  TAG_FrameColor = 19;

  TAG_SetFrame = 20;
  TAG_NoFrame = 21;

  TAG_FrameStyle1 = 25;
  TAG_FrameStyle2 = 26;
  TAG_FrameStyle3 = 27;
  TAG_FrameStyle4 = 28;
  TAG_FrameStyle5 = 29;
  TAG_FrameStyle6 = 30;

  TAG_VAlignTop = 31;
  TAG_VAlignCenter = 32;
  TAG_VAlignBottom = 33;

  TAG_Frame1 = 22;
  TAG_Frame2 = 23;
  TAG_Frame3 = 24;
  TAG_Frame4 = 25;
  TAG_DecWidth = 26;
  TAG_IncWidth = 27;
  TAG_DecHeight = 28;
  TAG_IncHeight = 29;

type
  TRMUndoAction = (rmacInsert, rmacDelete, rmacEdit, rmacZOrder,
    rmacChangeCellSize, rmacChangeGrid, rmacChangePage);
  TRMHighLighter = (rmhlNone, rmhlPascal, rmhlCBuilder, rmhlSql, rmhlPython, rmhlJava,
    rmhlJScript, rmhlVB,
    rmhlHtml, rmhlPerl, rmhlIni, rmhlCocoR, rmhlPhp, rmhlNQC, rmhlCSharp,
    rmhlSyntaxHighlighter);

  TRMSelectionType = (rmssBand, rmssMemo, rmssOther, rmssMultiple);
  TRMSelectionStatus = set of TRMSelectionType;

  TRMUndoRec = record
    Action: TRMUndoAction;
    Page: Integer;
    Stream: TMemoryStream;
    AddObj: TObject;
  end;
  PRMUndoRec = ^TRMUndoRec;

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

  TRMDesignerForm = class;

  { TRMDesigner }
  TRMDesigner = class(TRMCustomDesigner) // fake component
  private
    FOpenFileCount: Integer;
    FTemplDir, FOpenDir, FSaveDir: string;
    FDesignerRestrictions: TRMDesignerRestrictions;
    FDefaultDictionaryFile: string;
    FUseUndoRedo: Boolean;
    FDefaultPageClass: string;

    procedure SetOpenFileCount(Value: Integer);
    procedure SetDesignerRestrictions(Value: TRMDesignerRestrictions);
  protected
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    property OpenFileCount: Integer read FOpenFileCount write SetOpenFileCount default 4;
    property OpenDir: string read FOpenDir write FOpenDir;
    property SaveDir: string read FSaveDir write FSaveDir;
    property TemplateDir: string read FTemplDir write FTemplDir;
    property DesignerRestrictions: TRMDesignerRestrictions read FDesignerRestrictions write SetDesignerRestrictions;
    property DefaultDictionaryFile: string read FDefaultDictionaryFile write FDefaultDictionaryFile;
    property UseUndoRedo: Boolean read FUseUndoRedo write FUseUndoRedo default True;
    property DefaultPageClassName: string read FDefaultPageClass write FDefaultPageClass;

    property OnShowAboutForm;
    property OnLoadReport;
    property OnSaveReport;
    property OnNewReport;
    property OnClose;
    property OnShow;
  end;

 { TRMCustomPageEditor }
  TRMCustomPageEditor = class(TComponent)
  private
  protected
    FDesignerForm: TRMDesignerForm;
  public
    constructor CreateComp(aOwner: TComponent; aDesignerForm: TRMDesignerForm); virtual;
    destructor Destroy; override;
    procedure Editor_Localize; virtual;

    procedure Editor_BtnUndoClick(Sender: TObject); virtual;
    procedure Editor_BtnRedoClick(Sender: TObject); virtual;
    procedure Editor_AddUndoAction(aAction: TRMUndoAction); virtual;

    procedure Editor_BeforeFormDestroy; virtual;
    procedure Editor_OnInspAfterModify(Sender: TObject; const aPropName, aPropValue: string); virtual;
    procedure Editor_KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); virtual;
    procedure Editor_OnFormMouseWheelUp(aUp: Boolean); virtual;
    procedure Editor_Tab1Changed; virtual;
    procedure Editor_DisableDraw; virtual;
    procedure Editor_EnableDraw; virtual;
    procedure Editor_RedrawPage; virtual;
    procedure Editor_Resize; virtual;
    procedure Editor_Init; virtual;
    procedure Editor_SetCurPage; virtual;
    procedure Editor_SelectionChanged(aRefreshInspProp: Boolean); virtual;
    procedure Editor_FillInspFields; virtual;
    procedure Editor_ShowPosition; virtual;
    procedure Editor_ShowContent; virtual;
    function Editor_PageObjects: TList; virtual;
    procedure Editor_OnInspGetObjects(aList: TStrings); virtual;
    procedure Editor_DoClick(Sender: TObject); virtual;
    procedure Editor_SelectObject(ObjName: string); virtual;
    procedure Editor_AfterChange; virtual;
    procedure Editor_SetObjectsID; virtual;
    procedure Editor_BtnCutClick(Sender: TObject); virtual;
    procedure Editor_BtnCopyClick(Sender: TObject); virtual;
    procedure Editor_BtnPasteClick(Sender: TObject); virtual;
    procedure Editor_InitToolbarComponent; virtual;
    procedure Editor_EnableControls; virtual;
    procedure Editor_BtnDeletePageClick(Sender: TObject); virtual;
    procedure Editor_MenuFilePreview1Click(Sender: TObject); virtual;
    procedure Editor_MenuFileHeaderFooterClick(Sender: TObject); virtual;
  published
  end;

  { TRMDefaultPageEditor }
  TRMDefaultPageEditor = class(TRMCustomPageEditor)
  private
    FPanel: TPanel;
  public
    constructor CreateComp(aOwner: TComponent; aDesignerForm: TRMDesignerForm); override;
    destructor Destroy; override;

    procedure Editor_BtnDeletePageClick(Sender: TObject); override;
  end;

  { TRMToolbarModifyPrepared }
  TRMToolbarModifyPrepared = class(TRMToolbar)
  private
    FDesignerForm: TRMDesignerForm;
    btnModifyPreviedFirst: TRMToolbarButton;
    btnModifyPreviedPrev: TRMToolbarButton;
    btnModifyPreviedNext: TRMToolbarButton;
    btnModifyPreviedLast: TRMToolbarButton;
    btnAutoSave: TRMToolbarButton;
    Edit1: TRMEdit;

    procedure Localize;
    procedure _EditPreparedReport(aNewPageNo: Integer);
    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);
  public
    constructor CreateAndDock(AOwner: TComponent; DockTo: TRMDock);
  end;

  { TRMToolbarStandard }
  TRMToolbarStandard = class(TRMToolbar)
  private
    FAryButton: array of TObject;
    FDesignerForm: TRMDesignerForm;
    procedure Localize;
    procedure OnCmbScaleChangeEvent(Sender: TObject);
  public
    BtnFileNew: TRMToolbarButton;
    btnFileSave: TRMToolbarButton;
{$IFDEF USE_TB2K}
    btnFileOpen: TRMSubmenuItem;
{$ELSE}
    btnFileOpen: TRMToolbarButton;
{$ENDIF}
    btnPreview1: TRMToolbarButton;
    btnPreview: TRMToolbarButton;
    btnPrint: TRMToolbarButton;
    btnCut: TRMToolbarButton;
    btnCopy: TRMToolbarButton;
    btnPaste: TRMToolbarButton;
    ToolbarSep972: TRMToolbarSep;
    btnRedo: TRMToolbarButton;
    btnUndo: TRMToolbarButton;
    ToolbarSep973: TRMToolbarSep;
    btnBringtoFront: TRMToolbarButton;
    btnSendtoBack: TRMToolbarButton;
    btnSelectAll: TRMToolbarButton;
    ToolbarSep974: TRMToolbarSep;

    ToolbarSep9723: TRMToolbarSep;
    btnDeletePage: TRMToolbarButton;
    btnPageSetup: TRMToolbarButton;
    ToolbarSep975: TRMToolbarSep;
    GB2: TRMToolbarButton;
    GB3: TRMToolbarButton;
    GB1: TRMToolbarButton;
    ToolbarSep976: TRMToolbarSep;
    btnExit: TRMToolbarButton;
    ToolbarSep971: TRMToolbarSep;
    ToolbarSepScale: TRMToolbarSep;
    cmbScale: TRMComboBox97 {TComboBox};

    constructor CreateAndDock(AOwner: TComponent; DockTo: TRMDock);
  end;

{$IFDEF USE_SYNEDIT}
  TRMSynEditor = class(TSynEdit)
  private
    FSynHighlighter:TSynCustomHighlighter;
{$ELSE}
  TRMSynEditor = class(TJvHLEditor)
  private
     procedure OnCodeMemoPaintGutterEvent(Sender: TObject; aCanvas: TCanvas);
{$ENDIF}
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;

    function CreateStringList: TStrings;
    procedure SetHighLighter(aHighLighter: TRMHighLighter);
    procedure SetGutterWidth(aWidth: Integer);
    procedure SetGroupUndo(aValue: Boolean);
    procedure SetUndoAfterSave(aValue: Boolean);
    procedure SetReservedForeColor(aValue: TColor);
    procedure SetCommentForeColor(aValue: TColor);
    procedure SetShowLineNumbers(aValue: Boolean);

    function RMCanCut: Boolean;
    function RMCanCopy: Boolean;
    function RMCanPaste: Boolean;
    function RMCanUndo: Boolean;
    function RMCanRedo: Boolean;

    procedure RMClearUndoBuffer;
    procedure RMClipBoardCut;
    procedure RMClipBoardCopy;
    procedure RMClipBoardPaste;
    procedure RMDeleteSelected;
    procedure RMUndo;
    procedure RMRedo;
  end;

  { TRMVirtualReportDesigner }
  TRMVirtualReportDesigner = class(TRMReportDesigner)
  private
{$IFDEF USE_SYNEDIT}
    FSearchBackwards: boolean;
    FSearchCaseSensitive: boolean;
    FSearchFromCaret: boolean;
    FSearchFromCaret1: Boolean;
    FSearchSelectionOnly: boolean;
    FSearchTextAtCaret: boolean;
    FSearchWholeWords: boolean;
    FSearchRegex: boolean;

    FSearchText: string;
    FSearchTextHistory: string;
    FReplaceText: string;
    FReplaceTextHistory: string;

    FSynEditSearch: TSynEditSearch;
    FSynEditRegexSearch: TSynEditRegexSearch;
{$ELSE}
    FScriptCanReplace: Boolean;
    FFindDialog: TFindDialog;
    FReplaceDialog: TReplaceDialog;
{$ENDIF}

{$IFDEF USE_SYNEDIT}
    procedure OnCodeMemoReplaceText(Sender: TObject; const aSearch,
      aReplace: string; aLine, aColumn: Integer; var Action: TSynReplaceAction);
    procedure OnCodeMemoStatusChange(Sender: TObject; Changes: TSynStatusChanges);
{$ELSE}
    procedure OnCodeMemoSelectionChangeEvent(Sender: TObject); virtual;

    procedure FindDialog1Find(Sender: TObject);
    procedure ReplaceDialog1Replace(Sender: TObject);
    procedure ReplaceDialog1Find(Sender: TObject);
    procedure ReplaceDialog1Show(Sender: TObject);
    procedure FindNext;
    procedure Replace_FindNext;
{$ENDIF}

    procedure DoDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
    procedure DoDragDrop(Sender, Source: TObject; X, Y: Integer);
    procedure OnCodeMemoChangeEvent(Sender: TObject); virtual;
    procedure DoSearchReplaceText(aReplace: Boolean; aBackwards: Boolean);
    procedure ShowSearchReplaceDialog(aReplace: Boolean);

  protected
    FCodeGenEngine: TRMCodeGenEngine;
    FCodeMemo: TRMSynEditor;
    FTab1: TRMTabControl;
    FMouseDown, FTabChange: Boolean;

    FInAssignScript:Boolean;
    procedure BeginUpdateScript;
    procedure EndUpdateScript;
    procedure DoCodeGenGetScript(const AList: TStrings);
    procedure DoCodeGenScriptChanged(Sender: TObject);
    procedure SetModified(Value: Boolean); override;
  public
    constructor Create(aOwner: TComponent); override;
    destructor Destroy; override;

    {//begin 自动生成事件框架相关代码  作者: dejoy}
    function GetEditorScriptPos: integer; override;
    procedure SetEditorScriptPos(const Value: integer); override;

    function GetEditorScriptText: string;override;
    procedure SetEditorScriptText(const Value: string);override;
    function GetEditorScript: TStrings;override;
    procedure SetEditorScript(Value: TStrings);override;

    function FunctionExists(const aFuncName: string): Boolean; override;
    function DefineMethod(const AFuncName,AFuncDefine: string): boolean;override;
    function GotoMethod(const AFuncName: string): boolean; override;
    function RenameMethod(const ACurName,ANewName: string): boolean;override;

    procedure GetMethodsList(ATypeInfo: PTypeInfo; AValues: TStrings);override;

    procedure ShowPosition; virtual; abstract;
    procedure EnableControls; virtual; abstract;

    property CodeGenEngine: TRMCodeGenEngine read FCodeGenEngine;
    property CodeMemo: TRMSynEditor read FCodeMemo;
    {//End 自动生成事件框架相关代码  作者: dejoy}
    
    property Tab1: TRMTabControl read FTab1;
  end;

  { TRMDesignerForm }
  TRMDesignerForm = class(TRMVirtualReportDesigner)
    StatusBar1: TStatusBar;
    OpenDialog1: TOpenDialog;
    ImageListStand: TImageList;
    ImageListFont: TImageList;
    ImageListFrame: TImageList;
    ImageListAlign: TImageList;
    ImageListSize: TImageList;
    ImageListPosition: TImageList;
    ImageListModifyPreview: TImageList;
    ImageListAddinTools: TImageList;
    SaveDialog1: TSaveDialog;
    procedure FormCreate(Sender: TObject);
    procedure FormResize(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
    FInspBusy: Boolean;
    FInspForm: TRMInspForm;
    FFindReplaceForm: TForm;
    FOpenFiles: TStringList;
    FAutoOpenLastFile: Boolean;
    FWorkSpaceColor: TColor;
    FInspFormColor: TColor;
    FFieldForm: TRMInsFieldsForm;
    FEditorForm: TForm;
    FUndoBufferLength, FRedoBufferLength: Integer;

    FBusy: Boolean; // busy flag. need!
    FUnlimitedHeight: Boolean;
    FCurPage: Integer;
    FCurPageEditor: TRMCustomPageEditor;
    FCurDocName, FCaption: string;
    FOldFactor: Integer;
    FShowGrid, FGridAlign: Boolean;
    FGridSize: Integer;
    FPopupMenuOpendFiles: TRMPopupMenu;

    // 主菜单
    FMainMenu: TRMMenuBar;
    FBarFile: TRMSubmenuItem;
    padFileNew: TRMmenuItem;
    padFileOpen: TRMmenuItem;
    padFileSave: TRMmenuItem;
    padFileSaveAs: TRMmenuItem;
    N40: TRMSeparatorMenuItem;
    padVarList: TRMmenuItem;
    LoadDictionary1: TRMmenuItem;
    MergeDictionary1: TRMmenuItem;
    SaveAsDictionary1: TRMmenuItem;
    N21: TRMSeparatorMenuItem;
    padPageSetup: TRMmenuItem;
    padPreview: TRMmenuItem;
    FMenuFileHeaderFooter: TRMMenuItem;
    padPrint: TRMmenuItem;
    N24: TRMSeparatorMenuItem;
    padFileProperty: TRMmenuItem;
    N2: TRMSeparatorMenuItem;

⌨️ 快捷键说明

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