Showmodal與Show的區別

轉自:http://www.cnblogs.com/bytutu/archive/2011/12/01/2269998.html

Showmodal是個函數,Show是個過程


1.Showmodal:

概念:

當你調用一個窗口用SHOWMODAL時,當這個窗口顯示出來後,程序不會繼續自己執行,而是根據你對這個窗口的操作來執行,只有關閉了這個窗口後纔會執行。

屬性:

FormStyle改爲fsNormal,visible改爲false

2.Show:

概念:

SHOW不同,當窗口顯示後,代碼一樣往下執行的,即程序會繼續執行。

屬性:

FormStyle改爲fsMDIChild,visible改爲True




消息窗體ShowModal()顯示時,主窗體是能夠處理下一條消息的。使用ShowModal()顯示時,其它的窗體
只是不接受用戶的操作而已。

---------------------------------------------------------------

綜上所述,另外,Form ShowModal() 時相當於執行了一個 Call ,也就是 ShowModal() 以下的代碼在 ShowModal() 出的窗體被關閉前是不會被執行的,但並不影響父窗體的消息循環,這也正是與單一 Show() 的區別!




ShowModal 出來的對話框必須關掉才能處理其他窗體.也就是當前焦點不能轉移到其他的窗體上,除非關掉.
Show 出來的對話框則可以將當前焦點轉移到其他界面上.



Create(**)這個是要看具體的哪個函數了,一般來說Delphi自帶的那幾個控件,它是來用指定它的屬主的,如果置爲nil的時候,這個控件是自操作的,也就是說釋放什麼的,你要自己管.如果你設了一個屬主後,這個釋放你就不用管了,它的屬主被釋放的時候,它自己也同時會被釋放.



Delphi 裏 Show出來的一般是子窗體,對話框叫非模式對話框,ShowModal 出來的是主窗體,叫模式對話框.

兩種窗體的區別主要是模態和非模態的.無論在哪種開發什麼,應該都是這樣的,甚至連網頁打開的窗體也是一樣的.




ShowModal與Show的區別

在用delphi開發時,碰到這樣的問題:fomr2.ShowModal出現cannot make a visible window modal錯誤,但fomr2.Show則正常,爲什麼?

因爲ShowModal與Show是不同的。

fomr2.ShowModal時,要求Form2.Visiable=False,假使你設置爲Visiable=True就會產生錯誤:

ShowModal函數定義:

function TCustomForm.ShowModal: Integer;

var

WindowList: Pointer;

SaveFocusCount: Integer;

SaveCursor: TCursor;

SaveCount: Integer;

ActiveWindow: HWnd;

begin

CancelDrag;

if Visible //Form.visible=True.

or not Enabled or (fsModal in FFormState) or

(FormStyle = fsMDIChild) then

raise EInvalidOperation.Create(SCannotShowModal); //產生一個raise,出錯誤。

其中 SCannotShowModal = 'Cannot make a visible window modal';

...

end


fomr2.Show時,要求Form2.Visiable=True或False都不會錯。


Show函數定義:

procedure TCustomForm.Show;

begin

Visible := True;

BringToFront;

end;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章