動態CREATE 的問題 |
|
刁一
一般會員 發表:10 回覆:22 積分:6 註冊:2002-07-31 發送簡訊給我 |
|
刁一
一般會員 發表:10 回覆:22 積分:6 註冊:2002-07-31 發送簡訊給我 |
|
wenjung
一般會員 發表:21 回覆:61 積分:21 註冊:2002-04-29 發送簡訊給我 |
我試過如果將他在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 發送簡訊給我 |
引言: 我動態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 發送簡訊給我 |
引言: 我動態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. |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |