<Strong>如何让FORM总在上面(Always on Top)</Strong>(50分)

  • 主题发起人 主题发起人 mafan
  • 开始时间 开始时间
M

mafan

Unregistered / Unconfirmed
GUEST, unregistred user!
主窗口:Form1
Form1调出了一个Form2,方法是ShowModal;
问题是Form2中调出的Form3如何总在上面(Always on Top)?
 
Form3.FormStyle := fsStayOnTop;

SetWindowPos(Form3.Handle, HWND_TOPMOST, Form3.Left, Form3.Top, 0, 0, SWP_SHOWWINDOW or SWP_NOACTIVATE or SWP_NOSIZE);
 
1.Form3.ShowModal
2.Form3.FormStyle := fsStayOnTop;
3.用SetWindowPos
 
都不管用!Form3会被Form2盖住
 
如果Form3可以ShowModal我就好办了
 
Form3不能ShowModal?????????
 
我试过,Form3可以ShowModal.请详细说一下你的情况.
 
窗口属性如何?
 
我的意思是:不可以Form3.ShowModal(因为这时Form2必须活着),只可以SHOW
 
你们把问题想复杂了,如果Form3设为StayOnTop,那么Form3必然为Form2所覆盖.
很简单,把三个Form的属性都设为Normal,那么是Form3在上面.
Form1调用
Form2.ShowModal

Form2调用

Form3.ShowModal

一切正常
 
Form1调用
Form2.ShowModal
Form2调用
Form3.ShowModal//我不可以在这里ShowModal,因为这里还要FORM2活着;
如果设计要求允许,也就没这个问题了
 
将form3的FormStyle 设为 fsStayOnTop;
不要让程序运行时自动创建form3,在.dpr中去掉
Application.CreateForm(TForm3, Form3);
在form3.show 前加上
if form3 = nil then
Application.CreateForm(TForm3, Form3);
 
呵呵,我明白了
你用点儿技巧就可以了.
设一个全局的变量whichactive = 0;
Form2及Form3都用show()的方式打开.
form2的ondeactivate 时 whichactive = 1;
form3的ondeactivate 时 whichactive = 2;
form1的onactivate 时 判断
if whichactive = 1 then form2.show()
if whichactive = 2 then
begin
form2.show()
form3.show()
end
另外form的关闭顺序注意一下就可以了.
 

Similar threads

后退
顶部