关于动态窗口的释放和ThemeEngine的问题

本文探讨了 Delphi VCL 中动态窗口 FORM3 的创建与释放过程中的常见问题,包括如何正确处理窗体关闭后的资源释放,避免内存泄漏和引用已释放对象的错误。同时,分析了使用 ThemeEngine 时遇到的索引越界异常,提供了解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于动态窗口的释放和ThemeEngine的问题 VCL组件开发及应用
http://www.delphi2007.net/DelphiVCL/html/delphi_20061221110256226.html
首先第一个问题  
          我有个动态查询窗口FORM3,当我在form1里按BUTTON1的时候,创建FORM3,并且把查询数据库的结果返回给FORM3上的STRINGGRID1中,当我点下form3的button1(fORM3.BUTTON1的MODALRESULT=MROK)时候,希望把结果返回到form1.edit1.text中,具体语句如下:  
  if   query.frmQuery.ShowModal=mrOk   then   begin  
              showmessage('123');  
              edit1.Text   :=trim(query.frmQuery.StringGrid1.Cells[GlobleJ-1,query.frmQuery.StringGrid1.Row]);  
          end;  
   
  如果在不在FORM3的close动作里写action:=cafree;       上面的语句就没问题,如果写了action:=cafree;,把showmessage去掉也没问题,但是加上showmessage就会报错,有点迷惑了,这里总是似懂非懂,请大家帮忙解释下为什么.  
   
  第2个问题,我上面的查询窗口没用ThemeEngine的时候使用正常,如果我把窗体全换成ThemeEngine的之后就会报错,错误提示如下:Project   project1.exe   raised   exception   class   ElistError   with   message   'list   index   out   of   bounds(-1)'   Process   stoped   USE   step   or   run   to   continue.  
  这个是为什么呢?

在两个对话框间使用消息通讯机制好了,安全些  
  或者showmessage改成Application.ShowMessage();

第二个是索引越界,检查一下list下标引用

加了action:=cafree会导致窗体关闭后,立即进行了释放,如果窗体关闭还要用它里面的内容,最好不要加释放语句。

LIST下標引用這裡能不能說的再詳細點呢?

如果frmQuery已经释放了,引用它里面的对象肯定不行了。  
  只要对象在,你可以调试一下呀,看看下标的范围,看一下是否引用已超出了这个范围

list里下标索引是基于0的,如list里有5个元素,下标从0到4

问题解决,谢谢楼上的两位。

转载于:https://www.cnblogs.com/delphi2007/archive/2009/01/04/1368291.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值