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

請問Tfom1(self.owner) 是什麼意思

答題得分者是:nicktop
yk1012001
一般會員


發表:7
回覆:4
積分:2
註冊:2002-10-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-12-31 22:25:02 IP:59.105.xxx.xxx 訂閱
請問我在delphi 看到一行指令如下 :

Text:= Tform1(self.owner).ConvertUIString(Sender.asString);

請問 self.owner 代表什麼 ??
編輯記錄
Coffee 重新編輯於 2007-10-12 11:05:20, 註解 修改分類為問題‧
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-01-01 01:07:38 IP:211.22.xxx.xxx 未訂閱
Self是指物件本身,而其Owner是指包含有該物件的容器,像是一個Button在Panel裏面的話,Panel就是這個Button的Owner。
yk1012001
一般會員


發表:7
回覆:4
積分:2
註冊:2002-10-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-01-01 08:10:54 IP:59.104.xxx.xxx 訂閱
Sorry ! 有一點不懂,  TForm1(self.owner) 與 TForm1(owner) 有不一樣嗎 ?
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-01-01 11:01:42 IP:211.22.xxx.xxx 未訂閱
沒有不同,在類別內使用成員,可以不使用類別本身的代名Self,所以Self.Owner就等於Owner。
h@visli
資深會員


發表:103
回覆:429
積分:431
註冊:2004-02-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-01-12 10:49:18 IP:218.18.xxx.xxx 訂閱
self指的是“Text:= Tform1(self.owner).ConvertUIString(Sender.asString);”這段代碼所在方法的類的實例,self.owner指的是這個實例的擁有者。(Sender指的是觸發這個事件的那個對象)
這段代碼的意思是要調用TForm1類的一個函數(方法)ConvertUIString。很TForm1是顯式類型轉換,很明顯,Self.Owner這個對象是一個TForm1類或其子類的一個實例,也即一個窗體。Self指的這個窗體上的一個控件。

===================引 用 文 章===================

請問我在delphi 看到一行指令如下 :
Text:= Tform1(self.owner).ConvertUIString(Sender.asString);
請問 self.owner 代表什麼 ??
------
------------------------
博采眾家之長,奉獻綿薄之力
------------------------
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-01-15 13:27:55 IP:61.219.xxx.xxx 訂閱
插開話題...Sorry
Owner 與 Parent 是不同的...
===================引 用 文 章===================
Self是指物件本身,而其Owner是指包含有該物件的容器,像是一個Button在Panel裏面的話,Panel就是這個Button的Owner。
nicktop
一般會員


發表:2
回覆:9
積分:7
註冊:2007-01-20

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-01-23 19:51:48 IP:125.232.xxx.xxx 訂閱
關於「Self」:

指的是當物件被建立起來後,物件本身
比方說我在 TForm1 的事件裡面這樣寫
procedure TForm1.OnShow(Sender: TObject);
begin
Self.Caption := 'ABCD';
end;

procedure TForm1.OnShow(Sender: TObject);
begin
Caption := 'ABCD';
end;
是完全一樣的意思

但是如果是下面這樣
procedure TForm1.OnShow(Sender: TObject);
begin
with
Label1 do
begin
Caption := '1234';
Self.Caption := 'ABCD';
end;
end;

_
因為 label1 和 form1這兩個物件都會有caption屬性 (假設某處有宣告並建立一個TForm1類別 form1 物件)
此時加上 Self.Caption 就是強調我指的是form1的caption屬性
nicktop
一般會員


發表:2
回覆:9
積分:7
註冊:2007-01-20

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-01-23 20:22:00 IP:125.232.xxx.xxx 訂閱
關於「Owner」:

Owner 是 TCompoment 的屬性
繼承自 TCompoment 的類別(差不多就是所以你可以丟到Form上面的元件)也都會有這個屬性

Owner 是 Delphi 記憶體管理機制的一環
我們知道 Delphi 不像 Java 會自動釋放物件回收記憶體
但是 Owner 屬性可以稍稍彌補這個缺點
Owner 物件要被 free 的時候
會去把它所擁有的物件一起free掉

比方說這樣寫
(假設某處有宣告並建立一個TForm1類別 form1 物件)

procedure TForm1.FormCreate(Sender: TObject);
var
ButtonA, ButtonB, ButtonC: TButton;
begin
ButtonA.Owner := TButton.Create(Self); // ButtonA create的時候,把 form1丟進去當
// ButtonA 的 owner
ButtonB := TButton.Create(Self);
ButtonC := TButton.Create(Nil);
end;
當 form1 要被 free 掉的時候,form1 會一並把 ButtonA, ButtonB 也 free 掉
但是因為 ButtonC 的 owner 不是 form1
所以 form1不會去管 ButtonC
除非你自己寫 ButtonC.Free 不然 form1 free 掉後
ButtonC 所耗用的記憶體就漏失了
系統時間:2024-04-27 9:44:49
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!