轉自: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;