微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

德尔福,可以使形式模态到特定的父表单?

我有一个应用程序,其中有一个主要的背景形式,从那里用户只能使用非模态形式来维护系统的不同部分.非模态表单覆盖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;

实际上,用户可以打开一个维持“苹果”的非模式形式,另一种维持“橘子”的非模态形式,并使用开始菜单栏轻松地在两者之间切换.

但是,如果他们从“苹果”形式开启模式,例如要设置选项,偏好等,那么在关闭模态窗体之前,他们不能使用“橘子”形式.

是否可以仅对父母表单形式模态?所以如果他们打开苹果的选择表格,他们不能使用苹果的维护表单,但仍然可以使用橘子维护表单?

谢谢

解决方法

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

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

很可能是更好的方式来构建您的UI.请参阅“Windows用户体验互动指南”中的dialog boxes相关页面.更好地避免模态对话,链接的指导方针可以为许多用例提供更好的选择.如果您限制使用模态对话框,也许您不再需要表单模式对话框.

原文地址:https://www.jb51.cc/html/224880.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐