回答
尝试:
procedure ShowModalForm()
var
newForm: TNewForm;
begin
newForm := TNewForm.Create(nil);
try
newForm.ShowModal;
finally
newForm.Free;
end;
end;
实现此目的的最简单方法是以模态方式显示您的表单。调用ShowModal来显示表单并且主窗体将不会被禁用并且无法接收任何输入。
你可以创建它是这样的另一种方式。
procedure TForm1.btnCreateFormClick(Sender: TObject);
var
YourForm : TYourForm;
begin
YourForm := TYourForm.Create(nil);
try
YourForm.ShowModal;
finally
YourForm.Free;
end;
end;
如果你做了两件事,我会赞成这个:1)声明'YourForm'是一个局部变量(在'procedure'和'begin'之间),2)将'FreeAndNil'改为'YourForm.Free' - 如果' YourForm'是一个局部变量,不需要释放它,因为它超出了范围,不能在其他地方再次使用。如果你用相同的程序显示它,并且释放它,那么它就没有意义,并且会使代码混乱。 :)另外请注意,我并没有对它进行调低,但是对于一个显而易见的新人来说,显示糟糕代码的帖子也无法提升。 –
@KenWhite - 谢谢你,我已经更新了代码。 – Shambhala
+1。谢谢。 :) –
下面是一些样板代码,这表明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
- 1. 德尔福父窗体按钮
- 2. 德尔福。显示来自子窗口的父窗口
- 3. 德尔福 - 捕获当前焦点的窗口/窗体
- 4. 德尔福活动窗口截图
- 5. 德尔福窗口失去焦点
- 6. 德尔福弹出窗口/表格
- 7. 德尔福MDI创建子窗体
- 8. 德尔福模式窗体位置
- 9. 德尔福,可能使窗体模式只有特定的父窗体?
- 10. 德尔福 - 如何关闭窗体内的TFrame内的窗体?
- 11. 德尔福 - 儿童窗体有父母的框架
- 12. 在德尔福的无边界窗体/窗口中平滑调整大小
- 13. 德尔福 - 停止主窗体上的应用程序创建
- 14. 德尔福 - 一个消息窗体作为另一个任务的窗口
- 15. 德尔福 - 终止阻塞的线程
- 16. 在德尔福棱镜的相同窗口窗口中调用事件
- 17. 德尔福接口
- 18. 使用javascript阻止从子窗口访问父窗口
- 19. C#this.Invalidate()阻止父窗体访问
- 20. 德尔福TRIBbon只在移动窗口后加载
- 21. 组织窗口在SDI德尔福申请
- 22. 如何获取飞溅窗体在德尔福超时
- 23. 德尔福:如何运行窗体2在Form1.TMoviePlayer
- 24. 在光标位置打开窗体,德尔福
- 25. 德尔福 - 如何防止主窗体在另一个非模态窗体中捕获TMemo中的击键?
- 26. 德尔福:如何让我自己的提示窗口?
- 27. 德尔福仿真键/鼠标到特定的窗口
- 28. 德尔福XE2,VCL风格再现窗口办理
- 29. 德尔福标准的Windows GUI窗口打开的文件
- 30. 德尔福:检测窗口移动的开始和结束
请不要关闭这个问题。这是完全清楚的OP是在问什么。正如显而易见的upvotes和6个答案。 – Johan