📄 cgridrep.pas
字号:
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 + -