关于QuickReport这个鸟控件!(中秋不忘QuickReport!)

liang_z 2000-09-12 06:42:00
各位大虾:
本小虾在用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 不要了,就不会产生错误!

请教!请教!多谢!多谢!
...全文
226 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
skt642 2001-05-31
  • 打赏
  • 举报
回复
73234关注!
larm 2000-09-22
  • 打赏
  • 举报
回复
/
peng01234 2000-09-21
  • 打赏
  • 举报
回复
procedure TForm1.OnMyPreview(Sender: TObject);
var
ff : TFView;
begin
ff := TFView.Create(self);
try
ff.QRPreview1.QRPrinter := TQRPrinter(Sender);
ff.ShowModal;
finally
Application.ProcessMessages //<---------------(**)
ff.Free;
end;
end;
liang_z 2000-09-21
  • 打赏
  • 举报
回复
to: peng01234
好象没用的!
liang_z 2000-09-13
  • 打赏
  • 举报
回复
To:zcw
错不在"QuickRep1.Preview"!而在整个程序Close的时候!
whitehare 2000-09-13
  • 打赏
  • 举报
回复
Form1是整个工程的主体Form1OnDestroy事件发生的时候已到程序的尾声所有的组件已经不存在了,都已从内存中Destroyed

我想应该是错在这里!
cjf 2000-09-13
  • 打赏
  • 举报
回复
你在动态数组的处理上有问题,因为对象已经不存在,不能进行Free操作。
Tine 2000-09-13
  • 打赏
  • 举报
回复
好象调用free函数,资源总是释放不干净!!我以前跟踪过,不知道什么原因
zcw 2000-09-13
  • 打赏
  • 举报
回复
我写报表就是这样的,没错。
zcw 2000-09-13
  • 打赏
  • 举报
回复
with TFView.Create(self) do
try
QuickRep1.Preview;
finally
free;
end;
liang_z 2000-09-13
  • 打赏
  • 举报
回复
1、不能进行Free操作是对的,但是我不知这个对象是在什么时候被释放
的,从跟踪来看对象没有释放干净!
2、TO:Whitehare,我不做OnDestroy,即不手动Free,错误依旧!

5,387

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧