参考一下下列的程序段,根据数据集,自动生成简单的报表,包括多行打印。程序做得比较粗糙。 iLeft:=0;
iRow:=1;
iTop:=8;
//是否打印序号
if sPrintData.bOrder=true then
begin
L:=TQRLabel.Create(ColumnHeaderBand1);
L.Parent:=ColumnHeaderBand1;
L.Caption:='序号';
L.Top:=iTop;
L.Left:=iLeft;
L.Width:=40;
L.AlignToBand:=false;
L.Alignment:=taCenter; S:=TQRSysData.Create(DetailBand1);
S.Parent:=DetailBand1;
S.Data:=qrsDetailNo;
S.Top:=iTop-2;
S.Left:=iLeft+10;
S.Width:=40;
S.Alignment:=taLeftJustify;
S.Transparent:=true;
iLeft:=50;
end; //打印字段
for i:=0 to Length(sPrintData.sFields)-1 do
if sPrintData.sFields[i].iWith>0 then
begin
L:=TQRLabel.Create(ColumnHeaderBand1);
L.Parent:=ColumnHeaderBand1;
L.Caption:=sPrintData.sFields[i].sName;
L.Top:=iTop;
L.Left:=iLeft;
L.Width:=sPrintData.sFields[i].iWith;
L.AlignToBand:=false;
L.Alignment:=taCenter; T:=TQRDBText.Create(DetailBand1);
T.Parent:=DetailBand1;
T.DataSet:=ClientDataSet1;
T.DataField:=sPrintData.sFields[i].sField;
T.Top:=iTop-2;
T.Left:=iLeft;
T.Width:=sPrintData.sFields[i].iWith;
T.Alignment:=taLeftJustify;
T.Transparent:=true;
iLeft:=iLeft+ L.Width; //计算是否需要多列打印,像素/2.85=毫米
if ((iLeft/2.85)>=QReport.Page.Width)
and (i<Length(sPrintData.sFields)-1) then
begin
iLeft:=iRow*30;
ColumnHeaderBand1.Height:=ColumnHeaderBand1.Height+20;
DetailBand1.Height:=DetailBand1.Height+20;
iTop:=iTop+20;
iRow:=iRow+1;
end; end;
iRow:=1;
iTop:=8;
//是否打印序号
if sPrintData.bOrder=true then
begin
L:=TQRLabel.Create(ColumnHeaderBand1);
L.Parent:=ColumnHeaderBand1;
L.Caption:='序号';
L.Top:=iTop;
L.Left:=iLeft;
L.Width:=40;
L.AlignToBand:=false;
L.Alignment:=taCenter; S:=TQRSysData.Create(DetailBand1);
S.Parent:=DetailBand1;
S.Data:=qrsDetailNo;
S.Top:=iTop-2;
S.Left:=iLeft+10;
S.Width:=40;
S.Alignment:=taLeftJustify;
S.Transparent:=true;
iLeft:=50;
end; //打印字段
for i:=0 to Length(sPrintData.sFields)-1 do
if sPrintData.sFields[i].iWith>0 then
begin
L:=TQRLabel.Create(ColumnHeaderBand1);
L.Parent:=ColumnHeaderBand1;
L.Caption:=sPrintData.sFields[i].sName;
L.Top:=iTop;
L.Left:=iLeft;
L.Width:=sPrintData.sFields[i].iWith;
L.AlignToBand:=false;
L.Alignment:=taCenter; T:=TQRDBText.Create(DetailBand1);
T.Parent:=DetailBand1;
T.DataSet:=ClientDataSet1;
T.DataField:=sPrintData.sFields[i].sField;
T.Top:=iTop-2;
T.Left:=iLeft;
T.Width:=sPrintData.sFields[i].iWith;
T.Alignment:=taLeftJustify;
T.Transparent:=true;
iLeft:=iLeft+ L.Width; //计算是否需要多列打印,像素/2.85=毫米
if ((iLeft/2.85)>=QReport.Page.Width)
and (i<Length(sPrintData.sFields)-1) then
begin
iLeft:=iRow*30;
ColumnHeaderBand1.Height:=ColumnHeaderBand1.Height+20;
DetailBand1.Height:=DetailBand1.Height+20;
iTop:=iTop+20;
iRow:=iRow+1;
end; end;
?