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

with TFmT51R.Create(Self) do 與 with TFmT51(Owner)?

尚未結案
vivi666666
初階會員


發表:83
回覆:94
積分:35
註冊:2003-03-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-06-09 16:07:41 IP:203.69.xxx.xxx 未訂閱
with TFmT51R.Create(Self) do 與 with TFmT51(Owner) 的差異?
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-06-09 17:14:37 IP:202.39.xxx.xxx 未訂閱
FAQ, 參考: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=31850 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=27385 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=23132 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=20036 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=18919    --- 每個人都是一本書
channel
尊榮會員


發表:67
回覆:707
積分:854
註冊:2002-05-02

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-06-09 18:34:26 IP:211.21.xxx.xxx 未訂閱
引言: with TFmT51R.Create(Self) do 與 with TFmT51(Owner) 的差異?
您可以自己作一個實驗,測試看看,Self是指誰?Owner是指誰? 方法如下:在Form1,放一個Button的元件。
procedure TForm1.Button1Click(Sender: TObject);
begin
  if Self = Form1 then
    ShowMessage('Form1');
  if Owner = Form1 then
    ShowMessage('Form1')
  else if Owner = Application then
    ShowMessage('Application');
end;
由此實驗可以知 Owner是指整個應用程式Application。 Self是指目前的Form即是Form1。(若在Form2寫Self則Self就是指Form2) 了解了以上的基本觀念,再說明您所問的問題: with TFmT51R.Create(Self) do 與 with TFmT51.Create(Owner) do 的差異? 其差異就是物件擁有者的不同(Owner): (假設此段程式是寫在Form1) with TFmT51R.Create(Self) do的擁有者是指Form1(端看您的程式寫在那一個Form,其擁有者就是那一個Form) with TFmT51.Create(Owner) do的擁有者是指Application。 而擁有者影嚮物件的生命週期: with TFmT51R.Create(Self) do的生命週期是當Form1結束時就跟著結束。 with TFmT51.Create(Owner) do的生命週期是當應用程式結束時才跟著結束。 知道理論之後,再作一個實驗就可以更清楚知道with TFmT51R.Create(Self) do 與 with TFmT51.Create(Owner) do 的差異? (1)首先Delphi/File/New Application,即會產一個Form1。 (2)按Delphi/File/New Form按二次,產生Form2及Form3。 (3)按Delphi/Project/Options將Form2及Form3從Atuo-Create Form移到Available Form。 (4)在Form1及Form2放置一個Button1 (5)記得Form1要uses Form2、Form2要uses Form3 (6)
procedure TForm1.Button1Click(Sender: TObject);
begin
  with TForm2.Create(Self) do
    Show;
end;
procedure TForm2.Button1Click(Sender: TObject);
begin
  with TForm3.Create(Self) do
    Show;
end;
執行此應用程式,按Form1.Button1產生Form2,按Form2.Button1產生Form3此時關掉Form2則Form3也一起被關掉,這是因為Form3的擁有者是Form2。 我們將程式改一下:(將Form2.Button1Click改為TForm3.Create(Owner) do)
procedure TForm2.Button1Click(Sender: TObject);
begin
  with TForm3.Create(Owner) do
    Show;
end;
執行此應用程式,按Form1.Button1產生Form2,按Form2.Button1產生Form3此時關掉Form2則Form3還存在,這是因為Form3的擁有者是Application,當應用程式結束時才會結束。 ~小弟淺見,參考看看~
------
~小弟淺見,參考看看~
系統時間:2024-07-05 17:33:14
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!