模式窗与非模式窗口的难题(100分)

  • 主题发起人 主题发起人 fly_phoenix
  • 开始时间 开始时间
F

fly_phoenix

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure OnClick;<br>begin<br> &nbsp;form1.showmodal;//打开一个模窗口<br> &nbsp;//或 Messagebox(handle,'一个对话框',...)<br>end;<br>procedure Ontime(Sender : Tobject);//一个定时器<br>begin<br> &nbsp;form2.show; &nbsp; //这时form2 挡住了form1,<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//点击form2,没响应因为form1是模式窗口,<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//可以用 Alt+Tab键切换一下使form1显示出来<br>end;<br><br>问题:<br>有没有办法在form2.show时,不让form2挡住form1.或其它解决方法
 
FORM1改为SHOW
 
在form2 show 时进行判断,,如果form1先show,关闭form1 form2 show,再form1 show<br>form2先 show,不用管。
 
form1.formstyle:=fsStayOntop;<br>form1.show;
 
如果有很多个类似于form1的窗口或者是messagebox就没办法判断了,form2是实时弹出窗口<br>有没办法让 form2在有其它模式窗口有存在的情况下响应
 
我在<br>Application.OnModalBegin<br>Application.OnModalEnd<br>中可以检测到模式窗口的存在,怎么样让模式窗口在最前面不让Show挡住还是没着,但对于messagebox就没办法了
 
[red]有高手在吗[/red]
 
只有让Form2在另一个线程中运行才不会受模式窗口的影响。或为From2另外写一个EXE,定时器中用WinExec()调用调用该EXE。
 
form1.formstyle:=fsStayOntop;<br>form1.show; &nbsp;<br><br>这个应该可以用的
 
form1.formstyle:=fsStayOntop;<br>也是不起作用的<br>form2.show还是能跑到你前面来
 
在form2 show后轮询所有窗口,检查到是form1就BringToFront可否。<br>for Loop := 0 to Application.ComponentCount - 1 do &nbsp; &nbsp; <br>begin<br> &nbsp; &nbsp;if (Application.Components[Loop] is TForm) then<br> &nbsp; &nbsp;begin<br> &nbsp; &nbsp; &nbsp; &nbsp;if (Application.Components[Loop] as TForm).Name = 'Form1' then<br> &nbsp; &nbsp; &nbsp; &nbsp;begin <br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(Application.Components[Loop] as TForm).BringToFront;<br> &nbsp; &nbsp; &nbsp; &nbsp;end;<br> &nbsp; &nbsp;end;<br>end;
 
后退
顶部