📄 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, 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 + -