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

📄 rm_dsgform.pas

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

interface

{$I RM.INC}

uses
  SysUtils, Windows, Messages, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Buttons, Printers, Menus, ComCtrls, ExtCtrls, Clipbrd,
  RM_Class, RM_Common, RM_DsgCtrls, RM_Ctrls, RM_Designer
{$IFDEF COMPILER4_UP}, ImgList{$ENDIF}
{$IFDEF COMPILER6_UP}, Variants{$ENDIF};

type

  TRMDesignerDrawMode = (dmAll, dmSelection, dmShape);
  TRMCursorType = (ctNone, ct1, ct2, ct3, ct4, ct5, ct6, ct7, ct8);
  TRMDesignerEditMode = (mdInsert, mdSelect);

  TRMWorkSpace = class;
  TRMReportPageEditor = class;

  TRMMouseMode = (mmNone, mmSelect, mmRegionDrag, mmRegionResize,
    mmSelectedResize, mmInsertObj);
  TRMShapeMode = (smFrame, smAll);
  TRMSplitInfo = record
    SplRect: TRect;
    SplX: Integer;
    View1, View2: TRMView;
  end;

  { TRMDialogForm }
  TRMDialogForm = class(TForm)
  private
    FDesignerForm: TRMDesignerForm;
    procedure WMMove(var Message: TMessage); message WM_MOVE;
  public
    constructor CreateNew(AOwner: TComponent; Dummy: Integer); override;
    procedure CreateParams(var Params: TCreateParams); override;
    procedure SetPageFormProp;

    procedure OnFormResizeEvent(Sender: TObject);
    procedure OnFormKeyDownEvent(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure OnFormCloseQueryEvent(Sender: TObject; var CanClose: Boolean);
  end;

  { TRMWorkSpace }
  TRMWorkSpace = class(TPanel)
  private
    FDesignerForm: TRMDesignerForm;
    FPageEditor: TRMReportPageEditor;

    FBandMoved: Boolean;
    FDisableDraw: Boolean;
    FMode: TRMDesignerEditMode; // current mode
    FMouseButtonDown: Boolean; // mouse button was pressed
    FDragFlag: Boolean;
    FCursorType: TRMCursorType; // current mouse cursor (sizing arrows)
    FDoubleClickFlag: Boolean; // was double click
    FObjectsSelecting: Boolean; // selecting objects by framing
    FLeftTop: TPoint;
    FMoved: Boolean; // mouse was FMoved (with pressed btn)
    FLastX, FLastY: Integer; // here stored last mouse coords
    FSplitInfo: TRMSplitInfo;
    FBmp_Event, FBmp_HighLight: TBitmap;

    FCurrentBand: TRMBandMasterData;
    FCurrentView: TRMReportView;
    FFieldListBox: TListBox;

    procedure OnFieldListBoxClick(Sender: TObject);
    procedure OnFieldListBoxDrawItem(aControl: TWinControl; aIndex: Integer; aRect: TRect; aState: TOwnerDrawState);

    procedure NormalizeCoord(t: TRMView);
    procedure NormalizeRect(var r: TRect);

    procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
    procedure OnDoubleClickEvent(Sender: TObject);

    procedure DrawFocusRect(aRect: TRect);
    procedure DrawHSplitter(aRect: TRect);
    procedure DrawSelection(t: TRMView);
    procedure DrawShape(t: TRMView);
    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 DrawRect(aView: TRMView);
  public
    PageForm: TRMDialogForm;

    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure Init;
    procedure SetPage;
    procedure GetMultipleSelected;
    procedure DrawPage(aDrawMode: TRMDesignerDrawMode);
    procedure DrawObject(t: TRMView);
    procedure Draw(N: Integer; aClipRgn: HRGN);
    procedure RedrawPage;

    procedure OnMouseMoveEvent(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    procedure OnMouseDownEvent(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    procedure OnMouseUpEvent(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

    procedure CopyToClipboard;
    procedure DeleteObjects(aAddUndoAction: Boolean);
    procedure PasteFromClipboard;
    procedure SelectAll;
    procedure RoundCoord(var x, y: Integer);

    property DesignerForm: TRMDesignerForm read FDesignerForm write FDesignerForm;
    property DisableDraw: Boolean read FDisableDraw write FDisableDraw;
    property EditMode: TRMDesignerEditMode read FMode write FMode; // current mode
    property MouseButtonDown: Boolean read FMouseButtonDown write FMouseButtonDown; // mouse button was pressed
    property CurrentView: TRMReportView read FCurrentView write FCurrentView;
  end;

  { TRMToolbarComponent }
  TRMToolbarComponent = class(TPanel)
  private
    FDesignerForm: TRMDesignerForm;
    FPageEditor: TRMReportPageEditor;
    FWorkSpace: TRMWorkSpace;

    FControlIndex: Integer;
    FBandsMenu, FPopupMenuComponent: TPopupMenu;
    FBtnNoSelect, FBtnMemoView: TSpeedButton;
    FBtnUp, FBtnDown: {$IFDEF USE_TB2K}TSpeedButton{$ELSE}TRMToolbarButton{$ENDIF};
    FOldPageType: Integer;
    FBusy: Boolean;
    FObjectBand: TSpeedButton;
    FSelectedObjIndex: Integer;
    FImageList: TImageList;

    procedure OnBandMenuPopup(Sender: TObject);
    procedure OnAddBandEvent(Sender: TObject);
    procedure OnOB1ClickEvent(Sender: TObject);
    procedure OnButtonBandClickEvent(Sender: TObject);
    procedure OnOB2MouseDownEvent(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure OnOB2ClickEvent(Sender: TObject);
    procedure OnOB2ClickEvent_1(Sender: TObject);
    procedure OnAddInObectMenuItemClick(Sender: TObject);

    procedure RefreshControls;
    procedure OnResizeEvent(Sender: TObject);
    procedure OnBtnUpClickEvent(Sender: TObject);
    procedure OnBtnDownClickEvent(Sender: TObject);
  public
    constructor CreateComp(aOwner: TComponent);
    destructor Destroy; override;

    procedure CreateObjects;

    property btnNoSelect: TSpeedButton read FBtnNoSelect;
    property ObjectBand: TSpeedButton read FObjectBand;
    property SelectedObjIndex: Integer read FSelectedObjIndex;
  end;

  { TRMToolbarEdit }
  TRMToolbarEdit = class(TRMToolbar)
  private
    FDesignerForm: TRMDesignerForm;
    FPageEditor: TRMReportPageEditor;

    FcmbFont: TRMFontComboBox;
    FcmbFontSize: TRMComboBox97;
    ToolbarSep971: TRMToolbarSep;

    btnFontBold: TRMToolbarButton;
    btnFontItalic: TRMToolbarButton;
    btnFontUnderline: TRMToolbarButton;
    ToolbarSep972: TRMToolbarSep;

    FBtnFontColor: TRMColorPickerButton;
    ToolbarSep973: TRMToolbarSep;
    FBtnHighlight: TRMToolbarButton;
    ToolbarSep9730: TRMToolbarSep;

    btnHLeft: TRMToolbarButton;
    btnHCenter: TRMToolbarButton;
    btnHRight: TRMToolbarButton;
    btnHSpaceEqual: TRMToolbarButton;
    ToolbarSep974: TRMToolbarSep;

    btnVTop: TRMToolbarButton;
    btnVCenter: TRMToolbarButton;
    btnVBottom: TRMToolbarButton;
    ToolbarSep975: TRMToolbarSep;

    procedure Localize;
    procedure BtnHighlightClick(Sender: TObject);
  public
    constructor CreateAndDock(aOwner: TComponent; DockTo: TRMDock);
  end;

  { TRMToolbarAddinTools }
  TRMToolbarAddinTools = class(TRMToolbar)
  private
    FDesignerForm: TRMDesignerForm;
    FPageEditor: TRMReportPageEditor;

    BtnDBField: TRMToolbarButton;
    btnExpression: TRMToolbarButton;
    btnInsertFields: TRMToolbarButton;

    procedure Localize;
    procedure btnDBFieldClick(Sender: TObject);
    procedure btnExpressionClick(Sender: TObject);
    procedure BtnInsertFieldsClick(Sender: TObject);
  public
    constructor CreateAndDock(AOwner: TComponent; DockTo: TRMDock);
  end;

  { TRMToolbarBorder }
  TRMToolbarBorder = class(TRMToolbar)
  private
    FDesignerForm: TRMDesignerForm;
    FPageEditor: TRMReportPageEditor;

    btnFrameTop: TRMToolbarButton;
    btnFrameLeft: TRMToolbarButton;
    btnFrameBottom: TRMToolbarButton;
    btnFrameRight: TRMToolbarButton;
    btnNoFrame: TRMToolbarButton;
    btnSetFrame: TRMToolbarButton;
    ToolbarSep9717: TRMToolbarSep;
    ToolbarSep9722: TRMToolbarSep;
    FBtnBackColor: TRMColorPickerButton;
    FBtnFrameColor: TRMColorPickerButton;
    ToolbarSep9719: TRMToolbarSep;
    btnSetFrameStyle: TRMFrameStyleButton {TRMToolbarButton};
    FCmbFrameWidth: TRMComboBox97;

    procedure Localize;
    procedure SetStatus;
    procedure btnSetFrameStyle_OnChange(Sender: TObject);
  public
    constructor CreateAndDock(AOwner: TComponent; DockTo: TRMDock);
  end;

  { TRMToolbarAlign }
  TRMToolbarAlign = class(TRMToolbar)
  private
    FPageEditor: TRMReportPageEditor;
    FDesignerForm: TRMDesignerForm;

    btnAlignLeftRight: TRMToolbarButton;
    btnAlignTopBottom: TRMToolbarButton;
    btnAlignVWCenter: TRMToolbarButton;
    btnAlignLeft: TRMToolbarButton;
    btnAlignHWCenter: TRMToolbarButton;
    btnAlignHCenter: TRMToolbarButton;
    btnAlignVSE: TRMToolbarButton;
    btnAlignHSE: TRMToolbarButton;
    btnAlignRight: TRMToolbarButton;
    btnAlignBottom: TRMToolbarButton;
    btnAlignTop: TRMToolbarButton;
    btnAlignVCenter: TRMToolbarButton;
    ToolbarSep9720: TRMToolbarSep;
    ToolbarSep9721: TRMToolbarSep;
    ToolbarSep9710: TRMToolbarSep;

    procedure Localize;
    function GetLeftObject: Integer;
    function GetTopObject: Integer;
    function GetRightObject: Integer;
    function GetBottomObject: Integer;

    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 btnAlignVCenterClick(Sender: TObject);
    procedure btnAlignLeftRightClick(Sender: TObject);
    procedure btnAlignTopBottomClick(Sender: TObject);
  public
    constructor CreateAndDock(AOwner: TComponent; DockTo: TRMDock);
  end;

  { TRMToolbarSize }
  TRMToolbarSize = class(TRMToolbar)
  private
    FPageEditor: TRMReportPageEditor;
    FDesignerForm: TRMDesignerForm;

    btnSetWidthToMin: TRMToolbarButton;
    btnSetWidthToMax: TRMToolbarButton;
    btnSetHeightToMin: TRMToolbarButton;
    btnSetHeightToMax: TRMToolbarButton;
    ToolbarSep979: TRMToolbarSep;

    procedure Localize;
    procedure btnSetWidthToMinClick(Sender: TObject);
    procedure btnSetWidthToMaxClick(Sender: TObject);
    procedure btnSetHeightToMinClick(Sender: TObject);
    procedure btnSetHeightToMaxClick(Sender: TObject);
  public
    constructor CreateAndDock(AOwner: TComponent; DockTo: TRMDock);
  end;

  { TRMReportPageEditor }
  TRMReportPageEditor = class(TRMCustomPageEditor)
  private
    FDesignerForm: TRMDesignerForm;
    FToolbarComponent: TRMToolbarComponent;
    FToolbarEdit: TRMToolbarEdit;
    FToolbarAlign: TRMToolbarAlign;
    FToolbarBorder: TRMToolbarBorder;
    FToolbarSize: TRMToolbarSize;
    FToolbarAddinTools: TRMToolbarAddinTools;
    FWorkSpace: TRMWorkSpace;
    FOldFactor: Integer;
    FGridBitmap: TBitmap;
    FObjRepeat: Boolean; // was pressed Shift + Insert Object
    FShowSizes: Boolean;
    FShapeMode: TRMShapeMode; // show selection: frame or bar
    FFindReplaceForm: TForm;
    FUndoBusy: Boolean;

    Panel2: TRMPanel;
    FScrollBox: TRMNewScrollBox;
    pnlHorizontalRuler: TRMPanel;
    pnlVerticalRuler: TRMPanel;
    pnlWorkSpace: TRMPanel;
    FHRuler, FVRuler: TRMDesignerRuler;
    Panel7: TPanel;
    PBox1: TPaintBox;

   // 右键菜单
    FPopupMenu: TRMPopupMenu;
    padpopCut: TRMMenuItem;
    padpopCopy: TRMMenuItem;
    padpopPaste: TRMMenuItem;
    padpopDelete: TRMMenuItem;
    N8: TRMSeparatorMenuItem;
    padpopFrame: TRMMenuItem;
    padpopEdit: TRMMenuItem;
    padpopClearContents: TRMMenuItem;

    // 主菜单
    FMainMenu: TRMMenuBar;
    barEdit: TRMSubmenuItem;
    padUndo: TRMmenuItem;
    padRedo: TRMmenuItem;
    N47: TRMSeparatorMenuItem;
    padCut: TRMmenuItem;
    padCopy: TRMmenuItem;
    padPaste: TRMmenuItem;
    padDelete: TRMmenuItem;
    padSelectAll: TRMmenuItem;
    padEdit: TRMmenuItem;
    N3: TRMSeparatorMenuItem;
    padEditReplace: TRMmenuItem;
    N26: TRMSeparatorMenuItem;
    padBringtoFront: TRMmenuItem;
    padSendtoBack: TRMmenuItem;
    N4: TRMSeparatorMenuItem;
    itmEditLockControls: TRMmenuItem;

    barTools: TRMSubmenuItem;
    padSetToolbar: TRMSubmenuItem;
    Pan1: TRMmenuItem;
    Pan2: TRMmenuItem;
    Pan3: TRMmenuItem;
    Pan5: TRMmenuItem;
    Pan4: TRMmenuItem;
    Pan6: TRMmenuItem;
    Pan8: TRMmenuItem;
    Pan7: TRMmenuItem;
    Pan9: TRMmenuItem;
    padAddTools: TRMmenuItem;
    padOptions: TRMmenuItem;

    function GetSelectionStatus: TRMSelectionStatus;
    procedure Localize;
    procedure ShowObjMsg;
    procedure SetRulerOffset;
    procedure PBox1Paint(Sender: TObject);
    procedure OnScrollBox1ResizeEvent(Sender: TObject);
    procedure LoadIni;
    procedure SaveIni;
    procedure Popup1Popup(Sender: TObject);
    procedure padDeleteClick(Sender: TObject);
    procedure padpopFrameClick(Sender: TObject);
    procedure padpopEditClick(Sender: TObject);
    procedure padpopClearContentsClick(Sender: TObject);
    procedure OnpadAutoArrangeClick(Sender: TObject);
    function RectTypEnabled: Boolean;
    function ZEnabled: Boolean;
    function CutEnabled: Boolean;
    function CopyEnabled: Boolean;
    function PasteEnabled: Boolean;
    function DelEnabled: Boolean;
    function EditEnabled: Boolean;
    function RedoEnabled: Boolean;
    function UndoEnabled: Boolean;
    procedure MoveObjects(dx, dy: Integer; Resize: Boolean);
    procedure ShowEditor;
    procedure barFileClick(Sender: TObject);
    procedure btnSelectAllClick(Sender: TObject);
    procedure padEditClick(Sender: TObject);
    procedure padEditReplaceClick(Sender: TObject);
    procedure btnBringtoFrontClick(Sender: TObject);
    procedure btnSendtoBackClick(Sender: TObject);
    procedure itmEditLockControlsClick(Sender: TObject);
    procedure padSetToolbarClick(Sender: TObject);
    procedure Pan2Click(Sender: TObject);
    procedure Pan5Click(Sender: TObject);
    procedure padOptionsClick(Sender: TObject);
    procedure OnFindReplaceView(Sender: TObject);
    procedure ShowFieldsDialog(aVisible: Boolean);
  protected
  public

⌨️ 快捷键说明

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