📄 fr_desgn.pas
字号:
{*****************************************}
{ }
{ FastReport v2.3 }
{ Report Designer }
{ }
{ Copyright (c) 1998-99 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
{$IFDEF SYNTMEMO}
, FR_SntxE
{$ELSE}
, FR_Edit
{$ENDIF};
const
MaxUndoBuffer = 100;
crPencil = 11;
type
TfrDesignerForm = class;
TfrDesigner = class(TComponent) // fake component
private
FTemplDir: String;
public
procedure Loaded; override;
published
property TemplateDir: String read FTemplDir write FTemplDir;
end;
TfrSelectionType = (ssBand, ssMemo, ssOther, ssMultiple, ssClipboardFull);
TfrSelectionStatus = set of TfrSelectionType;
TfrReportUnits = (ruPixels, ruMM, ruInches);
TfrShapeMode = (smFrame, smAll);
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;
TfrDesignerDrawMode = (dmAll, dmSelection, dmShape);
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;
FDesigner: TfrDesignerForm;
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);
protected
procedure Paint; override;
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;
ImageList2: TImageList;
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: TComboBox;
C2: TComboBox;
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;
E1: TEdit;
Panel8: TPanel;
SB1: TfrSpeedButton;
SB2: TfrSpeedButton;
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;
wwwfastreportcom1: TMenuItem;
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 FormHide(Sender: TObject);
procedure N8Click(Sender: TObject);
procedure C2DrawItem(Control: TWinControl; Index: Integer; Rect: TRect;
State: TOwnerDrawState);
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 SB1Click(Sender: TObject);
procedure SB2Click(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 wwwfastreportcom1Click(Sender: TObject);
private
{ Private declarations }
PageView: TfrDesignerPage;
InspForm: TfrInspForm;
EditorForm: TfrEditorForm;
BPanel, RPanel: TPanel;
ColorSelector: TColorSelector;
MenuItems: TList;
ItemWidths: TStringList;
FCurPage: Integer;
FGridSize: Integer;
FGridShow, FGridAlign: Boolean;
FUnits: TfrReportUnits;
FGrayedButtons: Boolean;
FUndoBuffer, FRedoBuffer: TfrUndoBuffer;
FUndoBufferLength, FRedoBufferLength: Integer;
FirstTime: Boolean;
MaxItemWidth, MaxShortCutWidth: Integer;
fld: Array[0..6] of String[100];
FirstInstance: Boolean;
EditAfterInsert: Boolean;
FCurDocName, FCaption: String;
FileModified: Boolean;
ShapeMode: TfrShapeMode;
procedure GetFontList;
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 WMGetMinMaxInfo(var Msg: TWMGetMinMaxInfo); message WM_GETMINMAXINFO;
procedure FillInspFields;
function RectTypEnabled: Boolean;
function FontTypEnabled: Boolean;
function ZEnabled: Boolean;
function CutEnabled: Boolean;
function CopyEnabled: Boolean;
function PasteEnabled: Boolean;
function DelEnabled: Boolean;
function EditEnabled: Boolean;
procedure ColorSelected(Sender: TObject);
procedure MoveObjects(dx, dy: Integer; Resize: Boolean);
procedure SelectAll;
procedure Unselect;
procedure CutToClipboard;
procedure CopyToClipboard;
procedure SaveState;
procedure RestoreState;
procedure ClearBuffer(Buffer: TfrUndoBuffer; var BufferLength: Integer);
procedure ClearUndoBuffer;
procedure ClearRedoBuffer;
procedure Undo(Buffer: PfrUndoBuffer);
procedure ReleaseAction(ActionRec: TfrUndoRec);
procedure AddAction(Buffer: PfrUndoBuffer; a: TfrUndoAction; List: TList);
procedure AddUndoAction(a: TfrUndoAction);
procedure DoDrawText(Canvas: TCanvas; Caption: string;
Rect: TRect; Selected, Enabled: Boolean; Flags: Longint);
procedure MeasureItem(AMenuItem: TMenuItem; ACanvas: TCanvas;
var AWidth, AHeight: Integer);
procedure DrawItem(AMenuItem: TMenuItem; ACanvas: TCanvas;
ARect: TRect; Selected: Boolean);
procedure InsFieldsClick(Sender: TObject);
function FindMenuItem(AMenuItem: TMenuItem): TfrMenuItemInfo;
procedure SetMenuItemBitmap(AMenuItem: TMenuItem; ABtn:TfrSpeedButton);
procedure FillMenuItems(MenuItem: TMenuItem);
procedure DeleteMenuItems(MenuItem: TMenuItem);
procedure OnActivateApp(Sender: TObject);
procedure OnDeactivateApp(Sender: TObject);
procedure GetDefaultSize(var dx, dy: Integer);
function SelStatus: TfrSelectionStatus;
public
{ Public declarations }
procedure WndProc(var Message: TMessage); override;
procedure RegisterObject(ButtonBmp: TBitmap; const ButtonHint: String;
ButtonTag: Integer); override;
procedure RegisterTool(MenuCaption: String; ButtonBmp: TBitmap;
OnClick: TNotifyEvent); override;
procedure BeforeChange; override;
procedure AfterChange; override;
procedure ShowMemoEditor;
procedure ShowEditor;
procedure RedrawPage; override;
procedure OnModify(Item: Integer; var EditText: String);
function PointsToUnits(x: Integer): Double;
function UnitsToPoints(x: Double): Integer;
property CurDocName: String read FCurDocName write SetCurDocName;
property CurPage: Integer read FCurPage write SetCurPage;
property GridSize: Integer read FGridSize write SetGridSize;
property ShowGrid: Boolean read FGridShow write SetGridShow;
property GridAlign: Boolean read FGridAlign write SetGridAlign;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -