📄 frxclassrtti.pas
字号:
{******************************************}
{ }
{ FastReport v4.0 }
{ Publish all classes defined in }
{ frxClass }
{ }
{ Copyright (c) 1998-2008 }
{ by Alexander Tzyganenko, }
{ Fast Reports Inc. }
{ }
{******************************************}
unit frxClassRTTI;
interface
{$I frx.inc}
implementation
uses
SysUtils, Classes, Controls, fs_iinterpreter, frxClass, frxCtrls,
frxPreviewPages, frxEngine, frxDMPClass, frxVariables, fs_iformsrtti,
frxUnicodeUtils
{$IFDEF JPEG}
, jpeg
{$ENDIF}
{$IFDEF Delphi10}
, WideStrings
{$ENDIF}
{$IFDEF PNG}
, frxpngimage
{$ENDIF}
{$IFDEF Delphi6}
, Variants
{$ENDIF};
type
TFunctions = class(TfsRTTIModule)
private
function CallMethod(Instance: TObject; ClassType: TClass;
const MethodName: String; Caller: TfsMethodHelper): Variant;
function GetProp(Instance: TObject; ClassType: TClass;
const PropName: String): Variant;
procedure SetProp(Instance: TObject; ClassType: TClass;
const PropName: String; Value: Variant);
public
constructor Create(AScript: TfsScript); override;
end;
{ TFunctions }
constructor TFunctions.Create(AScript: TfsScript);
begin
inherited Create(AScript);
with AScript do
begin
AddConst('fr01cm', 'Extended', fr01cm);
AddConst('fr1cm', 'Extended', fr1cm);
AddConst('fr01in', 'Extended', fr01in);
AddConst('fr1in', 'Extended', fr1in);
AddConst('fr1CharX', 'Extended', fr1CharX);
AddConst('fr1CharY', 'Extended', fr1CharY);
AddConst('clTransparent', 'Integer', clTransparent);
AddConst('crHand', 'Integer', crHand);
AddConst('crZoom', 'Integer', crZoom);
AddConst('crFormat', 'Integer', crFormat);
AddEnum('TfrxStretchMode', 'smDontStretch, smActualHeight, smMaxHeight');
AddEnum('TfrxShiftMode', 'smDontShift, smAlways, smWhenOverlapped');
AddEnum('TfrxDuplexMode', 'dmNone, dmVertical, dmHorizontal, dmSimplex');
AddEnum('TfrxAlign', 'baNone, baLeft, baRight, baCenter, baWidth, baBottom');
AddEnum('TfrxFrameStyle', 'fsSolid, fsDash, fsDot, fsDashDot, fsDashDotDot, fsDouble');
AddEnumSet('TfrxFrameTypes', 'ftLeft, ftRight, ftTop, ftBottom');
AddEnum('TfrxHAlign', 'haLeft, haRight, haCenter, haBlock');
AddEnum('TfrxVAlign', 'vaTop, vaBottom, vaCenter');
AddEnumSet('TfrxRestrictions', 'rfDontModify, rfDontSize, rfDontMove, rfDontDelete');
AddEnum('TfrxShapeKind', 'skRectangle, skRoundRectangle, skEllipse, skTriangle, skDiamond, skDiagonal1, skDiagonal2');
AddEnumSet('TfrxPreviewButtons', 'pbPrint, pbLoad, pbSave, pbExport, ' +
'pbZoom, pbFind, pbTree, pbPageSetup, pbRefresh, pbTools, pbEdit, pbNavigator, pbExportQuick');
AddEnum('TfrxZoomMode', 'zmDefault, zmWholePage, zmPageWidth, zmManyPages');
AddEnum('TfrxPrintPages', 'ppAll, ppOdd, ppEven');
AddEnumSet('TfrxDMPFontStyles', 'fsxBold, fsxItalic, fsxUnderline, fsxSuperScript, ' +
'fsxSubScript, fsxCondensed, fsxWide, fsx12cpi, fsx15cpi');
AddEnum('TfrxRangeBegin', 'rbFirst, rbCurrent');
AddEnum('TfrxRangeEnd', 'reLast, reCurrent, reCount');
AddEnum('TfrxFieldType', 'fftNumeric, fftString, fftBoolean');
AddEnum('TfrxFormatKind', 'fkText, fkNumeric, fkDateTime, fkBoolean');
{$IFDEF JPEG}
AddClass(TJPEGImage, 'TGraphic');
{$ENDIF}
{$IFDEF PNG}
AddClass(TPngObject, 'TGraphic');
{$ENDIF}
if FindClass('TPersistent') <> nil then
with AddClass(TWideStrings, 'TPersistent') do
begin
AddConstructor('constructor Create', CallMethod);
AddMethod('function Add(const S: string): Integer', CallMethod);
AddMethod('function AddObject(const S: string; AObject: TObject): Integer', CallMethod);
AddMethod('procedure Clear', CallMethod);
AddMethod('procedure Delete(Index: Integer)', CallMethod);
AddMethod('function IndexOf(const S: string): Integer', CallMethod);
AddMethod('procedure Insert(Index: Integer; const S: string)', CallMethod);
AddMethod('procedure LoadFromFile(const FileName: string)', CallMethod);
AddMethod('procedure LoadFromStream(Stream: TStream)', CallMethod);
AddMethod('procedure SaveToFile(const FileName: string)', CallMethod);
AddMethod('procedure SaveToStream(Stream: TStream)', CallMethod);
AddProperty('Count', 'Integer', GetProp, nil);
AddIndexProperty('Objects', 'Integer', 'TObject', CallMethod);
AddDefaultProperty('Strings', 'Integer', 'string', CallMethod);
AddProperty('Text', 'string', GetProp, SetProp);
end;
with AddClass(TfrxDataSet, 'TComponent') do
begin
AddMethod('procedure Open', CallMethod);
AddMethod('procedure Close', CallMethod);
AddMethod('procedure First', CallMethod);
AddMethod('procedure Next', CallMethod);
AddMethod('procedure Prior', CallMethod);
AddMethod('function Eof: Boolean', CallMethod);
AddMethod('function FieldsCount: Integer', CallMethod);
AddMethod('function HasField(const fName: String): Boolean', CallMethod);
AddMethod('function IsBlobField(const fName: String): Boolean', CallMethod);
AddMethod('function RecordCount: Integer', CallMethod);
AddMethod('procedure GetFieldList(List: TStrings)', CallMethod);
AddProperty('RecNo', 'Integer', GetProp, nil);
AddIndexProperty('DisplayText', 'String', 'String', CallMethod, True);
AddIndexProperty('DisplayWidth', 'String', 'Integer', CallMethod, True);
AddIndexProperty('FieldType', 'String', 'TfrxFieldType', CallMethod, True);
AddIndexProperty('Value', 'String', 'Variant', CallMethod, True);
end;
AddClass(TfrxUserDataSet, 'TfrxDataSet');
AddClass(TfrxCustomDBDataSet, 'TfrxDataSet');
with AddClass(TfrxComponent, 'TComponent') do
begin
AddMethod('procedure Clear', CallMethod);
AddMethod('function FindObject(s: String): TfrxComponent', CallMethod);
AddMethod('procedure LoadFromStream(Stream: TStream)', CallMethod);
AddMethod('procedure SaveToStream(Stream: TStream; SaveChildren: Boolean = True)', CallMethod);
AddMethod('procedure SetBounds(ALeft, ATop, AWidth, AHeight: Extended)', CallMethod);
AddProperty('Objects', 'TList', GetProp, nil);
AddProperty('AllObjects', 'TList', GetProp, nil);
AddProperty('Parent', 'TfrxComponent', GetProp, SetProp);
AddProperty('Page', 'TfrxPage', GetProp, nil);
AddProperty('AbsLeft', 'Extended', GetProp, nil);
AddProperty('AbsTop', 'Extended', GetProp, nil);
end;
AddClass(TfrxReportComponent, 'TfrxComponent');
AddClass(TfrxDialogComponent, 'TfrxReportComponent');
with AddClass(TfrxDialogControl, 'TfrxReportComponent') do
AddMethod('procedure SetFocus', CallMethod);
AddClass(TfrxFrameLine, 'TPersistent');
AddClass(TfrxFrame, 'TPersistent');
with AddClass(TfrxView, 'TfrxReportComponent') do
AddProperty('TagStr', 'String', GetProp, SetProp);
AddClass(TfrxShapeView, 'TfrxView');
with AddClass(TfrxStretcheable, 'TfrxView') do
AddMethod('function CalcHeight: Extended', CallMethod);
AddClass(TfrxHighlight, 'TPersistent');
AddClass(TfrxFormat, 'TPersistent');
with AddClass(TfrxCustomMemoView, 'TfrxStretcheable') do
begin
AddMethod('function CalcWidth: Extended', CallMethod);
AddProperty('Text', 'String', GetProp, SetProp);
AddProperty('AnsiText', 'String', GetProp, SetProp);
AddProperty('Lines', 'TWideStrings', GetProp, SetProp);
AddProperty('Value', 'Variant', GetProp, nil);
end;
AddClass(TfrxMemoView, 'TfrxCustomMemoView');
AddClass(TfrxSysMemoView, 'TfrxCustomMemoView');
AddClass(TfrxDMPMemoView, 'TfrxCustomMemoView');
AddClass(TfrxCustomLineView, 'TfrxStretcheable');
AddClass(TfrxLineView, 'TfrxCustomLineView');
AddClass(TfrxDMPLineView, 'TfrxCustomLineView');
AddClass(TfrxDMPCommand, 'TfrxView');
with AddClass(TfrxPictureView, 'TfrxView') do
AddMethod('procedure LoadFromFile(filename: String)', CallMethod);
AddClass(TfrxSubreport, 'TfrxView');
with AddClass(TfrxBand, 'TfrxReportComponent') do
AddProperty('Overflow', 'Boolean', GetProp, nil);
AddClass(TfrxDataBand, 'TfrxBand');
AddClass(TfrxHeader, 'TfrxBand');
AddClass(TfrxFooter, 'TfrxBand');
AddClass(TfrxMasterData, 'TfrxDataBand');
AddClass(TfrxDetailData, 'TfrxDataBand');
AddClass(TfrxSubDetailData, 'TfrxDataBand');
AddClass(TfrxDataBand4, 'TfrxDataBand');
AddClass(TfrxDataBand5, 'TfrxDataBand');
AddClass(TfrxDataBand6, 'TfrxDataBand');
AddClass(TfrxPageHeader, 'TfrxBand');
AddClass(TfrxPageFooter, 'TfrxBand');
AddClass(TfrxColumnHeader, 'TfrxBand');
AddClass(TfrxColumnFooter, 'TfrxBand');
AddClass(TfrxGroupHeader, 'TfrxBand');
AddClass(TfrxGroupFooter, 'TfrxBand');
AddClass(TfrxReportTitle, 'TfrxBand');
AddClass(TfrxReportSummary, 'TfrxBand');
AddClass(TfrxChild, 'TfrxBand');
AddClass(TfrxOverlay, 'TfrxBand');
AddClass(TfrxPage, 'TfrxComponent');
AddClass(TfrxReportPage, 'TfrxPage');
with AddClass(TfrxDialogPage, 'TfrxPage') do
begin
AddMethod('function ShowModal: Integer', CallMethod);
AddProperty('ModalResult', 'Integer', GetProp, SetProp);
end;
AddClass(TfrxDMPPage, 'TfrxReportPage');
AddClass(TfrxDataPage, 'TfrxPage');
with AddClass(TfrxEngineOptions, 'TPersistent') do
begin
AddProperty('DestroyForms', 'Boolean', GetProp, SetProp);
end;
AddClass(TfrxPrintOptions, 'TPersistent');
AddClass(TfrxPreviewOptions, 'TPersistent');
AddClass(TfrxReportOptions, 'TPersistent');
AddClass(TfrxVariable, 'TCollectionItem');
with AddClass(TfrxVariables, 'TCollection') do
begin
AddConstructor('constructor Create', CallMethod);
AddDefaultProperty('Variables', 'String', 'Variant', CallMethod);
end;
AddClass(TfrxStyleItem,'TCollectionItem');
with AddClass(TfrxStyles, 'TCollection') do
begin
AddConstructor('constructor Create(AReport: TfrxReport)', CallMethod);
AddDefaultProperty('Items', 'Integer', 'TfrxStyleItem', CallMethod);
AddMethod('function Add: TfrxStyleItem', CallMethod);
AddMethod('function Find(const Name: String): TfrxStyleItem', CallMethod);
AddMethod('procedure Apply', CallMethod);
AddMethod('procedure GetList(List: TStrings)', CallMethod);
AddMethod('procedure LoadFromFile(const FileName: String)', CallMethod);
AddMethod('procedure LoadFromStream(Stream: TStream)', CallMethod);
AddMethod('procedure SaveToFile(const FileName: String)', CallMethod);
AddMethod('procedure SaveToStream(Stream: TStream)', CallMethod);
end;
with AddClass(TfrxArray, 'TCollection') do
begin
AddConstructor('constructor Create', CallMethod);
AddDefaultProperty('Variables', 'Variant', 'Variant', CallMethod);
end;
AddObject('frxGlobalVariables', frxGlobalVariables);
with AddClass(TfrxReport, 'TfrxComponent') do
begin
AddMethod('function Calc(const Expr: String): Variant', CallMethod);
AddMethod('function GetDataset(const Alias: String): TfrxDataset', CallMethod);
AddMethod('function LoadFromFile(const FileName: String): Boolean', CallMethod);
AddMethod('procedure SaveToFile(const FileName: String)', CallMethod);
AddMethod('procedure ShowReport', CallMethod);
AddProperty('Terminated', 'Boolean', GetProp, SetProp);
AddProperty('Variables', 'TfrxVariables', GetProp, nil);
AddProperty('Styles', 'TfrxStyles', GetProp, nil);
end;
with AddClass(TfrxCustomEngine, 'TPersistent') do
begin
AddMethod('procedure AddAnchor(const Text: String)', CallMethod);
AddMethod('procedure NewPage', CallMethod);
AddMethod('procedure NewColumn', CallMethod);
AddMethod('procedure ShowBand(Band: TfrxBand)', CallMethod);
AddMethod('procedure StopReport', CallMethod);
AddMethod('function FreeSpace: Extended', CallMethod);
AddMethod('function GetAnchorPage(const Text: String): Integer', CallMethod);
end;
AddClass(TfrxEngine, 'TfrxCustomEngine');
with AddClass(TfrxCustomOutline, 'TPersistent') do
begin
AddMethod('procedure AddItem(const Text: String)', CallMethod);
AddMethod('procedure LevelRoot', CallMethod);
AddMethod('procedure LevelUp', CallMethod);
end;
AddClass(TfrxOutline, 'TfrxCustomOutline');
AddMethod('function DayOf(Date: TDateTime): Integer', CallMethod, 'ctDate');
AddMethod('function MonthOf(Date: TDateTime): Integer', CallMethod, 'ctDate');
AddMethod('function YearOf(Date: TDateTime): Integer', CallMethod, 'ctDate');
{ note: these functions don't have implementation here. They are implemented
in the frxClass.pas unit }
AddMethod('function IIF(Expr: Boolean; TrueValue, FalseValue: Variant): Variant',
CallMethod, 'ctOther');
AddMethod('function SUM(Expr: Variant; Band: Variant = 0; Flags: Integer = 0): Variant',
CallMethod, 'ctAggregate');
AddMethod('function AVG(Expr: Variant; Band: Variant = 0; Flags: Integer = 0): Variant',
CallMethod, 'ctAggregate');
AddMethod('function MIN(Expr: Variant; Band: Variant = 0; Flags: Integer = 0): Variant',
CallMethod, 'ctAggregate');
AddMethod('function MAX(Expr: Variant; Band: Variant = 0; Flags: Integer = 0): Variant',
CallMethod, 'ctAggregate');
AddMethod('function COUNT(Band: Variant = 0; Flags: Integer = 0): Variant',
CallMethod, 'ctAggregate');
end;
end;
function TFunctions.CallMethod(Instance: TObject; ClassType: TClass;
const MethodName: String; Caller: TfsMethodHelper): Variant;
var
_TfrxDataSet: TfrxDataSet;
_TStrings: TWideStrings;
begin
Result := 0;
if ClassType = TWideStrings then
begin
_TStrings := TWideStrings(Instance);
if MethodName = 'CREATE' then
{$IFDEF Delphi10}
Result := Integer(TWideStringList.Create)
{$ELSE}
Result := Integer(TWideStrings.Create)
{$ENDIF}
else if MethodName = 'ADD' then
Result := _TStrings.Add(Caller.Params[0])
else if MethodName = 'ADDOBJECT' then
Result := _TStrings.AddObject(Caller.Params[0], TObject(Integer(Caller.Params[1])))
else if MethodName = 'CLEAR' then
_TStrings.Clear
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -