rm_class.pas

来自「胜天进销存源码,国产优秀的进销存」· PAS 代码 · 共 1,744 行 · 第 1/5 页

PAS
1,744
字号
    starting at the new page.}

  TRMBandGroupHeader = class(TRMBand)
  private
  protected
  public
    constructor Create; override;

    //property BreakNo: Integer;
  published
    property HideIfEmpty;
    //		property NewPageBefore;
    property NewPageAfter;
    property Stretched;
    property PageBreaked;
    property GroupCondition;
    property ReprintOnNewPage;
    property ReprintOnNewColumn;
    property MasterBandName;
    property PrintChildIfInvisible;

    property OutlineText;
    property ChildBand;
    property KeepChild;
    property KeepTogether;
    property KeepFooter;
    //    property ResetPageNo;
  end;

  TRMBandGroupFooter = class(TRMBand)
  private
  protected
  public
    constructor Create; override;
  published
    //		property NewPageBefore;
    property NewPageAfter;
    property HideIfEmpty;
    property Stretched;
    property PageBreaked;
    //    property ReprintOnEveryPage;
    property PrintChildIfInvisible;
    property GroupHeaderBandName;

    property ChildBand;
    property KeepChild;
    property OutlineText;
  end;

  TRMBandCrossHeader = class(TRMBand)
  private
  protected
  public
    constructor Create; override;
  published
    property ReprintOnNewPage;
    property Stretched;
    property PrintAtDesignPos;
  end;

  TRMBandCrossData = class(TRMBand)
  private
    FDataSource: string;
  protected
  public
    constructor Create; override;
  published
    property DataSource: string read FDataSource write FDataSource;
    property PrintAtDesignPos;
    property AutoAppendBlank;
    property ColumnGap;
    property Columns;
  end;

  TRMBandCrossFooter = class(TRMBand)
  private
  protected
  public
    constructor Create; override;
  published
    property PrintAtDesignPos;
  end;

  TRMBandOverlay = class(TRMBand)
  private
  protected
  public
    constructor Create; override;
  published
    //property ChildBand;
    //property KeepChild;
    property PrintChildIfInvisible;
  end;

  TRMBandChild = class(TRMBand)
  private
  protected
  public
    constructor Create; override;
  published
    //		property NewPageBefore;
    property NewPageAfter;
    property PrintChildIfInvisible;

    property ChildBand;
    property KeepChild;
    property OutlineText;
  end;

  { TRMCustomPage }
  TRMCustomPage = class(TRMPersistent)
  private
    FPrintToPrevPage: Boolean;
    FParentReport: TRMReport;
    FVisible: Boolean;
    FObjects: TList;
    FFont: TFont;
    FOutlineText: string;
    FOnActivate: TNotifyEvent;
    FOnBeginPage: TRMBeginPageEvent;
    FOnEndPage: TRMEndPageEvent;

    // 生成报表时需要的参数
    FEventList: TList;
    FAggrList: TList;
    FParentPage: TRMReportPage;
    FPageNumber: Integer;
    FIsSubReportPage: Boolean;
    FPrintChildTypeSubReportPage: Boolean;
    FSubReportView: TRMSubReportView;
    FSubReport_MMLeft, FSubReport_MMTop: Integer;
    FColumnPos, FCurrentPos: Integer;
    FmmCurrentX, FmmCurrentY, FmmCurrentX1: Integer;
    FmmCurrentBottomY, FmmLastStaticColumnY: Integer;
    FmmOffsetX, FmmOffsetY: Integer; // 打印时用到的,就是边距信息
    FLastPrintBand: TRMBand;
    FDrawRepeatHeader, FDisableRepeatHeader: Boolean;
    FCurPageColumn: Integer;
    FStartPageNo: Integer;

    procedure AfterPrint;

    function GetItems(Index: string): TRMView;
    procedure SetFont(Value: TFont);
    procedure SetOutlineText(Value: string);
  protected
    FChildPageNo: Integer;
    FChildPageBegin: Integer;
    FChildEndPages: TRMEndPages;
    FCurrentEndPages: TRMEndPages;

    function DocMode: TRMDocMode;
    procedure SetName(const Value: string); override;
    procedure SetObjectsEvent;
    procedure AddChildView(aStringList: TStringList; aDontAddBlankNameObject: Boolean); virtual;
    procedure BuildTmpObjects; virtual;
    procedure PreparePage; virtual; abstract;
    procedure UnPreparePage; virtual; abstract;
    procedure LoadFromStream(aStream: TStream); virtual; abstract;
    procedure SaveToStream(aStream: TStream); virtual; abstract;
    function GetPrinter: TRMPrinter;
    procedure Loaded; virtual;
    procedure BeforeDeleteObject(aObject: TRMView); virtual;

    property PrintToPrevPage: Boolean read FPrintToPrevPage write FPrintToPrevPage;
    property IsSubReportPage: Boolean read FIsSubReportPage;
    property mmCurrentY: Integer read FmmCurrentY;
    property mmCurrentBottomY: Integer read FmmCurrentBottomY;
    property OutlineText: string read FOutlineText write SetOutlineText;
    property OnBeginPage: TRMBeginPageEvent read FOnBeginPage write FOnBeginPage;
    property OnEndPage: TRMEndPageEvent read FOnEndPage write FOnEndPage;
    property OnActivate: TNotifyEvent read FOnActivate write FOnActivate;
  public
    constructor Create; override;
    destructor Destroy; override;
    procedure Clear;
    procedure CreateName;
    procedure Delete(Index: Integer);
    function IndexOf(aObjectName: string): Integer;
    function FindObject(aObjectName: string): TRMView; virtual;
    function UpdateBandsPageRect: Boolean; virtual; abstract;
    function PageObjects: TList; virtual;
    function EventList: TList;
    function Count: Integer;

    property Items[Index: string]: TRMView read GetItems; default;
    property Objects: TList read FObjects;
    property ParentReport: TRMReport read FParentReport;
  published
    property Visible: Boolean read FVisible write FVisible;
    property Font: TFont read FFont write SetFont;
    property Name;
  end;

  { TRMDialogPage }
  TRMDialogPage = class(TRMCustomPage)
  private
    FBorderStyle: TFormBorderStyle;
    FCaption: string;
    FColor: TColor;
    FLeft, FTop, FWidth, FHeight: Integer;
    FPosition: TPosition;
    FForm: TForm;
  protected
    procedure PreparePage; override;
    procedure UnPreparePage; override;
    procedure LoadFromStream(aStream: TStream); override;
    procedure SaveToStream(aStream: TStream); override;

    function GetPropValue(aObject: TObject; aPropName: string; var aValue: Variant; Args: array of Variant): Boolean; override;
    function SetPropValue(aObject: TObject; aPropName: string; aValue: Variant): Boolean; override;
  public
    constructor CreatePage(aParentReport: TRMReport);
    destructor Destroy; override;
    function UpdateBandsPageRect: Boolean; override;

    property Form: TForm read FForm;
  published
    property BorderStyle: TFormBorderStyle read FBorderStyle write FBorderStyle;
    property Caption: string read FCaption write FCaption;
    property Color: TColor read FColor write FColor;
    property Left: Integer read FLeft write FLeft;
    property Top: Integer read FTop write FTop;
    property Width: Integer read FWidth write FWidth;
    property Height: Integer read FHeight write FHeight;
    property Position: TPosition read FPosition write FPosition;

    property OnActivate;
  end;

  { TRMReportPage }
  TRMReportPage = class(TRMCustomPage)
  private
    FPageWidth, FPageHeight: Longint;
    FPageSize: Integer;
    FPageOrientation: TRMPrinterOrientation;
    FPageBin: Integer;
    FDuplex: TRMDuplex;
    FResetPageNo: Boolean;
    FNewPrintJob: Boolean;
    FmmbkPictureLeft, FmmbkPictureTop: Integer;
    FmmMarginLeft, FmmMarginTop, FmmMarginRight, FmmMarginBottom: Integer;
    FAutoHCenter, FAutoVCenter: Boolean;
    FFlags: Word;
    FColumnCount: Integer;
    FmmColumnGap: Integer;

    // 保持在同一页用到的信息
    FKeepPage_Count: Integer;
    //    FKeepPage_EndPage: TRMEndPage;
    FKeepPage_SaveStream: TMemoryStream;
    FKeepPage_Stream: TMemoryStream;
    FKeepPage_SavePos: Int64;
    FKeepPage_OffsetLeft: Integer;
    FKeepPage_OffsetTop: Integer;
    FKeepPage_OutLines: TStringList;

    // 打印是用到的临时变量
    FSubReports: TList;
    FParentPages: TList;
    FBands: array[TRMBandType] of TList;
    FShowBackPicture: Boolean;
    FMaxLevel: Integer;
    FFlag_NewPage, FFlag_ColumnNewPage: Boolean;
    FSavePageNo: Integer;
    FInDrawPageHeader: Boolean; // 正在打印PageHeader
    FmmColumnWidth: Integer;
    FBaseOutlineLevel, FNowOutlineLevel: Integer;

    procedure SetmmMarginLeft(aValue: Integer);
    procedure SetmmMarginTop(aValue: Integer);
    function GetspMarginLeft(index: Integer): Integer;
    procedure SetspMarginLeft(index: Integer; value: Integer);
    function GetpgMargins: TRect;
    procedure SetpgMargins(aValue: TRect);
    procedure SetColumnCount(Value: Integer);
    function GetColumnGap: Double;
    procedure SetColumnGap(Value: Double);

    function GetCurrentRightX: Integer;
    function GetCurrentBottomY: Integer;
    function BandByType(aType: TRMBandType): TRMBand;
    procedure ShowBand(aBand: TRMBand);

    procedure ResetPosition(aBand: TRMBand; aResetTo: Integer);
    procedure PlaceObjects;
    procedure PrepareObjects;
    procedure PrepareAggrObjects; //计算字段

    // SubReport相关
    procedure CreateChildReport;
    procedure FreeChildReport;
    procedure PrintChildTypeSubReports;
    function HaveChildEndPage(aPageIndex: Integer): Boolean;
    procedure TransferChildTypeSubReportViews(aPageIndex: Integer; aEndPage: TRMEndPage;
      aEndPages: TRMEndPages);

    procedure DoPrintPage(aMasterBand: TRMBand; aBandType: TRMBandType;
      aNowLevel: Integer; var aBndStackTop: Integer; var aBndStack: array of TRMBand);
    procedure PrintPage;

    procedure InitKeepPageInfo;
    procedure FreeKeepPageInfo;
    procedure AddKeepPageBand(aEndBand: TRMBand);
    procedure DeleteKeepPageBand(aEndBand: TRMBand);
    procedure TransferToCachePage;
    procedure TransferFromCachePage(aNewPage: Boolean);

    procedure DrawColumnFooter(aLastPageFlag: Boolean);
    procedure DrawPageFooters(aLastPageFlag: Boolean);
    procedure DoDetailHeaderAggrs(aBand: TRMBand);
    procedure DoGroupHeaderAggrs(aGroupHeader: TRMBand);
    procedure AutoCenterObjects(aPageNo: Integer);

    function GetbkGroundLeft(index: Integer): Double;
    procedure SetbkGroundLeft(index: Integer; Value: Double);
    procedure SetbkPicture(aPicture: TPicture);
  protected
    FbkPicture: TPicture;

    function GetPropValue(aObject: TObject; aPropName: string; var aValue: Variant;
      Args: array of Variant): Boolean; override;
    function SetPropValue(aObject: TObject; aPropName: string;
      aValue: Variant): Boolean; override;

    procedure PreparePage; override;
    procedure UnPreparePage; override;
    procedure LoadFromStream(aStream: TStream); override;
    procedure SaveToStream(aStream: TStream); override;
  public
    PrinterInfo: TRMPageInfo;
    bkPictureWidth, bkPictureHeight: Integer;

    constructor CreatePage(aParentReport: TRMReport; aSize, aWidth, aHeight, aBin: Integer; aOr: TRMPrinterOrientation); virtual;
    destructor Destroy; override;

    function UpdateBandsPageRect: Boolean; override;
    procedure NewColumn(aBand: TRMBand);
    procedure NewPage;
    procedure ShowBandByName(const aBandName: string);
    procedure ShowBandByType(aBandType: TRMBandType);
    procedure ChangePaper(ASize, AWidth, AHeight, ABin: Integer; AOr: TRMPrinterOrientation);

    property PageWidth: Longint read FPageWidth;
    property PageHeight: Longint read FPageHeight;
    property PageSize: Integer read FPageSize;
    property PageOrientation: TRMPrinterOrientation read FPageOrientation;
    property PageBin: Integer read FPag

⌨️ 快捷键说明

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