📄 frxclass.pas
字号:
{******************************************}
{ }
{ FastReport v4.0 }
{ Report classes }
{ }
{ Copyright (c) 1998-2008 }
{ by Alexander Tzyganenko, }
{ Fast Reports Inc. }
{ }
{******************************************}
unit frxClass;
interface
{$I frx.inc}
uses
SysUtils, Windows, Messages, Classes, Graphics, Controls, Forms, Dialogs,
IniFiles, ExtCtrls, Printers, frxVariables, frxXML, frxProgress,
fs_iinterpreter, frxUnicodeUtils
{$IFDEF Delphi6}
, Variants
{$ENDIF}
{$IFNDEF NO_CRITICAL_SECTION}
, SyncObjs
{$ENDIF}
{$IFDEF Delphi10}
, WideStrings
{$ENDIF}
;
const
fr01cm: Extended = 3.77953;
fr1cm: Extended = 37.7953;
fr01in: Extended = 9.6;
fr1in: Integer = 96;
fr1CharX: Extended = 9.6;
fr1CharY: Integer = 17;
clTransparent: TColor = clNone;
crHand: Integer = 150;
crZoom: Integer = 151;
crFormat: Integer = 152;
DEF_REG_CONNECTIONS: String = '\Software\Fast Reports\Connections';
WM_CREATEHANDLE = WM_USER + 1;
WM_DESTROYHANDLE = WM_USER + 2;
type
TfrxReport = class;
TfrxPage = class;
TfrxReportPage = class;
TfrxDialogPage = class;
TfrxCustomEngine = class;
TfrxCustomDesigner = class;
TfrxCustomPreview = class;
TfrxCustomPreviewPages = class;
TfrxComponent = class;
TfrxReportComponent = class;
TfrxView = class;
TfrxStyleItem = class;
TfrxCustomExportFilter = class;
TfrxCustomCompressor = class;
TfrxCustomDatabase = class;
TfrxFrame = class;
TfrxDataSet = class;
TfrxNotifyEvent = type String;
TfrxCloseQueryEvent = type String;
TfrxKeyEvent = type String;
TfrxKeyPressEvent = type String;
TfrxMouseEvent = type String;
TfrxMouseMoveEvent = type String;
TfrxPreviewClickEvent = type String;
TfrxRunDialogsEvent = type String;
SYSINT = Integer;
TfrxComponentStyle = set of (csContainer, csPreviewVisible, csDefaultDiff);
TfrxStretchMode = (smDontStretch, smActualHeight, smMaxHeight);
TfrxShiftMode = (smDontShift, smAlways, smWhenOverlapped);
TfrxDuplexMode = (dmNone, dmVertical, dmHorizontal, dmSimplex);
TfrxAlign = (baNone, baLeft, baRight, baCenter, baWidth, baBottom, baClient);
TfrxFrameStyle = (fsSolid, fsDash, fsDot, fsDashDot, fsDashDotDot, fsDouble, fsAltDot, fsSquare);
TfrxFrameType = (ftLeft, ftRight, ftTop, ftBottom);
TfrxFrameTypes = set of TfrxFrameType;
TfrxFormatKind = (fkText, fkNumeric, fkDateTime, fkBoolean);
TfrxHAlign = (haLeft, haRight, haCenter, haBlock);
TfrxVAlign = (vaTop, vaBottom, vaCenter);
TfrxSilentMode = (simMessageBoxes, simSilent, simReThrow);
TfrxRestriction = (rfDontModify, rfDontSize, rfDontMove, rfDontDelete, rfDontEdit);
TfrxRestrictions = set of TfrxRestriction;
TfrxShapeKind = (skRectangle, skRoundRectangle, skEllipse, skTriangle,
skDiamond, skDiagonal1, skDiagonal2);
TfrxPreviewButton = (pbPrint, pbLoad, pbSave, pbExport, pbZoom, pbFind,
pbOutline, pbPageSetup, pbTools, pbEdit, pbNavigator, pbExportQuick,
pbNoClose, pbNoFullScreen, pbNoEmail);
TfrxPreviewButtons = set of TfrxPreviewButton;
TfrxZoomMode = (zmDefault, zmWholePage, zmPageWidth, zmManyPages);
TfrxPrintPages = (ppAll, ppOdd, ppEven);
TfrxAddPageAction = (apWriteOver, apAdd);
TfrxRangeBegin = (rbFirst, rbCurrent);
TfrxRangeEnd = (reLast, reCurrent, reCount);
TfrxFieldType = (fftNumeric, fftString, fftBoolean);
TfrxProgressType = (ptRunning, ptExporting, ptPrinting);
TfrxPrintMode = (pmDefault, pmSplit, pmJoin, pmScale);
TfrxInheriteMode = (imDefault, imDelete, imRename);
TfrxRect = packed record
Left, Top, Right, Bottom: Extended;
end;
TfrxPoint = packed record
X, Y: Extended;
end;
TfrxProgressEvent = procedure(Sender: TfrxReport;
ProgressType: TfrxProgressType; Progress: Integer) of object;
TfrxBeforePrintEvent = procedure(Sender: TfrxReportComponent) of object;
TfrxGetValueEvent = procedure(const VarName: String; var Value: Variant) of object;
TfrxNewGetValueEvent = procedure(Sender: TObject; const VarName: String; var Value: Variant) of object;
TfrxUserFunctionEvent = function(const MethodName: String;
var Params: Variant): Variant of object;
TfrxManualBuildEvent = procedure(Page: TfrxPage) of object;
TfrxClickObjectEvent = procedure(Sender: TfrxView;
Button: TMouseButton; Shift: TShiftState; var Modified: Boolean) of object;
TfrxMouseOverObjectEvent = procedure(Sender: TfrxView) of object;
TfrxCheckEOFEvent = procedure(Sender: TObject; var Eof: Boolean) of object;
TfrxRunDialogEvent = procedure(Page: TfrxDialogPage) of object;
TfrxEditConnectionEvent = function(const ConnString: String): String of object;
TfrxSetConnectionEvent = procedure(const ConnString: String) of object;
TfrxBeforeConnectEvent = procedure(Sender: TfrxCustomDatabase; var Connected: Boolean) of object;
TfrxPrintPageEvent = procedure(Page: TfrxReportPage; CopyNo: Integer) of object;
TfrxLoadTemplateEvent = procedure(Report: TfrxReport; const TemplateName: String) of object;
{ Root classes }
TfrxComponent = class(TComponent)
private
FFont: TFont;
FObjects: TList;
FAllObjects: TList;
FParent: TfrxComponent;
FLeft: Extended;
FTop: Extended;
FWidth: Extended;
FHeight: Extended;
FParentFont: Boolean;
FGroupIndex: Integer;
FIsDesigning: Boolean;
FIsLoading: Boolean;
FIsPrinting: Boolean;
FIsWriting: Boolean;
FRestrictions: TfrxRestrictions;
FVisible: Boolean;
FDescription: String;
FAncestor: Boolean;
FComponentStyle: TfrxComponentStyle;
function GetAbsTop: Extended;
function GetPage: TfrxPage;
function GetReport: TfrxReport;
function IsFontStored: Boolean;
function GetAllObjects: TList;
function GetAbsLeft: Extended;
function GetIsLoading: Boolean;
function GetIsAncestor: Boolean;
protected
FAliasName: String;
FBaseName: String;
FOriginalComponent: TfrxComponent;
FOriginalRect: TfrxRect;
FOriginalBand: TfrxComponent;
procedure SetParent(AParent: TfrxComponent); virtual;
procedure SetLeft(Value: Extended); virtual;
procedure SetTop(Value: Extended); virtual;
procedure SetWidth(Value: Extended); virtual;
procedure SetHeight(Value: Extended); virtual;
procedure SetName(const AName: TComponentName); override;
procedure SetFont(Value: TFont); virtual;
procedure SetParentFont(const Value: Boolean); virtual;
procedure SetVisible(Value: Boolean); virtual;
procedure FontChanged(Sender: TObject); virtual;
function DiffFont(f1, f2: TFont; const Add: String): String;
function InternalDiff(AComponent: TfrxComponent): String;
function GetContainerObjects: TList; virtual;
procedure GetChildren(Proc: TGetChildProc; Root: TComponent); override;
function GetChildOwner: TComponent; override;
public
constructor Create(AOwner: TComponent); override;
constructor DesignCreate(AOwner: TComponent; Flags: Word); virtual;
destructor Destroy; override;
class function GetDescription: String; virtual;
procedure AlignChildren; virtual;
procedure Assign(Source: TPersistent); override;
procedure AssignAll(Source: TfrxComponent; Streaming: Boolean = False);
procedure BeforeStartReport; virtual;
procedure Clear; virtual;
procedure CreateUniqueName;
procedure LoadFromStream(Stream: TStream); virtual;
procedure SaveToStream(Stream: TStream; SaveChildren: Boolean = True;
SaveDefaultValues: Boolean = False; Streaming: Boolean = False); virtual;
procedure SetBounds(ALeft, ATop, AWidth, AHeight: Extended);
procedure OnNotify(Sender: TObject); virtual;
procedure OnPaste; virtual;
function AllDiff(AComponent: TfrxComponent): String;
function Diff(AComponent: TfrxComponent): String; virtual;
function FindObject(const AName: String): TfrxComponent;
function ContainerAdd(Obj: TfrxComponent): Boolean; virtual;
function ContainerMouseDown(Sender: TObject; X, Y: Integer): Boolean; virtual;
procedure ContainerMouseMove(Sender: TObject; X, Y: Integer); virtual;
procedure ContainerMouseUp(Sender: TObject; X, Y: Integer); virtual;
function FindDataSet(DataSet: TfrxDataSet; const DSName: String): TfrxDataSet;
property Objects: TList read FObjects;
property AllObjects: TList read GetAllObjects;
property ContainerObjects: TList read GetContainerObjects;
property Parent: TfrxComponent read FParent write SetParent;
property Page: TfrxPage read GetPage;
property Report: TfrxReport read GetReport;
property IsAncestor: Boolean read GetIsAncestor;
property IsDesigning: Boolean read FIsDesigning write FIsDesigning;
property IsLoading: Boolean read GetIsLoading write FIsLoading;
property IsPrinting: Boolean read FIsPrinting write FIsPrinting;
property IsWriting: Boolean read FIsWriting write FIsWriting;
property BaseName: String read FBaseName;
property GroupIndex: Integer read FGroupIndex write FGroupIndex default 0;
property frComponentStyle: TfrxComponentStyle read FComponentStyle write FComponentStyle;
property Left: Extended read FLeft write SetLeft;
property Top: Extended read FTop write SetTop;
property Width: Extended read FWidth write SetWidth;
property Height: Extended read FHeight write SetHeight;
property AbsLeft: Extended read GetAbsLeft;
property AbsTop: Extended read GetAbsTop;
property Description: String read FDescription write FDescription;
property ParentFont: Boolean read FParentFont write SetParentFont default True;
property Restrictions: TfrxRestrictions read FRestrictions write FRestrictions default [];
property Visible: Boolean read FVisible write SetVisible default True;
property Font: TFont read FFont write SetFont stored IsFontStored;
end;
TfrxReportComponent = class(TfrxComponent)
private
FOnAfterData: TfrxNotifyEvent;
FOnAfterPrint: TfrxNotifyEvent;
FOnBeforePrint: TfrxNotifyEvent;
FOnPreviewClick: TfrxPreviewClickEvent;
FOnPreviewDblClick: TfrxPreviewClickEvent;
public
FShiftAmount: Extended;
FShiftChildren: TList;
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure Draw(Canvas: TCanvas; ScaleX, ScaleY, OffsetX, OffsetY: Extended);
virtual; abstract;
procedure BeforePrint; virtual;
procedure GetData; virtual;
procedure AfterPrint; virtual;
function GetComponentText: String; virtual;
function GetRealBounds: TfrxRect; virtual;
property OnAfterData: TfrxNotifyEvent read FOnAfterData write FOnAfterData;
property OnAfterPrint: TfrxNotifyEvent read FOnAfterPrint write FOnAfterPrint;
property OnBeforePrint: TfrxNotifyEvent read FOnBeforePrint write FOnBeforePrint;
property OnPreviewClick: TfrxPreviewClickEvent read FOnPreviewClick write FOnPreviewClick;
property OnPreviewDblClick: TfrxPreviewClickEvent read FOnPreviewDblClick write FOnPreviewDblClick;
published
property Description;
end;
TfrxDialogComponent = class(TfrxReportComponent)
private
FComponent: TComponent;
procedure ReadLeft(Reader: TReader);
procedure ReadTop(Reader: TReader);
procedure WriteLeft(Writer: TWriter);
procedure WriteTop(Writer: TWriter);
protected
FImageIndex: Integer;
procedure DefineProperties(Filer: TFiler); override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure Draw(Canvas: TCanvas; ScaleX, ScaleY, OffsetX, OffsetY: Extended); override;
property Component: TComponent read FComponent write FComponent;
end;
TfrxDialogControl = class(TfrxReportComponent)
private
FControl: TControl;
FOnClick: TfrxNotifyEvent;
FOnDblClick: TfrxNotifyEvent;
FOnEnter: TfrxNotifyEvent;
FOnExit: TfrxNotifyEvent;
FOnKeyDown: TfrxKeyEvent;
FOnKeyPress: TfrxKeyPressEvent;
FOnKeyUp: TfrxKeyEvent;
FOnMouseDown: TfrxMouseEvent;
FOnMouseMove: TfrxMouseMoveEvent;
FOnMouseUp: TfrxMouseEvent;
FOnActivate: TNotifyEvent;
function GetColor: TColor;
function GetEnabled: Boolean;
procedure DoOnClick(Sender: TObject);
procedure DoOnDblClick(Sender: TObject);
procedure DoOnEnter(Sender: TObject);
procedure DoOnExit(Sender: TObject);
procedure DoOnKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure DoOnKeyPress(Sender: TObject; var Key: Char);
procedure DoOnKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure DoOnMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure DoOnMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
procedure DoOnMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure SetColor(const Value: TColor);
procedure SetEnabled(const Value: Boolean);
function GetCaption: String;
procedure SetCaption(const Value: String);
function GetHint: String;
procedure SetHint(const Value: String);
function GetShowHint: Boolean;
procedure SetShowHint(const Value: Boolean);
function GetTabStop: Boolean;
procedure SetTabStop(const Value: Boolean);
protected
FRunAlways: Boolean;
procedure SetLeft(Value: Extended); override;
procedure SetTop(Value: Extended); override;
procedure SetWidth(Value: Extended); override;
procedure SetHeight(Value: Extended); override;
procedure SetParentFont(const Value: Boolean); override;
procedure SetVisible(Value: Boolean); override;
procedure SetParent(AParent: TfrxComponent); override;
procedure FontChanged(Sender: TObject); override;
procedure InitControl(AControl: TControl);
procedure SetName(const AName: TComponentName); override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -