全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1928
推到 Plurk!
推到 Facebook!

動態CREATE 的問題

 
刁一
一般會員


發表:10
回覆:22
積分:6
註冊:2002-07-31

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-08-02 14:08:09 IP:211.74.xxx.xxx 未訂閱
我動態CREATE TEDIT時下 abc:=TEdit.Create(Self); 在FORM CLOSE後會自動FREE嗎? 如果將他在CLOSE之前就手動FREE了....那FORM CLOSE時會不會FREE不到啊?
刁一
一般會員


發表:10
回覆:22
積分:6
註冊:2002-07-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-08-02 14:24:23 IP:211.74.xxx.xxx 未訂閱
有了.!... 在FREE之前下 Self.RemoveComponent(ABC); 這樣他的OWNER唯讀屬性就會為NIL了....那就不會自動FREE了.. 嘻嘻....應該可以吧!...我想...
wenjung
一般會員


發表:21
回覆:61
積分:21
註冊:2002-04-29

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-08-02 14:53:51 IP:210.70.xxx.xxx 未訂閱
我試過如果將他在CLOSE之前就手動FREE了.那FORM CLOSE時會FREE不到,至於 在FORM CLOSE後是否會自動FREE這 ..... 我就不知道了 以下是我測試的程式: procedure TForm1.Button1Click(Sender: TObject); Var x : integer; aa : TEdit; begin aa := Tedit.Create(self); aa.Top := 10; aa.Left := 30; aa.Width := 100; aa.Height := 24; aa.Name := 'Tedit'; aa.Show ; x := 0; showmessage('Size = ' inttostr(aa.Font.Size)); for x := 0 to ComponentCount -1 Do Begin showmessage(Components[x].Name ); End; Font.Size := 12; showmessage('Size1 = ' inttostr(aa.Font.Size)); // 用來確定是否繼承於form aa.free; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); var x : integer; begin x := 0; showmessage(inttostr(ComponentCount -1)); //列出目前form上的元件數 for x := 0 to ComponentCount -1 Do Begin //Components[x].Free ; showmessage(Components[x].Name ); // 列出元件名稱 ...[只剩下TButton] End; end;
Jasonwong
版主


發表:49
回覆:931
積分:581
註冊:2006-10-27

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-08-02 15:02:38 IP:211.21.xxx.xxx 未訂閱
引言: 我動態CREATE TEDIT時下 abc:=TEdit.Create(Self); 在FORM CLOSE後會自動FREE嗎? 如果將他在CLOSE之前就手動FREE了....那FORM CLOSE時會不會FREE不到啊?
那要看你CREATE後面參數接的是什麼...SELF代表系統會幫你FREE... APPLICATION則是你自己要手動FREE... 這個問題之前好像有討論過...建議你去搜尋看看...
------
聰明的人,喜歡猜心;雖然每次都猜對了,卻失去了自己的心
傻氣的人,喜歡給心;雖然每次都被笑了,卻得到了別人的心
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-08-02 17:33:17 IP:203.217.xxx.xxx 未訂閱
引言: 我動態CREATE TEDIT時下 abc:=TEdit.Create(Self); 在FORM CLOSE後會自動FREE嗎? 如果將他在CLOSE之前就手動FREE了....那FORM CLOSE時會不會FREE不到啊?
一般而言每一可見之元件有兩個父親, parent及owner. owner管此元件之Memory. Parent則管顯示. Desintime時假設你在form1上先放一個panel1, 再在panel1上放一個edit1則Edit1之Owner為Form, parent為Panel, 故Panel Visible改為False, 則Edit也看不到了. Form則會管edit之Memory, 故Form Free時, edit也會自動被free. [note] 此時, Form之Controls array不包含edit, 但Components array則包含edit. Panel之Controls Array包含此Edit RunTime: abc:=TEdit.Create(Self);傳入之參數為owner, 你必須另訂abc之parent否則不會顯示, 假設 abc.parent:=self; 則form之Controls, Components Array均含此Edit, Form管其顯示, 也負責其Memory. RemoveComponent是不須的除非你在DELPHI IDE中寫Property Editor或Component Editor或 Expert否則不須呼叫此程序. 若Create時未給owner, 就必須自行Free 有owner, 雖然Memory由owner維護, 可以不須free, 但我以為養成良好習慣, RunTime自行Create, 還是自行Free較佳(此純為個人觀點) 你也可以將此元件之parent, 或owner設為其他之WinControl 如果你自己先將元件Free, 則Components, Controls array均會移除此元件, 不會重複free.
系統時間:2024-04-24 21:48:51
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!