Delphi程序执行时实时生成报表(5)

2008-04-09 04:30:07来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折


end;
//调整列标头带区中的日期及页码打印位置
QRE2.Left:=HB.Width-Qre2.Width;
QRSQL.Left:=QRE1.Width 10;
QRSQL.Width:= QRE2.Left-10-QRSQL.Left;
QuickRep.DataSet:=Query; //为QuickRep指定数据集,该句一定不能少
Screen.Cursor:=crDefault;
end;

procedure TPrintForm.ClearRep();//清除生成报表格式时建立的控件
Var
I:Byte;
begin
For I:=0 to Query.FieldCount-1 do begin
if Assigned(CHBShape[I]) then begin CHBShape[I].Free;CHBShape[I]:=nil;end;
if Assigned(CHBNAME[I]) then begin CHBNAME[I].Free;CHBNAME[I]:=nil;end;
if Assigned(DBShape[I]) then begin DBShape[I].Free;DBShape[I]:=nil;end;
if Assigned(DBNAME[I]) then begin DBNAME[I].Free;DBNAME[I]:=nil;end;
if Assigned(FBShape[I]) then begin FBShape[I].Free;FBShape[I]:=nil;end;
if Assigned(FBNAME[I]) then begin FBNAME[I].Free;FBNAME[I]:=nil;end;
if Assigned(SumShape[I]) then begin SumShape[I].Free;SumShape[I]:=nil;end;
if Assigned(SumNAME[I]) then begin SumNAME[I].Free;SumNAME[I]:=nil;end;
end;
end;

procedure TPrintForm.SRClick(Sender: TObject);
begin
if Sr.Checked then QrSQL.Caption:=CXTJ else QRSQL.Caption:='''''''';
end;

procedure TPrintForm.FormShow(Sender: TObject); //窗体显示事件
begin
Query.Active:=True;//打印SQL
TT.Text:=Bt;
QuickRep.ReportTitle:=Bt;//设置标题
//控件名数组分配空间
SetLength(CHBNAME,Query.FieldCount);
SetLength(CHBShape,Query.FieldCount);
SetLength(DBNAME,Query.FieldCount);
SetLength(DBShape,Query.FieldCount);
SetLength(FBNAME,Query.FieldCount);
SetLength(FBShape,Query.FieldCount);
SetLength(SumNAME,Query.FieldCount);
SetLength(SumShape,Query.FieldCount);
end;

procedure TPrintForm.PaperSizeChg(Sender: TObject);
begin
CrtRep.Enabled:=True;
BtnPrint.Enabled:=not CrtRep.Enabled;
BtnPrview.Enabled:=BtnPrint.Enabled;
end;

procedure TPrintForm.DJChage(Sender: TObject);//对齐方式改变事件处理
var
Chg:Byte;
begin
if Djauto.Checked then Chg:=0
else if DjCenter.Checked then Chg:=1
else Chg:=2;
if Chg<>Rd1 then begin PaperSizeChg(nil);Rd1:=Chg;end;
end;

procedure TPrintForm.WdChage(Sender: TObject);//宽度改变事件处理
var
Chg:Byte;
begin
if Wdauto.Checked then Chg:=0
else if Wdall.Checked then begin
Chg:=1;
if ColWd.Text='''''''' then ColWd.Text:=''''100'''';
end
else begin
Chg:=2;
if ColWd.Text='''''''' then ColWd.Text:=''''200'''';
end;
if Chg<>Rd2 then begin PaperSizeChg(nil);Rd2:=Chg;end;
ColWd.Enabled:=Chg<>0;
end;

procedure TPrintForm.QuickRepStartPage(Sender: TCustomQuickRep);
//报表打印开始新页事件处理,页脚带区中的统计值清空
Var
I:Byte;
begin
if Tj1.Checked then
For I:=0 to Query.FieldCount-1 do
if Assigned(FBNAME[I]) then FBNAME[I].Reset;
end;

procedure TPrintForm.BtnPrintClick(Sender: TObject);
begin
QuickRep.Print;
end;
end.
4、 调用对话框举例:
首先在将要调用的窗体中的USES语句中包含PrintDlg单元,然后可以用如下代码调用:
if not assigned(PrintForm) then PrintForm:=TPrintForm.Create(Application);
PrintForm.Query.SQL.Assign(Query.SQL);
//如果调用窗体不包含Query控件,可直接设置SQL语句的值
PrintForm.Bt:=报表标题;
PrintForm.Caption:=窗体标题;
PrintForm.CXTJ:=查询条件;
PrintForm.ShowModal;
5、 结束语
此程序关键是CreateReport事件过程和动态控件名称的处理。由于编幅所限,有些内容没有说明,希望读者自行体会。对于一般的报表生成,此程序能够满足要求。

本人有最新版本,功能更强,有需要的朋友可发邮件给我,一定邮的。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Delphi的压缩流与解压流

下一篇:在stringgrid控件中使文字内容在cell中做到上下居中