📄 rm_desgn.pas
字号:
{*****************************************}
{ }
{ 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 + -