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

請問要如何動態Creat form呢???

尚未結案
miller680523
一般會員


發表:47
回覆:49
積分:19
註冊:2002-10-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-07-01 17:38:37 IP:61.218.xxx.xxx 未訂閱
如果我不作MDI要如何動態Creat form呢?????
ha0009
版主


發表:16
回覆:507
積分:639
註冊:2002-03-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-07-01 17:55:14 IP:61.30.xxx.xxx 未訂閱
你好: 動態物件把握幾個原則既可。 1. 如果動態物件(繼承自 TComponent 的物件才有)沒有擁有者要記得釋放。 ex:
        A := TForm.Create (Self);                // 擁有者會幫你釋放
        A := TStringList.Create;                // 需自己釋放
2. 具有外觀的物件動態建立時要設定 Parent 才能讓外觀顯示在 Parent 的視窗上。 ex:
        
        A := TForm.Create (Self);
        A.Parent := Self;
你只要把握上面的原則,無關是否 MDI Form
channel
尊榮會員


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-07-01 18:01:42 IP:211.21.xxx.xxx 未訂閱
引言: 如果我不作MDI要如何動態Creat form呢?????
記得要先uses Form1;
Application.CreateForm(TForm1, Form1);
try
  Form1.ShowModal;
finally
  Form1.Free;
end;
~小弟淺見,參考看看~
------
~小弟淺見,參考看看~
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-07-01 18:11:31 IP:218.16.xxx.xxx 未訂閱
請參考 : 動態以 Form 的 ClassName (字串) 建立唯一視窗 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=30803 可不用 uses Form 直接以 Form 的 Classname 來動態 Create Form 範例中會尋找是否已 Create 若已 Create 則 Show 之前 Create 了的 若你想每次都 Create 一個新的可刪除相關碼
miller680523
一般會員


發表:47
回覆:49
積分:19
註冊:2002-10-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-07-02 10:51:46 IP:61.218.xxx.xxx 未訂閱
引言:
引言: 如果我不作MDI要如何動態Creat form呢?????
記得要先uses Form1;
Application.CreateForm(TForm1, Form1);
try
  Form1.ShowModal;
finally
  Form1.Free;
end;
~小弟淺見,參考看看~ 謝謝你的回應,但小弟我看不太懂 Form1.ShowModal的意思是什麼,可否說明一下.如果有這個方法creat 的 form要如何讓他關閉呢???? 謝謝,感激不盡
channel
尊榮會員


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-07-02 11:08:54 IP:211.21.xxx.xxx 未訂閱
引言:
引言:
引言: 如果我不作MDI要如何動態Creat form呢?????
記得要先uses Form1;
Application.CreateForm(TForm1, Form1);
try
  Form1.ShowModal;
finally
  Form1.Free;
end;
~小弟淺見,參考看看~ 謝謝你的回應,但小弟我看不太懂 Form1.ShowModal的意思是什麼,可否說明一下.如果有這個方法creat 的 form要如何讓他關閉呢???? 謝謝,感激不盡
Form1.ShowModal:就是讓Form1顯示在螢幕上,只能在這個Form1作業,不能跳到其他的Form上作業。若要能在Form之間切換,則需要用MDIForm或Form1.Show的方式即可。 至於要關閉Form,例如您有一個關閉按鈕,只要在關閉按鈕的OnClick下Close;即可關閉此Form1。 ~小弟淺見,參考看看~
------
~小弟淺見,參考看看~
miller680523
一般會員


發表:47
回覆:49
積分:19
註冊:2002-10-28

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-07-02 11:27:37 IP:61.218.xxx.xxx 未訂閱
引言:
引言:
引言:
引言: 如果我不作MDI要如何動態Creat form呢?????
記得要先uses Form1;
Application.CreateForm(TForm1, Form1);
try
  Form1.ShowModal;
finally
  Form1.Free;
end;
~小弟淺見,參考看看~ 謝謝你的回應,但小弟我看不太懂 Form1.ShowModal的意思是什麼,可否說明一下.如果有這個方法creat 的 form要如何讓他關閉呢???? 謝謝,感激不盡
Form1.ShowModal:就是讓Form1顯示在螢幕上,只能在這個Form1作業,不能跳到其他的Form上作業。若要能在Form之間切換,則需要用MDIForm或Form1.Show的方式即可。 至於要關閉Form,例如您有一個關閉按鈕,只要在關閉按鈕的OnClick下Close;即可關閉此Form1。 ~小弟淺見,參考看看~ 你好,小弟還有一個問題 1)用這方法是不是會一直佔住記憶體. 2)用這方法是不是要先在project creat form呢??? 3)如果我希望click button在creat form要怎麼作呀?? 有以上三個問題,要勞煩你,解答謝謝.
channel
尊榮會員


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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-07-02 11:55:45 IP:211.21.xxx.xxx 未訂閱
引言: 你好,小弟還有一個問題 1)用這方法是不是會一直佔住記憶體. 2)用這方法是不是要先在project creat form呢??? 3)如果我希望click button在creat form要怎麼作呀?? 有以上三個問題,要勞煩你,解答謝謝.
1)Create一個物件,當然會佔住記憶體,當您執行到Close;時即會釋放記憶體。 2)是的,也就是先New一個Form,在Delphi Menu/Projcet/Options在Form頁次將您所New的Form從Auto-create forms移到Available Form。一般而言只會將MainForm留在Auto-create forms,其餘的Form幾乎會移到Available Form。這樣的好處是當應用程式一執行時,只有MainForm會被載入記憶體,其餘的Form則不會,當您有下Create時才會被載入記憶體。 3)
procedure TForm1.Button1Click(Sender: TObject);
var
  aForm: TForm;
begin
  aForm := TForm.Create(nil);
  try
    aForm.Height := 100;
    aForm.Width := 100;
    aForm.Position := poScreenCenter;
    aForm.ShowModal;
  finally
    aForm.Free;
  end;
end;
不過小弟覺得,用上述的方式Create Form比較不方便,因為您若要在Form上放元件的話也就是要作視覺化的設計,必須要去給定每個元件的Height、Left、Top、Width…等。 ~小弟淺見,參考看看~
------
~小弟淺見,參考看看~
miller680523
一般會員


發表:47
回覆:49
積分:19
註冊:2002-10-28

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-07-02 12:14:32 IP:61.218.xxx.xxx 未訂閱
謝謝你的回應,我還有一點不解如果移到Available Form要如何呼叫? 呼叫同時會引發那些物件呢??? 謝謝
channel
尊榮會員


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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-07-02 12:32:28 IP:211.21.xxx.xxx 未訂閱
引言: 謝謝你的回應,我還有一點不解如果移到Available Form要如何呼叫? 呼叫同時會引發那些物件呢??? 謝謝
就是用:
Application.CreateForm(TForm1, Form1);
try
  Form1.ShowModal;
finally
  Form1.Free;
end;
小弟再說清楚一點: Auto-create forms:Delphi幫您作Application.CreateForm(TForm1, Form1);的動作,即程式一執行就將Form1先載入記憶體,至於顯現則由您來決定何時顯現,即下Form1.ShowModal;。 Available Form:您必須自行作Application.CreateForm(TForm1, Form1);的動作,將Form1先載入記憶體。由自已決定何時將Form1載入記憶體。 呼叫時會引發在Form之中的所有物件吧! ~小弟淺見,參考看看~
------
~小弟淺見,參考看看~
miller680523
一般會員


發表:47
回覆:49
積分:19
註冊:2002-10-28

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-07-02 13:35:45 IP:61.218.xxx.xxx 未訂閱
引言:
引言: 謝謝你的回應,我還有一點不解如果移到Available Form要如何呼叫? 呼叫同時會引發那些物件呢??? 謝謝
就是用:
Application.CreateForm(TForm1, Form1);
try
  Form1.ShowModal;
finally
  Form1.Free;
end;
小弟再說清楚一點: Auto-create forms:Delphi幫您作Application.CreateForm(TForm1, Form1);的動作,即程式一執行就將Form1先載入記憶體,至於顯現則由您來決定何時顯現,即下Form1.ShowModal;。 Available Form:您必須自行作Application.CreateForm(TForm1, Form1);的動作,將Form1先載入記憶體。由自已決定何時將Form1載入記憶體。 呼叫時會引發在Form之中的所有物件吧! ~小弟淺見,參考看看~
不好意思,第二個問題我打錯了,因該是在載入form1時會觸發那些event???謝謝你的解答.
channel
尊榮會員


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

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-07-02 13:51:21 IP:211.21.xxx.xxx 未訂閱
引言:
引言:
引言: 謝謝你的回應,我還有一點不解如果移到Available Form要如何呼叫? 呼叫同時會引發那些物件呢??? 謝謝
就是用:
Application.CreateForm(TForm1, Form1);
try
  Form1.ShowModal;
finally
  Form1.Free;
end;
小弟再說清楚一點: Auto-create forms:Delphi幫您作Application.CreateForm(TForm1, Form1);的動作,即程式一執行就將Form1先載入記憶體,至於顯現則由您來決定何時顯現,即下Form1.ShowModal;。 Available Form:您必須自行作Application.CreateForm(TForm1, Form1);的動作,將Form1先載入記憶體。由自已決定何時將Form1載入記憶體。 呼叫時會引發在Form之中的所有物件吧! ~小弟淺見,參考看看~
不好意思,第二個問題我打錯了,因該是在載入form1時會觸發那些event???謝謝你的解答.
會觸發三個Event,依序是FormCreate->FormShow->FormActivate ~小弟淺見,參看看~
------
~小弟淺見,參考看看~
miller680523
一般會員


發表:47
回覆:49
積分:19
註冊:2002-10-28

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-07-02 15:44:09 IP:61.218.xxx.xxx 未訂閱
那我想請問一下,FormShow是只要form顯示時就一直接續觸發,還是只會觸發一次呢????謝謝
channel
尊榮會員


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

發送簡訊給我
#14 引用回覆 回覆 發表時間:2003-07-02 16:19:15 IP:211.21.xxx.xxx 未訂閱
引言: 那我想請問一下,FormShow是只要form顯示時就一直接續觸發,還是只會觸發一次呢????謝謝
其實要判斷事件有沒有被觸發,例如FormShow,只要在事件打上ShowMessage('FormShow');若有觸發到即會彈出訊息,就可知道其觸發時機。
  • FormCreate:只會在遇到Form.Cretae的指令時才會觸發一次。
  • FormShow:只會在遇到Form.Show;或Form.ShowModal的指令時才觸發一次,不可能form顯示時就一直接續觸發。
  • FormActivate:Form與Form之間的轉換就會觸發,比例只要焦點由Form1轉到Form2時,會觸發到Form2.FormActivate事件,也就是只要有轉換Form即會觸發到FormActivate。
~小弟淺見,參考看看~
------
~小弟淺見,參考看看~
miller680523
一般會員


發表:47
回覆:49
積分:19
註冊:2002-10-28

發送簡訊給我
#15 引用回覆 回覆 發表時間:2003-07-02 20:54:21 IP:203.204.xxx.xxx 未訂閱
很感謝你的解答,讓我受益良多
系統時間:2024-05-04 10:30:19
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!