当前位置:  开发笔记 > 开发工具 > 正文

Delphi,可以只为特定的父表单创建表单模式吗?

如何解决《Delphi,可以只为特定的父表单创建表单模式吗?》经验,为你挑选了1个好方法。

我有一个应用程序,其中有一个主要的背景形式,从那里用户只能维护系统的不同部分的非模态形式.非模态窗体会覆盖CreateParams方法,因此每个窗体都会在启动任务栏中显示一个按钮:

procedure TfmMaterialsPlanning.CreateParams(var Params: TCreateParams);
begin
   inherited;
   //create a new window on the task bar when this form is created
   Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
end;

实际上,用户可以打开一个维护"苹果"的非模态表单,另一个维持"橙子"的非模态表单,并使用开始菜单栏轻松切换两者.

但是,如果他们从"苹果"表单中打开一个模态表单,例如设置选项,首选项等,那么在关闭模态表单之前,他们不能使用"橙子"表单.

是否有可能只为父表单创建一个模态表单模态?因此,如果他们打开Apple的选项表格,他们不能使用苹果维护表格,但仍然可以使用Oranges维护表格?



1> mghie..:

如果您查看TCustomForm.ShowModal()的源代码,您将看到VCL不使用Windows API调用来显示模式对话框,但它确实禁用了应用程序中的所有其他窗体,而模式窗体是所示.您当然可以尝试相同的方法,只需Show()表单模式对话框,然后禁用父对象,然后在关闭表单模式对话框后重新启用它.需要有一个中心位置,您可以跟踪表单模式对话框,需要重新启用的表单等等.但是,您应该彻底测试代码是否确实是您希望它执行的操作,即使在应用程序之间来回切换,最小化应用程序等等时也是如此.

话虽如此 - 我认为这根本不是一个好主意.它打破了Windows用户对应用程序行为的所有假设.与Mac OS X不同,Windows在应用程序模式和表单模式对话框之间没有区别,您应该坚持与您编程的平台一致的行为.

最有可能是构建UI的更好方法.在"Windows用户体验交互指南"中查看对话框的相关页面.尽可能更好地避免模态对话框,链接指南显示了许多用例的更好替代方案.如果限制使用模态对话框,可能不再需要表单模式对话框.


如果用户有两个任务栏按钮,则完全符合UI准则,这两个窗口之一显示的模式对话框不会阻止另一个窗口.两个任务栏按钮由同一进程托管的事实与用户无关.我实际上认为一个模态对话框阻止两个窗口不合适.无论如何,丹尼尔链接到一个有效的解决方案.
推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有