关于QuickReport这个鸟控件!(中秋不忘QuickReport!)
各位大虾:
本小虾在用QuickReport做报表的时候遇到了一个问题,
望各位大虾各发高见!现象如下:
1、报表Form:TForm1,并设置MSSQL数据链接。
2、定制预览Form:TFView;
3、在Form1的Public中定义:CLab : Array of TQRDBText;
4、在QuickRep1的BeforePrint中写:
SetLength(CLab,DBGrid1.Columns.Count);
for i:=Low(CLab) to High(CLab) do
begin
CLab[i] := TQRLabel.Create(DetailBand1);
CLab[i].Parent := DetailBand1;
CLab[i].DataSet := DataSource1.DataSet;
CLab[i].DataField := DBGrid1.Columns[i].FieldName;
end;
5、在Form1的OnDestroy中写:
for i := Low(CLab) to High(Clab) do
begin
if CLab[i]<>nil then
CLab[i].Free;
CLab[i]:=nil;
end;
6、自定义预览:
procedure TForm1.OnMyPreview(Sender: TObject);
var
ff : TFView;
begin
ff := TFView.Create(self);
try
ff.QRPreview1.QRPrinter := TQRPrinter(Sender);
ff.ShowModal;
finally
ff.Free;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
QuickRep1.OnPreview := OnMyPreview;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
QuickRep1.PreviewModal;
end;
7、结果是在Form1关闭时 “CLab[i].Free;” 产生程序执行非发操作!
“A Win32 API function failed”!
8、但是如果在自定义预览时不用TFView.Show,并且用QuickRep1.Preview;
OnDestroy 不要了,就不会产生错误!
请教!请教!多谢!多谢!