急問--有關MDI child 的關閉問題 |
答題得分者是:ha0009
|
dedo
一般會員 發表:13 回覆:16 積分:5 註冊:2003-11-21 發送簡訊給我 |
請問各位
若我設計好了一些Form,設為 fsMDIchild 型態,並於MDI裡點選某按鈕時去呼叫建立這些Form,但是,卻發生這些child Form 的視窗 "x" 按鈕關不掉這些子視窗了,而變成最小化....
我知道這好像是MDI原本的問題,需用程式解決,我在某份文件裡看到如下:
As you know by now, when you try to close an MDI child form, the form only gets minimized. You are however, able to set the Action parameter of the OnClose event method to caFree to really close it; or even set to caNone - to "mark" that the form cannot be closed. procedure TMDIChild.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caNone;
end; 但我不知道要怎麼把這個程序寫進程式裡..我程式裡呼叫Form的方式如下:
寫好一個叫Form1的
(1)先 use
(2)若點選某按鈕時,再 Application.CreateForm(TForm1,Form1); 對不起,我是新手~~~感激大伙的幫忙
|
ha0009
版主 發表:16 回覆:507 積分:639 註冊:2002-03-16 發送簡訊給我 |
|
dedo
一般會員 發表:13 回覆:16 積分:5 註冊:2003-11-21 發送簡訊給我 |
你好
我在Form1的onClose事件裡加上FormClose程序如下:
procedure TF1Form.FormClose(Sender:TObject;var Action:TCloseAction);
begin
Action:=caFree;
end; 則在MDI第一次點按鈕開啟Form1後,的確按"x"已可關掉,但第二次再點這個按鈕時,卻出現如下錯誤訊息:
Project MDIAPP.exe raised exception class EAccessViolation with message 'Access violation at address 004034C0 in module 'MDIAPP.exe'. Read of address 00000027'. Proccess stopped. Use Step or Run to continue. 然後程式就不能再run了,得全部關掉重開...為什麼會這樣
|
ha0009
版主 發表:16 回覆:507 積分:639 註冊:2002-03-16 發送簡訊給我 |
你好: caFree 是將視窗釋放,既然釋放,你就必須重新 Create 一個實體。所以你可以做下列的處理。 1. 在 OnClose 中 procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := caFree; Form2 := nil; end; 2. 在呼叫的按鈕中 procedure TForm1.Button1Click(Sender: TObject); begin if Form2 = nil then begin Form2 := TForm2.Create(Self); end; Form2.Show; end; |
dedo
一般會員 發表:13 回覆:16 積分:5 註冊:2003-11-21 發送簡訊給我 |
|
ha0009
版主 發表:16 回覆:507 積分:639 註冊:2002-03-16 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |