delphi – 正确处理模态窗口“最小化”行为
发布时间:2020-12-15 09:51:13 所属栏目:大数据 来源:网络整理
导读:我有以下问题:我们正在构建一个相当大的应用程序(win32,Delphi 6 Enterprise).在应用程序的几个部分中,使用模态窗口,通常包含主窗口选择的细节. 我们包含了对WM_SYSCOMMAND消息处理的修改,这样,如果窗口是模态的,那么SW_SHOWMINNOACTIVE消息将被发送到应用
我有以下问题:我们正在构建一个相当大的应用程序(win32,Delphi 6 Enterprise).在应用程序的几个部分中,使用模态窗口,通常包含主窗口选择的细节.
我们包含了对WM_SYSCOMMAND消息处理的修改,这样,如果窗口是模态的,那么SW_SHOWMINNOACTIVE消息将被发送到应用程序的主窗口.这导致整个应用程序被最小化而不仅仅是模态形式. 但是,在特定情况下会出现问题:如果调用窗口设置为全屏,则在恢复时,模式窗口将显示在(禁用)最大化主窗口下(这似乎发生在Windows 7上) 我的问题有两个问题: 首先,当应用程序恢复时,我似乎没有得到任何syscommand消息,因此我无法引入代码来恢复Z-Order,因为我不知道在哪里放置它. 编辑:我们做了一些额外的测试,似乎我们实际上可以在WM_ACTIVATE处理程序中检测主窗体的问题.我们还可以在该阶段识别模态窗口.但是,我无法找到将其恢复到Z-Order顶部的方法. Edit2:这是最小化模态形式时最小化应用程序的代码: procedure TfmGITForm.WMSysCommand(var Message: TWMSysCommand); begin if (fsModal in FormState) or not Application.MainForm.Visible then begin case Message.CmdType of SC_MINIMIZE: begin ShowWindow(Application.Handle,SW_SHOWMINNOACTIVE); end; SC_RESTORE: begin ShowWindow(Application.Handle,SW_SHOWNORMAL); inherited; end; else inherited; end; // case end else inherited; end; 我们所有的形式都来自那个. 解决方法
覆盖对话框的CreateParams函数并将Params.WndParent设置为全屏窗口(如果您正确拥有东西,则设置为Owner.Handle).默认值为Application.Handle,这将导致这些类型的问题.在后面的Delphi版本中引入的PopupParent属性完全相同.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |