2011-10-12 90 views
4

我想創建一個簡單的應用程序,顯示兩個窗體。第一個,當單擊底部時,主窗體應該能夠顯示一個彈出的窗體窗口。第二種形式顯示必須禁用主窗體的功能。在德爾福阻止父窗體窗口

請爲此示例顯示一個簡單的代碼。

+0

請不要關閉這個問題。這是完全清楚的OP是在問什麼。正如顯而易見的upvotes和6個答案。 – Johan

回答

7

嘗試:

procedure ShowModalForm() 
var 
    newForm: TNewForm; 
begin 
    newForm := TNewForm.Create(nil); 
    try 
    newForm.ShowModal; 
    finally 
    newForm.Free; 
    end; 
end; 
+1

@David:啊啊啊,今天我們_meeting_,你不覺得被愛:)你有我的偉大的偉大的尊重! ;) – Marco

+0

@Marco:看到我對Shamballa的評論。我不會低估,但我不能贊成,因爲代碼寫得不好。 (沒有變量聲明,當應用程序不需要分配'Application'作爲所有者時,模式形式可能會立即釋放,並且不會嘗試......最終確保它在使用後被釋放。)爲明顯的初學者設置的不好的示例。 :) –

+0

@KenWhite:你是對的,我請你原諒我的不好的例子。我希望現在好一點。謝謝:) – Marco

4

實現此目的的最簡單方法是以模態方式顯示您的表單。調用ShowModal來顯示錶單並且主窗體將不會被禁用並且無法接收任何輸入。

4

你可以創建它是這樣的另一種方式。

procedure TForm1.btnCreateFormClick(Sender: TObject); 
var 
    YourForm : TYourForm; 
begin 
    YourForm := TYourForm.Create(nil); 
    try 
    YourForm.ShowModal; 
    finally 
    YourForm.Free; 
    end; 
end; 
+1

如果你做了兩件事,我會贊成這個:1)聲明'YourForm'是一個局部變量(在'procedure'和'begin'之間),2)將'FreeAndNil'改爲'YourForm.Free' - 如果' YourForm'是一個局部變量,不需要釋放它,因爲它超出了範圍,不能在其他地方再次使用。如果你用相同的程序顯示它,並且釋放它,那麼它就沒有意義,並且會使代碼混亂。 :)另外請注意,我並沒有對它進行調低,但是對於一個顯而易見的新人來說,顯示糟糕代碼的帖子也無法提升。 –

+0

@KenWhite - 謝謝你,我已經更新了代碼。 – Shambhala

+0

+1。謝謝。 :) –

0

下面是一些樣板代碼,這表明modal window行爲德爾福:

procedure TMain.Button1Click(Sender: TObject); 
var 
    Result: TModalResult; 
begin 
    { if Dialog is not in "auto-create forms" list - instantiate it } 
    if not Assigned(Dialog) then 
    Application.CreateForm(TDialog, Dialog); 

    { MODAL forms are blocking input on per application level } 
    { so the following call blocks until Dialog form closes } 
    Result := Dialog.ShowModal(); 

    if IsPositiveResult(Result) then 
    begin 
    { handle if user responds with OK, Yes, etc } 
    ShowMessage('Accepted'); 
    end 
    else 
    begin 
    { or handle Close, Cancel, No, ... } 
    ShowMessage('Cancelled'); 
    end; 
end; 

獨立的對話結果被在Object Inspector分配按鈕控制ModalResult屬性來實現的。欲瞭解更多信息,請閱讀ShowModal方法。

下面是DFM代碼相關件說明ModalResult屬性設置:

object btnOK: TButton 
    Caption = 'OK' 
    ModalResult = 1 
    end 
    object btnCancel: TButton 
    Caption = 'Cancel' 
    ModalResult = 2 
    end