2011-10-12 85 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