關於動態視窗的釋放和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
問題解決,謝謝樓上的兩位。