📄 rm_dsgform.pas
字号:
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 + -