關於 ShowModal 的問題 |
尚未結案
|
malon7
一般會員 發表:1 回覆:1 積分:0 註冊:2005-11-01 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
引言: 各位前輩: 小弟最近碰到一個問題 現在是有三個form a,b,c , 當a叫 c showmodal的時候 ,a和b的滑鼠控制權都被c拿走了,我是希望這個時候滑鼠還可以對b做運作.... 因為a還要等c輸入資料才能運作,所以a要停住...不能讓c用show顯示然後把a給disable 之前一直以為showmodal是可以指定主視窗的,可是看來他是把其他視窗所有的的滑鼠訊息攔住了,還是這種情形不能用showmodal做?當然, showmodal是唯一性的, 依你的例子, 有一個方法解決, 就是 a, b, c 都是用 show 方式, 至於 c 出現後如何"鎖住", 其實很簡單, a.enabled:= False 就可以了, 然後在 c 的 onclose中再解開 a.enabled:= True, 如此 b, c 都可以做切換使用, 但要注意的是, 如果 c 意外當機關閉, 很可能就會造成 a 永遠無法執行, 所以建議 a 最好不要是main form, 因為這樣可能造成程式死機! |
malon7
一般會員 發表:1 回覆:1 積分:0 註冊:2005-11-01 發送簡訊給我 |
謝謝 P.D. 大大的回應
使用設定enable的切換來解決是很好的方案
但是因為c是要做為輸入各式資料的dialog,
若按照在onclose中切換enabe的方法, 這樣有關這些資料處理的部分只能寫在c的onclose中了,這樣整個程式碼會顯得很散 ======================如果用 showModal的方式========================== -------------formA 的檔案------------------
procedure TFormA.fun1()
begin
if formC.ShowModal = mrOK then
begin
//處理由formc輸入的資料
end;
end;
procedure TFormA.fun2()
begin
if formC.ShowModal = mrOK then
begin
//處理由formc輸入的資料
end;
end;
-----------------------------------
這樣處理資料的動作都可以在forma的檔案中完成 ======================如果用 show切換enable的方式==================== -------------formA 的檔案------------------
procedure TFormA.fun1()
begin
formC.state := 1 ; //告訴c是fun1叫他的
formC.Show;
end;
procedure TFormA.fun2()
begin
formC.state := 2 ; //告訴c是fun2叫他的
formC.Show;
end;
------------formC的檔案---------------- procedure TformC.FormShow(Sender: TObject);
begin
formA.Enabled := false;
end; procedure TformC.FormClose(Sender: TObject; var Action: TCloseAction);
begin
formA.Enabled := true;
if state = 1 then //func1呼叫c的情況下
begin
//對輸入的資料作處理
end
else if state= 2 then //func2呼叫c的情況下
begin
//對輸入的資料作處理
end;
end;
-----------------------------------
由於使用show來顯示
處理資料的動作就必須在formc的檔案中才能操作 ==============================================================
若使用show來顯示,明明是要輸入給formA的資料就必須在formC處理,如果showmodal可以用,整個資料處理就都可以在formA編寫....不知還有其他替代showmodal都方案嗎?
|
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
我並未深入瞭解您的問題。 直覺認為若不使 B 被 Disable 狀態。
(因為任何 Showmodal 含 application.MessageBox 會使得全部視窗 Disable。 禁止讓 B 被Disable 我的作法是:
type TForm1 = class(TForm) .. private Procedure WMENABLE (Var Msg:TWMEnable);Message WM_ENABLE ; public ... Procedure TForm1.WMENABLE (Var Msg:TWMEnable); begin if Not Msg.Enabled then EnableWindow(Handle,True); end;參考 ~~~~~~~~~~~ 難得聰明,常常糊塗。 ~~~~~~~~~~~ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |