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

Form問題

尚未結案
nick167
中階會員


發表:86
回覆:133
積分:53
註冊:2003-02-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-03-21 12:43:45 IP:61.228.xxx.xxx 未訂閱
Form2:= TForm2.create(self); Form2.showmodal; 由Form1 至Form2 之後在回form1時,如何釋放momey是(form2.close ) or(form2.free) or (form1.release) Form2:= TForm2.create(self) 與 Form2:= TForm2.create(Appliction) Form2:=Form2.Create(AOwner) 又有何不同?
Justmade
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-03-21 12:59:56 IP:218.16.xxx.xxx 未訂閱
引言: Form2:= TForm2.create(self); Form2.showmodal; 由Form1 至Form2 之後在回form1時,如何釋放momey是(form2.close ) or(form2.free) or (form1.release)
最方便安全的方法 :
with TForm2.create(self) do
try
  ShowModel;
  ....
finally // 最後
  Free; // 釋放
end;
引言: Form2:= TForm2.create(self) 與 Form2:= TForm2.create(Appliction) Form2:=Form2.Create(AOwner) 又有何不同?
self 即是指定 Form1 是 Form2 的 Owner Application 即是指定 Application 是 Form2 的 Owner AOwner 即是指定 Form1 的 Owner (通常是 Application) 是 Form2 的 Owner 除非你要在 Form2 使用 Owner 的東西,否則實作上沒甚麼分別。
nick167
中階會員


發表:86
回覆:133
積分:53
註冊:2003-02-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-03-22 15:53:08 IP:61.228.xxx.xxx 未訂閱
引言: 我有test 還是有點問題? 有2個mainform,mainform2 當mainform 為主登入form ,登入ok 進行下列: MainForm2:= TMainForm2.Create(self); MainForm2.showmodal; MainForm2.Free; // 請問free是釋放momey,如果直接 mainform2.close是否也把momey free掉ㄋ? /// MainForm.Close; // 當mainform2 exit 時才會關閉 mainform 可是進入mainform2時畫面仍保有mainform,請問如何當mainform 進入 mainform2時,關閉mainform,mainform2為主控form,希望畫面不需有mainform 可否行?謝謝
Justmade
版主


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-03-22 16:55:00 IP:61.10.xxx.xxx 未訂閱
引言: 請問free是釋放momey,如果直接mainform2.close是否也把momey free掉ㄋ?
Close 預計是 Hide 了該 Form, 你也可在 oncloseQuery 設定成用 Free,不過直接用 Free 不是更方便嗎?
引言: 可是進入mainform2時畫面仍保有mainform,請問如何當mainform 進入 mainform2時,關閉mainform,mainform2為主控form,希望畫面不需有mainform 可否行?
MainForm 一 Close Application 便完了你可以先 Hide MainForm 再 Show MainForm2。
  Hide;
  MainForm2.ShowModel;
  MainForm2.Free;
  Application.Terminate;
nick167
中階會員


發表:86
回覆:133
積分:53
註冊:2003-02-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-03-22 19:44:44 IP:61.228.xxx.xxx 未訂閱
引言: Close 預計是 Hide 了該 Form, 你也可在 oncloseQuery 設定成用 Free,不過直接用 Free 不是更方便嗎? procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin Application.Terminate; MainForm.Free; end; 再delphi 執行後,無法順利返回delphi設計程式,好像當掉,需要用滑鼠右鍵點 開始列上的 -> delphi 才回delphi 設計畫面,不知為何? << 可是離開delphi後,在點 main.exe 直run 不會有上述狀況 >> begin ADOQuery1.Locate('user',........ if not Adoquery.eof then begin mainform.Hide; MainForm2.ShowModel; MainForm2.Free; Application.Terminate // 出現 (cannot focus disabled or invisible windows ) error message end else login_cnt:=login_cnt 1; ....... end; 我從書籍看有關form,還是不解,才在此求救前輩指點,非常謝謝Justmade 在網站一一為其它他人解答,也辛苦你,助人為快樂之本 ,願科技帶給Justmade美好未來,Thank [/code]
發表人 - nick167 於 2003/03/22 19:46:38
Justmade
版主


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-03-22 20:16:02 IP:61.10.xxx.xxx 未訂閱
1. 對不起,一時記錯了,是 onClose : procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; // 設定 close 的動作是 Free 而非 Hide end; 不過若你像我提議的 Code 直接用 Form.Free 就不用設這個了 2. mainform.Hide; MainForm2.ShowModel; MainForm2.Free; mainform.Show; 就會在 MainForm2 關掉後回到 MainForm1 Application.Terminate; // 這是立即關掉整個程式,若不需要可不用。 3. "cannot focus disabled or invisible windows" 可能你有些程式碼在程式關時會嘗試取得 focus ,但由於該時 MainForm1 hide 了,所以出現該 Error。上面加回了 MainForm.Show; 應不會再出現這個了。
nick167
中階會員


發表:86
回覆:133
積分:53
註冊:2003-02-12

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-03-24 10:33:07 IP:61.228.xxx.xxx 未訂閱
引言: 謝謝Justmade指導,讓我對form有更一步瞭解,謝謝Justmade
系統時間:2024-11-22 22:50:16
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!