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

無法在 MDI 下使用 ShowModal ?

答題得分者是:hagar
xBug
一般會員


發表:27
回覆:17
積分:8
註冊:2003-06-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-08-03 23:37:17 IP:61.219.xxx.xxx 未訂閱
我在撰寫 MDI Application,需製作一 LOGIN 畫面,可是當我使用 ShowModal 時卻出現 『Cannot make a visible window Modal』的錯誤訊息。 請問,TForm.ShowModal 的方法是不能在 MDI 模式下使用嗎? 是否有其他方式可替代? -------------------------------- 給我一個支點,我可以撐起整個地球
hagar
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-08-03 23:49:17 IP:202.39.xxx.xxx 未訂閱
在要 ShowModal 之前, 那個要 ShowModal 的 TForm 的 Visible 屬性設為 False 試試. --- --<-<-<@
xBug
一般會員


發表:27
回覆:17
積分:8
註冊:2003-06-10

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-08-04 00:07:45 IP:61.219.xxx.xxx 未訂閱
應該不是 TForm.Visible 的問題,因為該錯誤訊息出現後,Form 仍可正常出現,只不過是以 TForm.Show 的方式出現。    我將程式碼做了修改如下,依舊是不行。
  ADM001 := TADM001.Create(Owner);
  ADM001.Visible := True;
  ADM001.ShowModal;
我試過改變 TForm.FormStyle 屬性,無論是 fsMDIChild 或是 fsNormal 都會出現一樣的錯誤訊息。 可以在幫忙想想其他原因或替代方法嗎? -------------------------------- 給我一個支點,我可以撐起整個地球
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-08-04 00:16:42 IP:61.66.xxx.xxx 未訂閱
引言: 應該不是 TForm.Visible 的問題,因為該錯誤訊息出現後,Form 仍可正常出現,只不過是以 TForm.Show 的方式出現。 我將程式碼做了修改如下,依舊是不行。
  ADM001 := TADM001.Create(Owner);
  ADM001.Visible := True;
  ADM001.ShowModal;
我試過改變 TForm.FormStyle 屬性,無論是 fsMDIChild 或是 fsNormal 都會出現一樣的錯誤訊息。 可以在幫忙想想其他原因或替代方法嗎? -------------------------------- 給我一個支點,我可以撐起整個地球
我之前的經驗, Delphi被設定成MDI之後, 再去改變formType, 似乎會有很多問題, 所以建議你重新拉一個標準FORM(不要MDI)來做LOGIN會比較快! 另外, MDI本身就是屬多執行的FORM, 它必須符合非獨佔性功能, 否則幹嘛叫MDI, 因此使用ShowModal就是不合邏輯的!
ha0009
版主


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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-08-04 00:30:55 IP:61.56.xxx.xxx 未訂閱
你好: MDI Client 都是依附在 MDI Form 上顯示的,所以你不能使用 ShowModal 讓 Client  取得主控權。但你可以呼叫一個 SDI Form 取得整個程式的主控權。    
xBug
一般會員


發表:27
回覆:17
積分:8
註冊:2003-06-10

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-08-04 00:54:11 IP:61.219.xxx.xxx 未訂閱
的確,在 MDI Form Application 中使用 TForm.ShowModal 感覺上像是要搶走 MDI 中 MainForm 的主控權,可是我覺得奇怪的是 ShowMessage() 函數的對話框是如何做到的? 事實上,我也是希望 Login 的畫面可以暫時性的 Halt 住其他 Form,與 ShowMessage 函數所產生的畫面是一樣的效果。 ha009 大大: 不好意思、小弟才疏學淺,您所謂的 SDI Form 是指將 FormStyle 屬性設為 fsNormal 嗎?小弟有試著改變 TForm.FormStyle 屬性為 fsNormal,但遇到 TForm.ShowModal 時仍舊會出現此錯誤訊息ㄝ,是不是我還漏漏了什麼東西? -------------------------------- 給我一個支點,我可以撐起整個地球
xBug
一般會員


發表:27
回覆:17
積分:8
註冊:2003-06-10

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-08-04 01:26:53 IP:61.219.xxx.xxx 未訂閱
Sorry,Hagar 大大所提供的方式是可行的,是我看錯了。    將程式碼改為如下,確實是可以正常執行 TForm.ShowModal 的。
ADM001 := TADM001.Create(Owner);
ADM001.Visible := False;
ADM001.ShowModal;
感謝大家的幫忙。 -------------------------------- 給我一個支點,我可以撐起整個地球 發表人 - xBug 於 2003/08/04 02:30:32
ha0009
版主


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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-08-04 02:17:01 IP:61.56.xxx.xxx 未訂閱
你好: 我想你一定是搞錯了,因為 MDI 的架構是不可能使用 ShowModal 的。 你可以看看原始碼
  if Visible or not Enabled or (fsModal in FFormState) or (FormStyle = fsMDIChild) then
    raise EInvalidOperation.Create(SCannotShowModal);
視窗類型有下列幾種,大略介紹 fsNormal SDI Form,可使用 ShowModal。 fsMDIChild,fsMDIForm MDI Form,不允許使用 ShowModal。 fsStayOnTop 永遠在應用程式的最上層,使用前需先 hide。
系統時間:2024-05-18 22:40:33
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!