模态窗体是否可以hide,hide后如何重新显示

xjjrocker 2008-03-03 04:34:15
我的主程序mdi的,弹出了一个模态窗体,这时候我有个自动锁屏,当锁屏的时候我主程序使用了frmMain.Hide;,这时候主程序最小化了,可是似乎模态窗体还在上面,(这里我希望可以让模态的窗体也不显示),然后我输入所平的密码后,则调用frmMain.Show;自动再次显示出来隐藏的主窗体,可是这时候刚才的模态窗体就不在最前方了,导致主程序无法响应任何动作(这里我希望是可以恢复成初始的样子,就是出程序显示,模态窗体也显示并在最前方)
如何解决呢?
...全文
371 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xjjrocker 2008-03-03
  • 打赏
  • 举报
回复
自己解决了,方法如下:

var
tHandle:HWND;
function ApplicationHasModalForm:HWND; //找到模态窗体
var
i:integer;
begin
result:=0;
for i:=0 to Screen.FormCount-1 do
begin
if Screen.Forms[i] is TForm then
begin
if fsModal in Screen.Forms[i].FormState then
begin
result:=Screen.Forms[i].Handle;
break;
end;
end;
end;
end;
begin

……

隐藏的时候代码如下
frmMain.Hide;
tHandle:=ApplicationHasModalForm;//获得模态窗体句柄
ShowWindow(tHandle,SW_HIDE); //消息隐藏模态窗体

……

恢复显示的时候代码如下
frmMain.Show;
ShowWindow(tHandle,SW_SHOW);

……
end;
xjjrocker 2008-03-03
  • 打赏
  • 举报
回复
目前还是两个问题:
1、hide的时候,模态窗体没有隐藏的问题
2、重新show的时候模态窗体不再最前方的问题。
针对第1个问题,我想,是否可以单独对模态窗体发消息隐藏呢?但是如何获得此模态窗体的句柄呢?
针对第2个问题,我现在可以在主程序中检测是否有模态窗体,能检测出来,但是无法获得句柄。
有哪位高人指点一下呢?大家一起讨论也行。
xjjrocker 2008-03-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 yi10000 的回复:]
你用Visble属性可以。show和hide是不起作用的
[/Quote]
此方法和我的方法一样的结果,就是模态窗体依然不再最前方。
mantti 2008-03-03
  • 打赏
  • 举报
回复
删除Application窗口,使你的frmMain成为主窗口
Ascn 2008-03-03
  • 打赏
  • 举报
回复
我有个另类的方法:
将你的模态窗口彻底透明化,包括其中的控件。如果你不想让用户乱点时点到其中的控件,那么窗体在透明化后,move到另一个位置,并且甚至可以把窗体的尺寸改小。当用户输入正确后,才再改回来。
yi10000 2008-03-03
  • 打赏
  • 举报
回复
你用Visble属性可以。show和hide是不起作用的

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧