我的主程序mdi的,弹出了一个模态窗体,这时候我有个自动锁屏,当锁屏的时候我主程序使用了frmMain.Hide;,这时候主程序最小化了,可是似乎模态窗体还在上面,(这里我希望可以让模态的窗体也不显示),然后我输入所平的密码后,则调用frmMain.Show;自动再次显示出来隐藏的主窗体,可是这时候刚才的模态窗体就不在最前方了,导致主程序无法响应任何动作(这里我希望是可以恢复成初始的样子,就是出程序显示,模态窗体也显示并在最前方)
如何解决呢?
如何解决呢?
将你的模态窗口彻底透明化,包括其中的控件。如果你不想让用户乱点时点到其中的控件,那么窗体在透明化后,move到另一个位置,并且甚至可以把窗体的尺寸改小。当用户输入正确后,才再改回来。
1、hide的时候,模态窗体没有隐藏的问题
2、重新show的时候模态窗体不再最前方的问题。
针对第1个问题,我想,是否可以单独对模态窗体发消息隐藏呢?但是如何获得此模态窗体的句柄呢?
针对第2个问题,我现在可以在主程序中检测是否有模态窗体,能检测出来,但是无法获得句柄。
有哪位高人指点一下呢?大家一起讨论也行。
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;