📄 fr_desgn.pas
字号:
{******************************************}
{ }
{ FastReport v2.4 }
{ Report Designer }
{ }
{ Copyright (c) 1998-2001 by Tzyganenko A. }
{ }
{******************************************}
unit FR_Desgn;
interface
{$I FR.inc}
uses
SysUtils, Windows, Messages, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, Buttons, ExtCtrls, Printers, ComCtrls,
Menus {$IFDEF Delphi4}, ImgList {$ENDIF}, FR_Class, FR_Color,
FR_Ctrls, FR_Dock, FR_Insp, FR_Flds1, FR_Combo, FR_Edit;
const
MaxUndoBuffer = 100;
crPencil = 11;
type
TLoadReportEvent = procedure(Report: TfrReport; var ReportName: String;
var Opened: Boolean) of object;
TSaveReportEvent = procedure(Report: TfrReport; var ReportName: String;
SaveAs: Boolean; var Saved: Boolean) of object;
TfrDesignerForm = class;
TfrDesigner = class(TComponent) // fake component
private
FCloseQuery: Boolean;
FHideDisabledButtons: Boolean;
FTemplDir, FOpenDir, FSaveDir: String;
FOnLoadReport: TLoadReportEvent;
FOnSaveReport: TSaveReportEvent;
FOnShow: TNotifyEvent;
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: TLoadReportEvent read FOnLoadReport write FOnLoadReport;
property OnSaveReport: TSaveReportEvent read FOnSaveReport write FOnSaveReport;
property OnShow: TNotifyEvent read FOnShow write FOnShow;
end;
TfrSelectionType = (ssBand, ssMemo, ssOther, ssMultiple, ssClipboardFull);
TfrSelectionStatus = set of TfrSelectionType;
TfrReportUnits = (ruPixels, ruMM, ruInches);
TfrShapeMode = (smFrame, smAll);
TfrDesignerDrawMode = (dmAll, dmSelection, dmShape);
TfrDesignerRestriction =
(frdrDontEditObj, frdrDontModifyObj, frdrDontSizeObj, frdrDontMoveObj,
frdrDontDeleteObj, frdrDontCreateObj,
frdrDontDeletePage, frdrDontCreatePage, frdrDontEditPage,
frdrDontCreateReport, frdrDontLoadReport, frdrDontSaveReport,
frdrDontPreviewReport, frdrDontEditVariables, frdrDontChangeReportOptions);
TfrDesignerRestrictions = set of TfrDesignerRestriction;
TfrUndoAction = (acInsert, acDelete, acEdit, acZOrder);
PfrUndoObj = ^TfrUndoObj;
TfrUndoObj = record
Next: PfrUndoObj;
ObjID: Integer;
ObjPtr: TfrView;
Int: Integer;
end;
TfrUndoRec = record
Action: TfrUndoAction;
Page: Integer;
Objects: PfrUndoObj;
end;
PfrUndoRec1 = ^TfrUndoRec1;
TfrUndoRec1 = record
ObjPtr: TfrView;
Int: Integer;
end;
PfrUndoBuffer = ^TfrUndoBuffer;
TfrUndoBuffer = Array[0..MaxUndoBuffer - 1] of TfrUndoRec;
TfrMenuItemInfo = class(TObject)
private
MenuItem: TMenuItem;
Btn: TfrSpeedButton;
end;
TfrSplitInfo = record
SplRect: TRect;
SplX: Integer;
View1, View2: TfrView;
end;
TfrDesignerPage = class(TPanel)
private
Down, // mouse button was pressed
Moved, // mouse was moved (with pressed btn)
DFlag, // was double click
RFlag: Boolean; // selecting objects by framing
Mode: (mdInsert, mdSelect); // current mode
CT: (ctNone, ct1, ct2, ct3, ct4, ct5, ct6, ct7, ct8); // cursor type
LastX, LastY: Integer; // here stored last mouse coords
SplitInfo: TfrSplitInfo;
RightBottom: Integer;
LeftTop: TPoint;
FirstBandMove: Boolean;
WasCtrl: Boolean;
FDesigner: TfrDesignerForm;
FDrag: Boolean;
DisableDraw: Boolean;
procedure NormalizeRect(var r: TRect);
procedure NormalizeCoord(t: TfrView);
function FindNearestEdge(var x, y: Integer): Boolean;
procedure RoundCoord(var x, y: Integer);
procedure Draw(N: Integer; ClipRgn: HRGN);
procedure DrawPage(DrawMode: TfrDesignerDrawMode);
procedure DrawRectLine(Rect: TRect);
procedure DrawFocusRect(Rect: TRect);
procedure DrawHSplitter(Rect: TRect);
procedure DrawSelection(t: TfrView);
procedure DrawShape(t: TfrView);
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;
TfrDesignerForm = class(TfrReportDesigner)
StatusBar1: TStatusBar;
frDock1: TfrDock;
frDock2: TfrDock;
frDock3: TfrDock;
Popup1: TPopupMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
MainMenu1: TMainMenu;
FileMenu: TMenuItem;
EditMenu: TMenuItem;
ToolMenu: TMenuItem;
N10: TMenuItem;
N11: TMenuItem;
N12: TMenuItem;
N13: TMenuItem;
N19: TMenuItem;
N20: TMenuItem;
N21: TMenuItem;
N23: TMenuItem;
N24: TMenuItem;
N25: TMenuItem;
N27: TMenuItem;
N28: TMenuItem;
N26: TMenuItem;
N29: TMenuItem;
N30: TMenuItem;
N31: TMenuItem;
N32: TMenuItem;
N33: TMenuItem;
N36: TMenuItem;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
ImageList1: TImageList;
Pan5: TMenuItem;
N8: TMenuItem;
N38: TMenuItem;
Pan6: TMenuItem;
N39: TMenuItem;
N40: TMenuItem;
N42: TMenuItem;
MastMenu: TMenuItem;
N16: TMenuItem;
Panel2: TfrToolBar;
FileBtn1: TfrTBButton;
FileBtn2: TfrTBButton;
FileBtn3: TfrTBButton;
FileBtn4: TfrTBButton;
CutB: TfrTBButton;
CopyB: TfrTBButton;
PstB: TfrTBButton;
ZB1: TfrTBButton;
ZB2: TfrTBButton;
SelAllB: TfrTBButton;
PgB1: TfrTBButton;
PgB2: TfrTBButton;
PgB3: TfrTBButton;
GB1: TfrTBButton;
GB2: TfrTBButton;
ExitB: TfrTBButton;
Panel3: TfrToolBar;
AlB1: TfrTBButton;
AlB2: TfrTBButton;
AlB3: TfrTBButton;
AlB4: TfrTBButton;
AlB5: TfrTBButton;
FnB1: TfrTBButton;
FnB2: TfrTBButton;
FnB3: TfrTBButton;
ClB2: TfrTBButton;
HlB1: TfrTBButton;
AlB6: TfrTBButton;
AlB7: TfrTBButton;
Panel1: TfrToolBar;
FrB1: TfrTBButton;
FrB2: TfrTBButton;
FrB3: TfrTBButton;
FrB4: TfrTBButton;
ClB1: TfrTBButton;
ClB3: TfrTBButton;
FrB5: TfrTBButton;
FrB6: TfrTBButton;
frTBSeparator1: TfrTBSeparator;
frTBSeparator2: TfrTBSeparator;
frTBSeparator3: TfrTBSeparator;
frTBSeparator4: TfrTBSeparator;
frTBSeparator5: TfrTBSeparator;
frTBPanel1: TfrTBPanel;
C3: TfrComboBox;
C2: TfrFontComboBox;
frTBPanel2: TfrTBPanel;
frTBSeparator6: TfrTBSeparator;
frTBSeparator7: TfrTBSeparator;
frTBSeparator8: TfrTBSeparator;
frTBSeparator9: TfrTBSeparator;
frTBSeparator10: TfrTBSeparator;
N37: TMenuItem;
Pan2: TMenuItem;
Pan3: TMenuItem;
Pan1: TMenuItem;
Pan4: TMenuItem;
Panel4: TfrToolBar;
OB1: TfrTBButton;
OB2: TfrTBButton;
OB3: TfrTBButton;
OB4: TfrTBButton;
OB5: TfrTBButton;
frTBSeparator12: TfrTBSeparator;
Panel5: TfrToolBar;
Align1: TfrTBButton;
Align2: TfrTBButton;
Align3: TfrTBButton;
Align4: TfrTBButton;
Align5: TfrTBButton;
Align6: TfrTBButton;
Align7: TfrTBButton;
Align8: TfrTBButton;
Align9: TfrTBButton;
Align10: TfrTBButton;
frTBSeparator13: TfrTBSeparator;
Tab1: TTabControl;
ScrollBox1: TScrollBox;
Image1: TImage;
frDock4: TfrDock;
HelpMenu: TMenuItem;
N34: TMenuItem;
GB3: TfrTBButton;
N46: TMenuItem;
N47: TMenuItem;
UndoB: TfrTBButton;
frTBSeparator14: TfrTBSeparator;
AlB8: TfrTBButton;
RedoB: TfrTBButton;
N48: TMenuItem;
OB6: TfrTBButton;
frTBSeparator15: TfrTBSeparator;
Panel6: TfrToolBar;
Pan7: TMenuItem;
Image2: TImage;
N14: TMenuItem;
Panel7: TPanel;
PBox1: TPaintBox;
N17: TMenuItem;
HelpBtn: TfrTBButton;
frTBSeparator11: TfrTBSeparator;
N18: TMenuItem;
N22: TMenuItem;
N35: TMenuItem;
Popup2: TPopupMenu;
N41: TMenuItem;
N43: TMenuItem;
N44: TMenuItem;
LinePanel: TPanel;
frSpeedButton1: TfrSpeedButton;
frSpeedButton2: TfrSpeedButton;
frSpeedButton3: TfrSpeedButton;
frSpeedButton4: TfrSpeedButton;
frSpeedButton5: TfrSpeedButton;
StB1: TfrTBButton;
frSpeedButton6: TfrSpeedButton;
C4: TfrComboBox;
Pan8: TMenuItem;
N45: TMenuItem;
PgB4: TfrTBButton;
N15: TMenuItem;
Bevel1: TBevel;
FontDialog1: TFontDialog;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure DoClick(Sender: TObject);
procedure ClB1Click(Sender: TObject);
procedure GB1Click(Sender: TObject);
procedure ZB1Click(Sender: TObject);
procedure ZB2Click(Sender: TObject);
procedure PgB1Click(Sender: TObject);
procedure PgB2Click(Sender: TObject);
procedure OB2MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure OB1Click(Sender: TObject);
procedure CutBClick(Sender: TObject);
procedure CopyBClick(Sender: TObject);
procedure PstBClick(Sender: TObject);
procedure SelAllBClick(Sender: TObject);
procedure ExitBClick(Sender: TObject);
procedure PgB3Click(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure N5Click(Sender: TObject);
procedure N6Click(Sender: TObject);
procedure GB2Click(Sender: TObject);
procedure FileBtn1Click(Sender: TObject);
procedure FileBtn2Click(Sender: TObject);
procedure FileBtn3Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure N8Click(Sender: TObject);
procedure HlB1Click(Sender: TObject);
procedure FileBtn4Click(Sender: TObject);
procedure N42Click(Sender: TObject);
procedure Popup1Popup(Sender: TObject);
procedure N23Click(Sender: TObject);
procedure N37Click(Sender: TObject);
procedure Pan2Click(Sender: TObject);
procedure N14Click(Sender: TObject);
procedure Align1Click(Sender: TObject);
procedure Align2Click(Sender: TObject);
procedure Align3Click(Sender: TObject);
procedure Align4Click(Sender: TObject);
procedure Align5Click(Sender: TObject);
procedure Align6Click(Sender: TObject);
procedure Align7Click(Sender: TObject);
procedure Align8Click(Sender: TObject);
procedure Align9Click(Sender: TObject);
procedure Align10Click(Sender: TObject);
procedure Tab1Change(Sender: TObject);
procedure N34Click(Sender: TObject);
procedure GB3Click(Sender: TObject);
procedure UndoBClick(Sender: TObject);
procedure RedoBClick(Sender: TObject);
procedure N20Click(Sender: TObject);
procedure PBox1Paint(Sender: TObject);
procedure HelpBtnClick(Sender: TObject);
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure N22Click(Sender: TObject);
procedure Tab1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure frSpeedButton1Click(Sender: TObject);
procedure StB1Click(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure ScrollBox1Resize(Sender: TObject);
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 Tab1DragDrop(Sender, Source: TObject; X, Y: Integer);
procedure PgB4Click(Sender: TObject);
procedure StatusBar1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure StatusBar1DblClick(Sender: TObject);
procedure C2DblClick(Sender: TObject);
{$IFDEF 1CScript}
procedure N99Click(Sender: TObject);
{$ENDIF}
private
{ Private declarations }
{$IFDEF 1CScript}
N99: TMenuItem;
{$ENDIF}
PageForm: TForm;
PageView: TfrDesignerPage;
InspForm: TfrInspForm;
EditorForm: TfrEditorForm;
ColorSelector: TColorSelector;
MenuItems: TList;
ItemWidths: TStringList;
FCurPage: Integer;
FGridSizeX, FGridSizeY: Integer;
FGridShow, FGridAlign: Boolean;
FUnits: TfrReportUnits;
FGrayedButtons: Boolean;
FUndoBuffer, FRedoBuffer: TfrUndoBuffer;
FUndoBufferLength, FRedoBufferLength: Integer;
FirstTime: Boolean;
MaxItemWidth, MaxShortCutWidth: Integer;
fld: Array[0..63] of String;
EditAfterInsert: Boolean;
FCurDocName, FCaption: String;
ShapeMode: TfrShapeMode;
PagePosition: TAlign;
FPageType: TfrPageType;
MDown, ChangeUnits: Boolean;
UnlimitedHeight: Boolean;
procedure SetMenuBitmaps;
procedure SetCurPage(Value: Integer);
procedure SetGridSize(Value: Integer);
procedure SetGridShow(Value: Boolean);
procedure SetGridAlign(Value: Boolean);
procedure SetUnits(Value: TfrReportUnits);
procedure SetGrayedButtons(Value: Boolean);
procedure SetCurDocName(Value: String);
procedure SelectionChanged;
procedure ShowPosition;
procedure ShowContent;
procedure EnableControls;
procedure ResetSelection;
procedure DeleteObjects;
procedure AddPage;
procedure RemovePage(n: Integer);
procedure SetPageTitles;
procedure DefMemoEditor(Sender: TObject);
procedure DefPictureEditor(Sender: TObject);
procedure DefTagEditor(Sender: TObject);
procedure DefRestrEditor(Sender: TObject);
procedure DefHighlightEditor(Sender: TObject);
procedure DefFieldEditor(Sender: TObject);
procedure DefDataSourceEditor(Sender: TObject);
procedure DefCrossDataSourceEditor(Sender: TObject);
procedure DefGroupEditor(Sender: TObject);
procedure DefFontEditor(Sender: TObject);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -