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

📄 cgridrep.pas

📁 TGridRep Component (1.0) -- by WeiYF, 2000.06.15 该组件实现网格模式的QuickRpt报表打印组件
💻 PAS
📖 第 1 页 / 共 3 页
字号:
unit CGridRep;
{*******************************************************

  TGridRep Component (1.0) -- by WeiYF, 2000.06.15
  该组件实现网格模式的QuickRpt报表打印组件,支持网格标题、
  页码、页眉页脚等属性

********************************************************}
interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, QuickRpt, Qrctrls, QRPRNTR, Grids;

const
  MAX_COL_NUM=20;
  ROW_TOP_SIZ=8;
  COL_SID_SIZ=4;
type
  TGRNeedDataNotifyEvent = procedure(Sender: Tobject; cID: char; iCol,iRow: integer;
      var sData: string; var MoreData: boolean) of object;
  TGRNotifyEvent = procedure(Sender: Tobject) of object;
  TGridRep = class(TComponent)
  private
    { Private declarations }
    bGrid: boolean;
    iPageWidth: integer;
    iPreview: integer;
    cGridID: char;
    iColCount: integer;
    iRowCount: integer;
    iPageCount: integer;
    sSample: string;

    QR: TCustomQuickRep;
    PageHeaderBand: TQRBand;
    TitleBand: TQRBand;
    ColumnHeaderBand: TQRBand;
    ColDetailBand: TQRBand;
    PageFooterBand: TQRBand;

    FPageHeaderFont: TFont;
    FPageTitleFont: TFont;
    FColHeaderFont: TFont;
    FColDetailFonts: array [0..MAX_COL_NUM-1] of TFont;
    FPageFooterFont: TFont;
    FPageNoFont: TFont;
    FPageTimeFont: TFont;

    FPageHeaderLabel: TQRLabel;
    FPageTitleLabel: TQRLabel;
    FColHeaderLabels: array [0..MAX_COL_NUM-1] of TQRLabel;
    FColDetailLabels: array [0..MAX_COL_NUM-1] of TQRLabel;
    FPageFooterLabel: TQRLabel;
    FPageNoLabel: TQRLabel;
    FPageTimeLabel: TQRLabel;

    FColLengths: array [0..MAX_COL_NUM-1] of integer;
    FColAligns: array [0..MAX_COL_NUM-1] of TAlignment;

    FColHeaderLines: array [0..MAX_COL_NUM-1] of TQRShape;
    FColDetailLines: array [0..MAX_COL_NUM-1] of TQRShape;
    FColDetailBottomLine: TQRShape;

    FOnNeedData: TGRNeedDataNotifyEvent;

    function GetTaskTitle: string;
    procedure SetTaskTitle(value: string);
    function GetPageHeader: string;
    procedure SetPageHeader(value: string);
    function GetPageTitle: string;
    procedure SetPageTitle(value: string);
    function GetColHeaders(index: integer): string;
    procedure SetColHeaders(index: integer; value: string);
    function GetPageFooter: string;
    procedure SetPageFooter(value: string);

    procedure SetPageHeaderFont(value: TFont);
    procedure SetPageTitleFont(value: TFont);
    procedure SetColHeaderFont(value: TFont);
    function GetColDetailFonts(index: integer): TFont;
    procedure SetColDetailFonts(index: integer; value: TFont);
    procedure SetPageFooterFont(value: TFont);
    procedure SetPageNoFont(value: TFont);
    function GetColLengths(index: integer): integer;
    procedure SetColLengths(index: integer; value: integer);
    function GetColAligns(index: integer): TAlignment;
    procedure SetColAligns(index: integer; value: TAlignment);

    procedure PageHeaderFontChanged(Sender: TObject);
    procedure PageTitleFontChanged(Sender: TObject);
    procedure ColHeaderFontChanged(Sender: TObject);
    procedure PageFooterFontChanged(Sender: TObject);
    procedure PageNoFontChanged(Sender: TObject);
    procedure PageTimeFontChanged(Sender: TObject);
    procedure ChangeColDetailBand(iCol: integer);
    procedure ColDetail00FontChanged(Sender: TObject);
    procedure ColDetail01FontChanged(Sender: TObject);
    procedure ColDetail02FontChanged(Sender: TObject);
    procedure ColDetail03FontChanged(Sender: TObject);
    procedure ColDetail04FontChanged(Sender: TObject);
    procedure ColDetail05FontChanged(Sender: TObject);
    procedure ColDetail06FontChanged(Sender: TObject);
    procedure ColDetail07FontChanged(Sender: TObject);
    procedure ColDetail08FontChanged(Sender: TObject);
    procedure ColDetail09FontChanged(Sender: TObject);
    procedure ColDetail10FontChanged(Sender: TObject);
    procedure ColDetail11FontChanged(Sender: TObject);
    procedure ColDetail12FontChanged(Sender: TObject);
    procedure ColDetail13FontChanged(Sender: TObject);
    procedure ColDetail14FontChanged(Sender: TObject);
    procedure ColDetail15FontChanged(Sender: TObject);
    procedure ColDetail16FontChanged(Sender: TObject);
    procedure ColDetail17FontChanged(Sender: TObject);
    procedure ColDetail18FontChanged(Sender: TObject);
    procedure ColDetail19FontChanged(Sender: TObject);

    //procedure HandleBeforePrint(Sender: TQuickRep; var PrintReport: Boolean);
    procedure HandleNeedData(Sender: Tobject; var MoreData: boolean);
    procedure HandleAfterPreview(Sender: Tobject);
    procedure HandleBeforePrint(Sender: TCustomQuickRep; var PrintReport: Boolean);
    procedure HandleStartPage(Sender: TCustomQuickRep);
    procedure InitGridRep(iColCnt:integer; bHavingGrid: boolean);
  protected
    { Protected declarations }
  public
    { Public declarations }
    bChinese: boolean;

    constructor Create(AOwner: TComponent); override;
    destructor  Destroy; override;

    procedure ShowPreview(cID: char; iColCnt:integer; bHavingGrid: boolean);

    property ColHeaders[index: integer]: string read GetColHeaders write SetColHeaders;
    property ColDetailFonts[index: integer]: TFont read GetColDetailFonts write SetColDetailFonts;
    property PageFooterFont: TFont read FPageFooterFont write SetPageFooterFont;
    property PageNoFont: TFont read FPageNoFont write SetPageNoFont;
    property ColLengths[index: integer]: integer read GetColLengths write SetColLengths;
    property ColAligns[index: integer]: TAlignment read GetColAligns write SetColAligns;
  published
    { Published declarations }
    property TaskTitle: string read GetTaskTitle write SetTaskTitle;
    property PageHeader: string read GetPageHeader write SetPageHeader;
    property PageTitle: string read GetPageTitle write SetPageTitle;
    property PageFooter: string read GetPageFooter write SetPageFooter;

    property OnNeedData: TGRNeedDataNotifyEvent read FOnNeedData write FOnNeedData;

    property PageHeaderFont: TFont read FPageHeaderFont write SetPageHeaderFont;
    property PageTitleFont: TFont read FPageTitleFont write SetPageTitleFont;
    property ColHeaderFont: TFont read FColHeaderFont write SetColHeaderFont;
  end;

procedure Register;

implementation

uses Printers;

procedure Register;
begin
  RegisterComponents('WeiYF', [TGridRep]);
end;

constructor TGridRep.Create(AOwner: TComponent);
var i,w: integer;
begin
  inherited Create(AOwner);
  bChinese := true;
  bGrid := false;
  sSample := '';  for i:=0 to 26 do sSample := sSample+chr(ord('A')+i)+chr(ord('a')+i);
  for i:=0 to MAX_COL_NUM-1 do begin
    FColLengths[i] := 0;
    FColAligns[i] := taLeftJustify;
  end;
  FPageHeaderFont := TFont.Create;
  with FPageHeaderFont do begin
    Charset := DEFAULT_CHARSET;
    Color := clWindowText;
    Height := -13;
    Name := '宋体';
    Style := [];
    OnChange := PageHeaderFontChanged;
  end;
  FPageTitleFont := TFont.Create;
  with FPageTitleFont do begin
    Charset := DEFAULT_CHARSET;
    Color := clWindowText;
    Height := -24;
    //Size := 24;
    Name := '黑体';
    Style := [];
    OnChange := PageTitleFontChanged;
  end;
  FColHeaderFont := TFont.Create;
  with FColHeaderFont do begin
    Charset := DEFAULT_CHARSET;
    Color := clWindowText;
    Height := -13;
    Name := '宋体';
    Style := [];
    OnChange := ColHeaderFontChanged;
  end;
  for i:=0 to MAX_COL_NUM-1 do begin
    FColDetailFonts[i] := TFont.Create;
    with FColDetailFonts[i] do begin
      Charset := DEFAULT_CHARSET;
      Color := clWindowText;
      Height := -13;
      Name := '宋体';
      Style := [];
    end;
  end;
  FColDetailFonts[0].OnChange := ColDetail00FontChanged;
  FColDetailFonts[1].OnChange := ColDetail01FontChanged;
  FColDetailFonts[2].OnChange := ColDetail02FontChanged;
  FColDetailFonts[3].OnChange := ColDetail03FontChanged;
  FColDetailFonts[4].OnChange := ColDetail04FontChanged;
  FColDetailFonts[5].OnChange := ColDetail05FontChanged;
  FColDetailFonts[6].OnChange := ColDetail06FontChanged;
  FColDetailFonts[7].OnChange := ColDetail07FontChanged;
  FColDetailFonts[8].OnChange := ColDetail08FontChanged;
  FColDetailFonts[9].OnChange := ColDetail09FontChanged;
  FColDetailFonts[10].OnChange := ColDetail10FontChanged;
  FColDetailFonts[11].OnChange := ColDetail11FontChanged;
  FColDetailFonts[12].OnChange := ColDetail12FontChanged;
  FColDetailFonts[13].OnChange := ColDetail13FontChanged;
  FColDetailFonts[14].OnChange := ColDetail14FontChanged;
  FColDetailFonts[15].OnChange := ColDetail15FontChanged;
  FColDetailFonts[16].OnChange := ColDetail16FontChanged;
  FColDetailFonts[17].OnChange := ColDetail17FontChanged;
  FColDetailFonts[18].OnChange := ColDetail18FontChanged;
  FColDetailFonts[19].OnChange := ColDetail19FontChanged;

  FPageFooterFont := TFont.Create;
  with FPageFooterFont do begin
    Charset := DEFAULT_CHARSET;
    Color := clWindowText;
    Height := -13;
    Name := '宋体';
    Style := [];
    OnChange := PageFooterFontChanged;
  end;
  FPageNoFont := TFont.Create;
  with FPageNoFont do begin
    Charset := DEFAULT_CHARSET;
    Color := clWindowText;
    Height := -13;
    Name := '宋体';
    Style := [];
    OnChange := PageNoFontChanged;
  end;
  FPageTimeFont := TFont.Create;
  with FPageTimeFont do begin
    Charset := DEFAULT_CHARSET;
    Color := clWindowText;
    Height := -13;
    Name := '宋体';
    Style := [];
    OnChange := PageTimeFontChanged;
  end;
  //
  QR := TQuickRep.Create(self);
  with QR do begin
    Left := 0;     Top := 0;
    //Width := 816;  Height := 1056;
    Width := Printers.Printer.PageWidth;  Height := Printers.Printer.PageHeight;
    Frame.Color := clBlack;
    Frame.DrawTop := False;
    Frame.DrawBottom := False;
    Frame.DrawLeft := False;
    Frame.DrawRight := False;
    Font.Charset := DEFAULT_CHARSET;
    Font.Color := clWindowText;
    Font.Height := -13;
    Font.Name := '宋体';
    Font.Style := [];
    Options := [FirstPageHeader,LastPageFooter];
    //Page.Columns := 1;
    //Page.Orientation := poPortrait;
    //Page.PaperSize := A4;//Letter;
    {Page.LeftMargin := 10.00;
    Page.RightMargin := 10.00;
    Page.TopMargin := 10.00;
    Page.BottomMargin := 10.00;
    Page.Length := 29.70;
    Page.Width := 21.00;}
    PrintIfEmpty := true;
    PrinterSettings.Copies := 1;
    PrinterSettings.Duplex := false;
    PrinterSettings.FirstPage := 0;
    PrinterSettings.LastPage := 0;
    PrinterSettings.OutputBin := Auto;//first;
    SnapToGrid := True;
    Units := Pixels;
    Zoom := 100;
    OnNeedData := HandleNeedData;
    AfterPreview := HandleAfterPreview;
    BeforePrint := HandleBeforePrint;
    OnStartPage := HandleStartPage;
    iPageWidth := round(QR.Page.Width * 0.80);
    //iPageWidth := 700;
    w := iPageWidth div MAX_COL_NUM;
    PageHeaderBand := TQRBand.Create(self);
    with PageHeaderBand do begin
      Parent := QR;
      Left := 0;      Top := 38;
      Width := iPageWidth;    Height := 24;
      Frame.Color := clBlack;
      Frame.DrawTop := False;
      Frame.DrawBottom := True;//False;
      Frame.DrawLeft := False;
      Frame.DrawRight := False;
      AlignToBottom := False;
      Color := clWhite;
      ForceNewColumn := False;
      ForceNewPage := False;
      //Size.Height := 10.58;
      //Size.Width := 189.97;
      BandType := rbPageHeader;
      FPageHeaderLabel := TQRLabel.Create(self);
      with FPageHeaderLabel do begin
        Parent := PageHeaderBand;
        Left := 0;        Top := 8;
        Width := 702;     Height := 16;
        Frame.Color := clBlack;
        Frame.DrawTop := False;
        Frame.DrawBottom := False;
        Frame.DrawLeft := False;
        Frame.DrawRight := False;
        //Size.Height := 4.50;
        //Size.Width := 15.35;
        Alignment := taLeftJustify;
        AlignToBand := True;//False;
        AutoSize := True;
        AutoStretch := True;//False;
        Caption := 'Page Header Label';
        Color := clWhite;
        Transparent := False;

⌨️ 快捷键说明

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