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

MDI Form與TFormStyle的關係

答題得分者是:seaturn99
airwei
一般會員


發表:19
回覆:7
積分:5
註冊:2002-12-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-07-24 21:06:42 IP:220.134.xxx.xxx 未訂閱
請問我開了一個專案mainform TFormStyle設定為fsMDIForm ,再new一個form Form1,TFormStyle設定為fsMDIChild, 我在mainform某button onclick下寫 begin Form1:=TForm1.create(self); // Form1.show; end; 雖然form1.show 被mark起來,但是TForm1.create 就會一併觸發form1.onshow了 不知道為什麼? 除非將Form1,TFormStyle設定為fsNormal.就不會一併觸發form1.onshow, 請問是我哪裡設定錯了嗎?
seaturn99
版主


發表:69
回覆:427
積分:214
註冊:2003-08-25

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-07-25 00:25:55 IP:211.76.xxx.xxx 未訂閱
引言: 請問我開了一個專案mainform TFormStyle設定為fsMDIForm ,再new一個form Form1,TFormStyle設定為fsMDIChild, 我在mainform某button onclick下寫 begin Form1:=TForm1.create(self); // Form1.show; end; 雖然form1.show 被mark起來,但是TForm1.create 就會一併觸發form1.onshow了 不知道為什麼? 除非將Form1,TFormStyle設定為fsNormal.就不會一併觸發form1.onshow, 請問是我哪裡設定錯了嗎?
airwei 您好 : 我試的結果兩個都會觸發 OnShow ,是否你有做另外的動作造成的?? ---- 我只會兩件事,這也不會,那也不會 眼見不一定為真 ----
airwei
一般會員


發表:19
回覆:7
積分:5
註冊:2002-12-20

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-07-25 10:05:01 IP:218.175.xxx.xxx 未訂閱
引言: airwei 您好 : 我試的結果兩個都會觸發 OnShow ,是否你有做另外的動作造成的?? ---- 我只會兩件事,這也不會,那也不會 眼見不一定為真 ----
請問您有將form1.show; Remark起來嗎? 若是沒有的話,單單form1:=Tform1.create(self);就能觸發onshow event是很奇怪的. 一般不是要下form1.show;這樣的指令才能觸發嗎?為什麼create就會觸發了,這是我不解的地方 還是我觀念上有誤 請指教
seaturn99
版主


發表:69
回覆:427
積分:214
註冊:2003-08-25

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-07-25 14:01:41 IP:211.76.xxx.xxx 未訂閱
引言:
引言: airwei 您好 : 我試的結果兩個都會觸發 OnShow ,是否你有做另外的動作造成的?? ---- 我只會兩件事,這也不會,那也不會 眼見不一定為真 ----
請問您有將form1.show; Remark起來嗎? 若是沒有的話,單單form1:=Tform1.create(self);就能觸發onshow event是很奇怪的. 一般不是要下form1.show;這樣的指令才能觸發嗎?為什麼create就會觸發了,這是我不解的地方 還是我觀念上有誤 請指教
airwei 您好 : (我有將 Form1.show mark 起來 ...) 您可以試看看把 Form1.Visible 設成 false .. 看不是視窗還是會觸發 OnShow ,而 Show 只單純把 Form Visible := true,然後帶到前景顯示而已 從 Source Code 中可以看出, OnShow 觸發時機為接收到 CM_SHOWINGCHANGED message, 與 show 並無直接關聯 (您可以試看看,將 Form1.Visible := false,這樣就不會觸發 OnShow Event 了) 我想會造成你觀察上的失誤,應該是 Form1 ,Visible 的初始值您設成 false 吧?? 節錄 Online Help : Occurs when the form is shown (that is, when its Visible property is set to true). Delphi syntax: property OnShow: TNotifyEvent; C syntax: __property Classes::TNotifyEvent OnShow = {read=FOnShow, write=FOnShow, stored =IsForm}; Description Use OnShow to perform special processing when the form is shown (that is, when the form? Visible property is set to true). 節錄 VCL Source ..
procedure TCustomForm.DoShow;
begin
  if Assigned(FOnShow) then FOnShow(Self);
end;    procedure TCustomForm.Show;
begin
  Visible := True;
  BringToFront;
end;    // 使用 DoShow 的 WndProc
procedure CMShowingChanged(var Message: TMessage); message CM_SHOWINGCHANGED;
---- 我只會兩件事,這也不會,那也不會 眼見不一定為真 ----
airwei
一般會員


發表:19
回覆:7
積分:5
註冊:2002-12-20

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-07-26 00:33:27 IP:220.134.xxx.xxx 未訂閱
謝謝!! 是這樣沒錯,真感謝!! 但是有件很奇怪的事情就是,若我先將TFormStyle設定為fsMDIChild,這樣再去設visible為false,delphi會彈出Cannot hide an MDI Child Form的錯誤訊息,我之前也有猜過是這樣,但是錯誤讓我以為應該不是這裡的問題,經你一說, 我先將TFormStyle設定為fsNormal,再去設visible為false,再將TFormStyle設定為fsMDIChild,就可以了. 這是為什麼?
airwei
一般會員


發表:19
回覆:7
積分:5
註冊:2002-12-20

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-07-26 00:44:29 IP:220.134.xxx.xxx 未訂閱
抱歉!! 剛剛最後一個步驟沒有注意看,就是將TFormStyle設定為fsMDIChild後 visible會自動設回true, 將TFormStyle設定為fsNormal,visible才能設為false 所以問題還是回到原點, 為何TFormStyle設定為fsMDIChild,自動會將visible會自動設回true, 執行程式後導致create MDIChildform的時候就自動觸發onshow Event了. 那麼寫form1.show; 是否無意義!!
seaturn99
版主


發表:69
回覆:427
積分:214
註冊:2003-08-25

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-07-26 23:11:42 IP:211.76.xxx.xxx 未訂閱
引言: 抱歉!! 剛剛最後一個步驟沒有注意看,就是將TFormStyle設定為fsMDIChild後 visible會自動設回true, 將TFormStyle設定為fsNormal,visible才能設為false 所以問題還是回到原點, 為何TFormStyle設定為fsMDIChild,自動會將visible會自動設回true, 執行程式後導致create MDIChildform的時候就自動觸發onshow Event了. 那麼寫form1.show; 是否無意義!!
這牽扯到 MDI Form Design Time 的設計邏輯了,不過這段 Source Code 我沒有去 trace ,所以不敢亂解釋 .. (我猜應該是,MDI Child 被設計成,只能被 Create 與 Destory,只有在 MDI Form 中最小化狀態,而無 Hide 的狀態 ..) 仔細又看了一下,很抱歉有一點說錯了, OnShow 與 Show 是有關聯的,關鍵在於 TForm.visible ,若由 visible := false 切換至 visible := ture (Show)時,會觸發 OnShow Event,若一直是 visible := ture ,自然不會觸發,這裡有一個 message 的巧妙設計 .. visible := ture ,那 Show 只剩下 BringToFront 的功能 .. 只是單純是想讓 OnShow Event 觸發,那 Show 的確不必要寫的... ---- 我只會兩件事,這也不會,那也不會 眼見不一定為真 ----
系統時間:2024-05-03 10:45:16
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!