線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3076
推到 Plurk!
推到 Facebook!

要如何代參數FormClose(??);

尚未結案
gcpp
一般會員


發表:16
回覆:19
積分:7
註冊:2004-12-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-01-10 20:05:17 IP:61.219.xxx.xxx 未訂閱
動態視窗要結束是要如何下參數? 是要如何代參數FormClose(??); void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action) { Action=caFree; } 請高手指點.
Zard
尊榮會員


發表:24
回覆:396
積分:539
註冊:2003-11-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-01-10 20:44:48 IP:61.64.xxx.xxx 未訂閱
引言: 動態視窗要結束是要如何下參數? 是要如何代參數FormClose(??); void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action) { Action=caFree; } 請高手指點.
直接用Form2->Close() 就可以了, Form2->Close()會自動幫你呼叫TForm2::FormClose
gcpp
一般會員


發表:16
回覆:19
積分:7
註冊:2004-12-29

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-01-10 20:53:09 IP:61.219.xxx.xxx 未訂閱
請教Zard大大 Close();與Form2->Close();有何不同? 用
 
1.Close();
2.void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action)
{
   //Action=caFree;     
}
compiler OK    但用
1.Form2->Close();
2.void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action)
{
   Action=caFree;     
}
執行時有err. 發表人 - gcpp 於 2005/01/10 21:35:47
deity
尊榮會員


發表:90
回覆:876
積分:678
註冊:2003-05-09

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-01-10 23:44:02 IP:59.32.xxx.xxx 未訂閱
插个花: Form2->Close()并没有真正的delete a form ,只是Call Close to close a form.所以再下Action=caFree; 就会报错;  
 
1.Form2->Close();
2.void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action)
{
   Action=caFree;
   Form2 = NULL;    //加上此句 
}
参考:
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=44564
~~~静心养德~~~
gcpp
一般會員


發表:16
回覆:19
積分:7
註冊:2004-12-29

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-01-11 14:09:35 IP:61.219.xxx.xxx 未訂閱
加上Form2 = NULL; 還是一樣
deity
尊榮會員


發表:90
回覆:876
積分:678
註冊:2003-05-09

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-01-11 15:18:32 IP:218.15.xxx.xxx 未訂閱
弄错了,会不会是因为您 void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action) {   Action=caFree;//窗体被关闭,同时也释放相应的内存  } 释放相应的内存后,您又有用到此Form,所以导致报错。 而FormClose意为窗口关闭时调用的事件句柄,所以不管您下close();还是Form2->Close();此处的效果是一样的,只是您在onclose中释放相应的内存,而导致再次使用出错,您可以在onclose事件中,作如下处理,就可以知道其实执行close();和Form2->Close();都会去执行onclose事件,问题是出在您是否释放相应的内存,如有错误,还请指正 < class="code"> procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction); begin if MessageDlg('Close application ?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then Action := caFree else Action := caNone; end; procedure TForm2.Button1Click(Sender: TObject); begin Close; // form2.Close; end; ~~~静心养德~~~
gcpp
一般會員


發表:16
回覆:19
積分:7
註冊:2004-12-29

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-01-11 15:34:18 IP:61.219.xxx.xxx 未訂閱
有內容 我去試試看
gcpp
一般會員


發表:16
回覆:19
積分:7
註冊:2004-12-29

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-01-11 15:47:50 IP:61.219.xxx.xxx 未訂閱
1.Close(); 2.void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action) { //Action=caFree; } compiler OK 執行OK 用 1.Form2->Close(); 2.void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action) { Action=caFree; } compiler OK 執行時有上圖err. Close()之後在Memory內還留一份Form2資料 Form2->Close();呼叫Action=caFree;就把Form2資料清掉. deity大大的回答較詳細這題就給deity大大了
kill7139
一般會員


發表:3
回覆:1
積分:0
註冊:2015-01-13

發送簡訊給我
#9 引用回覆 回覆 發表時間:2015-09-16 20:06:16 IP:59.127.xxx.xxx 訂閱

===================引 用 gcpp 文 章===================
1.Close(); 2.void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action) { //Action=caFree; } compiler OK 執行OK 用 1.Form2->Close(); 2.void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action) { Action=caFree; } compiler OK 執行時有上圖err. Close()之後在Memory內還留一份Form2資料 Form2->Close();呼叫Action=caFree;就把Form2資料清掉. deity大大的回答較詳細這題就給deity大大了

版大不好意思
自己也剛好遇到內存的問題 想問一下
Action=caFree;是什麼意思? 用處?
close()不就把視窗關掉了 不能在視窗沒關掉的狀態下清除內存嗎?
------
嗨^^
系統時間:2024-04-26 14:35:34
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!