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

关于动态窗口的释放和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

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

posted on 2009-01-04 16:48  delphi2007  阅读(284)  评论(0编辑  收藏  举报