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

如何實做 SDI form ?

尚未結案
such
一般會員


發表:15
回覆:15
積分:6
註冊:2003-06-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-09-18 14:27:11 IP:220.229.xxx.xxx 未訂閱
假設有兩個form ,一個是主要 , 另一個是次要 ,想要以showmodal模式去呼叫次要視窗,要如何用SDI模式去實做呢?
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-09-18 16:18:17 IP:203.204.xxx.xxx 未訂閱
引言: 假設有兩個form ,一個是主要 , 另一個是次要 ,想要以showmodal模式去呼叫次要視窗,要如何用SDI模式去實做呢?
such 你好 Delphi IDE環境中,預設的就是SDI的呀,你只要不特別去設定FormStyle為fsMDIForm或fsMDIChild即可(或者設為fsNormal即為SDI Form),至於次要視窗的呼叫,則視須要以Show或ShowModal呼叫皆可。 _______________________________________ 深藍的魚,祝您好運..........連連
such
一般會員


發表:15
回覆:15
積分:6
註冊:2003-06-25

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-09-20 09:13:47 IP:220.229.xxx.xxx 未訂閱
原來是我沒搞清楚呀^^~~那如果要讓 SDI form 顯現的方式跟 MDI form 一樣 , 卻又可以使用 showmodal 的方式 , 要如何實作呢??
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-09-20 15:26:19 IP:211.20.xxx.xxx 未訂閱
such 你好    MDI Form:多重文件視窗介面,係指整個應用系統使用一個主視窗,而所有的子視窗的活動範圍皆限制在主視窗的顯示範圍內。    SDI Form:單一文件視窗介面,係指整個應用系統所有的視皆是獨立的顯示範圍。    不管使用MDI Form或SDI Form,對於子Form的顯示,你皆可以自行決定用Show或ShowModal的方法。所以呢,你希望有ShowModal的功能,那就用Form.ShowModal;吧。    _______________________________________ 深藍的魚,祝您好運..........連連
such
一般會員


發表:15
回覆:15
積分:6
註冊:2003-06-25

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-09-20 17:46:58 IP:220.229.xxx.xxx 未訂閱
我在 mdi form 使用了 showmodal , 出現了錯誤訊息 Cannot make a visible window modal. ?_?..
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-09-20 19:07:26 IP:211.20.xxx.xxx 未訂閱
引言: 我在 mdi form 使用了 showmodal , 出現了錯誤訊息 Cannot make a visible window modal. ?_?..
such 你好 由於MDI Form的Child Form 是一個多工狀態,由ChildForm1中使用ShowModal某個Form 之後,是無法點選到ChildForm1的,必須關閉ModalForm之後才可以點選到ChildForm1,但是卻可以點選到ChildForm2,就在此時於ChildForm2中又再ShowModal 相同的ModalForm,就會發生你說的狀況,一般來說這個ModalForm必須不同的ChildForm分別建立個別使用的ModalForm才行喔! 你可以在ChildForm的定義中宣告要ShowModal的Form,各個ChildForm使用各別的ShowModalForm。
type
....
  TChildForm = Class(TForm)
    ....
  Private
    MsgForm : TMessageForm; // 定義在另一個單元檔,供ChildForm以ShowModal使用的Form
    ....
  End;
....    在某個程序中
Procedure TChildForm.....
Begin
  If Not Assigned(MsgForm) Then 
    MsgForm := TMessageForm.Create(Self);
  MsgForm.ShowModal;
  或
  If MsgForm.ShowModal = mrOK Then 
    // 按OK後要做的事
  End;
End;
PS:你前面一直說SDI如何使用ShowModal,突然又說MDI Form 使用ShowModal有問題,不知你真正的問題在那裏? _______________________________________ <>深藍的魚,祝您好運..........連連 發表人 -
such
一般會員


發表:15
回覆:15
積分:6
註冊:2003-06-25

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-09-21 00:13:50 IP:61.62.xxx.xxx 未訂閱
還不是很瞭解? 上面是在 fsMDIForm 要用 showmodal 把fsMDIChild 給呼叫出來才出現的錯誤訊息....
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-09-21 01:03:43 IP:203.204.xxx.xxx 未訂閱
such 你好
  一般子Form好像很少用ShowModal的方式來顯示的耶!就算是用ShowModal好
像也沒什麼差別(沒這樣使用過);以下程式只是避開執行的錯誤,你試試看
           Form2.FormStyle = fsChildForm;
----------------------------------------------------------
  If Not Assigned(Form2) Then Begin  // 當未建立
    Form2 := TForm2.Create(Self);    // 則動態建立
    Form2.ShowModal;
  End Else If Form2.WindowState = wsMinimized Then Begin // 如果是最小化
    Form2.WindowState := wsNormal ; //予以還原
  End;
_______________________________________ 深藍的魚,祝您好運..........連連
系統時間:2024-06-27 15:40:09
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!