重写了一个简化的程序:
多次预览时,前一次的会重叠在上面,显示有东西没有释放。。。
public
count:integer;
list:Tstringlist; //放字段名
autoLabel:array of TQRLabel; //放待生成的组件
autoText:array of TQRDBText;
procedure showAll(var data:TQuery);///调用该过程,显示报表
{ Public declarations }
end;
var
Form1: TForm1;
temp:Tquery;
implementation
uses unit2;
{$R *.DFM}
procedure Tform1.showAll(var data:Tquery);//showAll过程
var i:integer;
begin
count:=data.FieldCount;//字段数目
with form2 do begin
QuickRep1.DataSet:=data;
setlength(autolabel,count+1);
setlength(autoText,count+1);
list:=TstringList.Create;
data.GetFieldNames(list); //获取字段名列表
QRLabel1.Caption:=list[0];
autolabel[1]:=QRLabel1; //QRLabel1,QRtext1已经存在,
autoText[1]:=QRDBText1; // 以提供基准位置
autoText[1].dataset:=data;
autoText[1].datafield:=list[0];
for i:=2 to count do begin //循环赋值
autolabel:=TQRLabel.create(form2.QRBand2);
autolabel.caption:=list[i-1];
autolabel.parent:=form2.QRBand2;
autolabel.left:=autolabel[i-1].left +120;
autolabel.top:=autolabel[i-1].top;
autoText:=TQRDBText.Create(form2.QRBand1);
autoText.datafield:=list[i-1];
autoText.dataset:=autoText[i-1].dataset;
autoText.parent:=form2.QRBand1;
autoText.left:=autoText[i-1].left +120;
autoText.top:=autoText[i-1].top;
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
temp:=query1;
showAll(temp); //调showAll预览
form2.quickrep1.Preview;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
temp:=query2;
showAll(temp);
form2.QuickRep1.Preview;//调showAll预览
end;
procedure TForm1.Button3Click(Sender: TObject);//释放
var k:integer;
begin
list.Free; //释放后依旧出现字段重叠???????????????
for k:=2 to count do begin
autolabel[k].caption:='';
autoLabel[k].free;
autoText[k].free;
end;
end;
end.