⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fr_class.pas

📁 不错的报表工具
💻 PAS
📖 第 1 页 / 共 5 页
字号:
{******************************************}{                                          }{             FastReport v2.5              }{             Report classes               }{                                          }{Copyright(c) 1998-2003 by FastReports Inc.}{                                          }{******************************************}unit FR_Class;interface{$I FR.inc}uses  SysUtils, Windows, Messages, Classes, Graphics, Printers, Controls,  Forms, StdCtrls, ComCtrls, Dialogs, Menus, Buttons,  FR_Progr, FR_View, FR_Pars, FR_Intrp, FR_DSet, FR_DBSet, FR_DBRel{$IFDEF IBO}, IB_Components, IB_Header{$ELSE}, DB{$ENDIF}{$IFDEF Delphi6}, Variants{$ENDIF};const// object flags  flStretched = 1;  flWordWrap = 2;  flWordBreak = 4;  flAutoSize = 8;  flTextOnly = $10;  flSuppressRepeated = $20;  flHideZeros = $40;  flUnderlines = $80;  flRTLReading = $100;  flBandNewPageAfter = 2;  flBandPrintifSubsetEmpty = 4;  flBandBreaked = 8;  flBandOnFirstPage = $10;  flBandOnLastPage = $20;  flBandRepeatHeader = $40;  flBandPrintChildIfInvisible = $80;  flPictCenter = 2;  flPictRatio = 4;  flWantHook = $8000;  flDontUndo = $4000;  flOnePerPage = $2000;// object types  gtMemo = 0;  gtPicture = 1;  gtBand = 2;  gtSubReport = 3;  gtLine = 4;  gtCross = 5;  gtAddIn = 10;// frame types  frftNone = 0;  frftRight = 1;  frftBottom = 2;  frftLeft = 4;  frftTop = 8;// text align  frtaLeft = 0;  frtaRight = 1;  frtaCenter = 2;  frtaVertical = 4;  frtaMiddle = 8;  frtaDown = 16;// band align  baNone = 0;  baLeft = 1;  baRight = 2;  baCenter = 3;  baWidth = 4;  baBottom = 5;  baTop = 6;  baRest = 7; // restriction flags  frrfDontEditMemo = 1;  frrfDontEditScript = 2;  frrfDontEditContents = 4;  frrfDontModify = 8;  frrfDontSize = 16;  frrfDontMove = 32;  frrfDontDelete = 64;   psDouble = 5;   frtName = 77;type  TfrDocMode = (dmDesigning, dmPrinting);  TfrDrawMode = (drAll, drAfterCalcHeight, drPart);  TfrBandType = (btReportTitle, btReportSummary,                 btPageHeader, btPageFooter,                 btMasterHeader, btMasterData, btMasterFooter,                 btDetailHeader, btDetailData, btDetailFooter,                 btSubDetailHeader, btSubDetailData, btSubDetailFooter,                 btOverlay, btColumnHeader, btColumnFooter,                 btGroupHeader, btGroupFooter,                 btCrossHeader, btCrossData, btCrossFooter,                 btChild, btNone);  TfrPageType = (ptReport, ptDialog);  TfrDataSetPosition = (psLocal, psGlobal);  TfrPageMode = (pmNormal, pmBuildList);  TfrBandRecType = (rtShowBand, rtFirst, rtNext);  TfrRgnType = (rtNormal, rtExtended);  TfrReportType = (rtSimple, rtMultiple);  TfrDataType = (frdtString, frdtInteger, frdtFloat, frdtBoolean,                 frdtColor, frdtEnum, frdtHasEditor, frdtSize,                 frdtOneObject);  TfrDataTypes = set of TfrDataType;  TfrPrintPages = (frAll, frOdd, frEven);  TfrView = class;  TfrBand = class;  TfrPage = class;  TfrReport = class;  TfrExportFilter = class;   TDetailEvent = procedure(const ParName: string; var ParValue: Variant) of object;  TEnterRectEvent = procedure(Memo: TStringList; View: TfrView) of object;  TBeginDocEvent = procedure of object;  TEndDocEvent = procedure of object;  TBeginPageEvent = procedure(pgNo: Integer) of object;  TEndPageEvent = procedure(pgNo: Integer) of object;  TBeginBandEvent = procedure(Band: TfrBand) of object;  TEndBandEvent = procedure(Band: TfrBand) of object;  TProgressEvent = procedure(n: Integer) of object;  TBeginColumnEvent = procedure(Band: TfrBand) of object;  TPrintColumnEvent = procedure(ColNo: Integer; var Width: Integer) of object;  TManualBuildEvent = procedure(Page: TfrPage) of object;  TObjectClickEvent = procedure(View: TfrView) of object;  TMouseOverObjectEvent = procedure(View: TfrView; var Cursor: TCursor) of object;  TBeforeExportEvent = procedure(var FileName: String; var bContinue: Boolean) of object;  TAfterExportEvent = procedure(const FileName: String) of object;  TPrintReportEvent = procedure of object;  TLocalizeEvent = procedure(StringID: Integer; var ResultString: String) of object;   TfrHighlightAttr = packed record    FontStyle: Word;    FontColor, FillColor: TColor;  end;  TfrPrnInfo = record // print info about page size, margins e.t.c    PPgw, PPgh, Pgw, Pgh: Integer; // page width/height (printer/screen)    POfx, POfy, Ofx, Ofy: Integer; // offset x/y    PPw, PPh, Pw, Ph: Integer;     // printable width/height  end;  PfrPageInfo = ^TfrPageInfo;  TfrPageInfo = packed record // pages of a preview    R: TRect;    pgSize: Word;    pgWidth, pgHeight: Integer;    pgOr: TPrinterOrientation;    pgBin: Integer;    UseMargins: Boolean;    pgMargins: TRect;    PrnInfo: TfrPrnInfo;    Visible: Boolean;    Stream: TMemoryStream;    Page: TfrPage;  end;   PfrBandRec = ^TfrBandRec;  TfrBandRec = packed record    Band: TfrBand;    Action: TfrBandRecType;  end;  PfrPropRec = ^TfrPropRec;  TfrPropRec = record    PropName: String[32];    PropType: TfrDataTypes;    Enum: TStringList;    EnumValues: Variant;    PropEditor: TNotifyEvent;  end;  TfrObject = class(TObject)  protected    PropList: TList;    procedure ClearPropList;    procedure AddProperty(PropName: string; PropType: TfrDataTypes;      PropEditor: TNotifyEvent);    procedure AddEnumProperty(PropName: string; Enum: String;      const EnumValues: array of Variant);    procedure DelProperty(PropName: String);    procedure SetPropValue(Index: String; Value: Variant); virtual;    function GetPropValue(Index: String): Variant; virtual;    function GetPropRec(Index: String): PfrPropRec;    function DoMethod(MethodName: string; Par1, Par2, Par3: Variant): Variant; virtual;// helper methods    procedure SetFontProp(Font: TFont; Prop: String; Value: Variant);    function GetFontProp(Font: TFont; Prop: string): Variant;    function LinesMethod(Lines: TStrings; MethodName, LinesName: String;      Par1, Par2, Par3: Variant): Variant;  public    constructor Create;    destructor Destroy; override;    procedure DefineProperties; virtual;    property Prop[Index: String]: Variant read GetPropValue write SetPropValue;    property PropRec[Index: String]: PfrPropRec read GetPropRec;  end;  TfrView = class(TfrObject)  private    Flag1: Boolean;    olddy: Integer;    procedure P1Click(Sender: TObject);  protected    SaveX, SaveY, SaveDX, SaveDY, SaveGX, SaveGY: Integer;    SaveFW: Single;    BaseName: String;    Canvas: TCanvas;    DRect: TRect;    Memo1: TStringList;    FDataSet: TfrTDataSet;    FField: String;    StreamMode: (smFRF, smFRP);    procedure ShowBackground; virtual;    procedure ShowFrame; virtual;    procedure BeginDraw(ACanvas: TCanvas);    procedure GetBlob(b: TfrTField); virtual;    procedure OnHook(View: TfrView); virtual;    procedure ExpandVariables(var s: String);    procedure SetPropValue(Index: String; Value: Variant); override;    function GetPropValue(Index: String): Variant; override;    procedure Loaded; virtual;    function DoMethod(MethodName: String; Par1, Par2, Par3: Variant): Variant; override;    function ParentBand: TfrView;  public    Name: String;    Typ: Byte;                // One of gtXXX constants    HVersion, LVersion: Byte;    ID: Integer;              // UID - used in designer (undo support)    Selected: Boolean;        // used in designer    OriginalRect: TRect;    ScaleX, ScaleY: Double;   // used for scaling objects in preview    OffsX, OffsY: Integer;    //    IsPrinting: Boolean;      // True if printing on printer canvas    x, y, dx, dy: Integer;    Flags: Word;    FrameTyp: Word;    FrameWidth: Single;    FrameColor: TColor;    FrameStyle: Word;    FillColor: TColor;    Format: Integer;    FormatStr: String;    Visible: WordBool;    gapx, gapy: Integer;    Restrictions: Word;    Tag: String;    Memo, Script: TStringList;    BandAlign: Byte;    Parent: TfrBand;    ParentPage: TfrPage;    constructor Create; virtual;    destructor Destroy; override;    procedure Assign(From: TfrView);    procedure CalcGaps; virtual;    procedure RestoreCoord; virtual;    procedure Draw(Canvas: TCanvas); virtual; abstract;    procedure StreamOut(Stream: TStream); virtual;    procedure ExportData; virtual;    procedure LoadFromStream(Stream: TStream); virtual;    procedure SaveToStream(Stream: TStream); virtual;    procedure SaveToFR3Stream(Stream: TStream); virtual;    procedure Resized; virtual;    procedure DefinePopupMenu(Popup: TPopupMenu); virtual;    function GetClipRgn(rt: TfrRgnType): HRGN; virtual;    procedure CreateUniqueName;    procedure SetBounds(Left, Top, Width, Height: Integer);    procedure DefineProperties; override;    procedure ShowEditor; virtual;  end;  TfrControl = class(TfrView)  protected    FControl: TControl;    procedure PaintDesignControl; virtual;    procedure SetPropValue(Index: string; Value: Variant); override;  public    constructor Create; override;    destructor Destroy; override;    procedure DefineProperties; override;    procedure PlaceControl(Form: TForm);    procedure Draw(Canvas: TCanvas); override;    procedure DefinePopupMenu(Popup: TPopupMenu); override;    property Control: TControl read FControl;  end;  TfrNonVisualControl = class(TfrControl)  protected    Bmp: TBitmap;    Component: TComponent;    FFixupList: TfrVariables;    procedure SetPropValue(Index: String; Value: Variant); override;    procedure PaintDesignControl; override;  public    constructor Create; override;    destructor Destroy; override;    procedure DefineProperties; override;    procedure PlaceControl(Form: TForm);    procedure Draw(Canvas: TCanvas); override;  end;  TfrStretcheable = class(TfrView)  protected    DrawMode: TfrDrawMode;    function DoMethod(MethodName: string; Par1, Par2, Par3: Variant): Variant; override;    function CalcHeight: Integer; virtual; abstract;    function MinHeight: Integer; virtual; abstract;    function LostSpace: Integer; virtual; abstract;  end;  TfrMemoView = class(TfrStretcheable)  private    FFont: TFont;    LastValue: String;    FWrapped: Boolean;    VHeight: Integer;            // used for height calculation of TfrMemoView    procedure P1Click(Sender: TObject);    procedure P2Click(Sender: TObject);    procedure P3Click(Sender: TObject);    procedure P5Click(Sender: TObject);    procedure P6Click(Sender: TObject);    procedure P8Click(Sender: TObject);    procedure P9Click(Sender: TObject);    procedure P10Click(Sender: TObject);    procedure P11Click(Sender: TObject);    procedure SetFont(Value: TFont);  protected    Streaming: Boolean;    TextHeight: Integer;    CurStrNo: Integer;    Exporting: Boolean;    procedure ExpandMemoVariables;    procedure AssignFont(Canvas: TCanvas);    procedure WrapMemo;    procedure ShowMemo;    procedure ShowUnderLines;    function CalcWidth(Memo: TstringList): Integer;    function CalcHeight: Integer; override;    function MinHeight: Integer; override;    function LostSpace: Integer; override;    procedure GetBlob(b: TfrTField); override;    procedure SetPropValue(Index: string; Value: Variant); override;    function GetPropValue(Index: String): Variant; override;    function DoMethod(MethodName: String; Par1, Par2, Par3: Variant): Variant; override;  public    Alignment: Integer;    Highlight: TfrHighlightAttr;    HighlightStr: String;    LineSpacing, CharacterSpacing: Integer;    constructor Create; override;    destructor Destroy; override;    procedure Draw(Canvas: TCanvas); override;    procedure StreamOut(Stream: TStream); override;    procedure ExportData; override;    procedure LoadFromStream(Stream: TStream); override;    procedure SaveToStream(Stream: TStream); override;    procedure SaveToFR3Stream(Stream: TStream); override;    procedure DefinePopupMenu(Popup: TPopupMenu); override;    procedure DefineProperties; override;    procedure ShowEditor; override;    property Font: TFont read FFont write SetFont;  end;   TfrBandView = class(TfrView)  private    procedure P1Click(Sender: TObject);    procedure P2Click(Sender: TObject);    procedure P3Click(Sender: TObject);    procedure P4Click(Sender: TObject);    procedure P5Click(Sender: TObject);    procedure P6Click(Sender: TObject);    procedure P7Click(Sender: TObject);    function GetBandType: TfrBandType;    procedure SetBandType(const Value: TfrBandType);    function GetRectangleWidth: Integer;  protected    procedure SetPropValue(Index: string; Value: Variant); override;    function GetPropValue(Index: String): Variant; override;    function DoMethod(MethodName: string; Par1, Par2, Par3: Variant): Variant; override;  public    ChildBand, Master: String;    Columns: Integer;    ColumnWidth: Integer;    ColumnGap: Integer;    NewColumnAfter: Integer;    constructor Create; override;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -