这个问题是这样的:
在应用程序中加载两个窗体,一个是模态的,另一个是非模态窗体。其中非模态窗体的属性设置为fsStayOnTop就是让其一直在前方显示。这样的效果就是在操作模态窗体的时候,可以看得到非模态窗体,但是不可以操作非模态窗体,这样的效果是正确的。但是当程序执行某些操作之后,比如发了某个windows消息之后,这样的状态就会发生改变,导致非模态窗体不能正常显示。
问题是系统消息发送之后窗体的FormStyle属性依然为fsStayOnTop但是就是不在前方显示,此问题相当恶心啊。如果设置为模态窗体则当这个窗体出现的时候就不能操作其他窗体,设置为非模态的则会导致没有获得焦点时可以处于最上面,但一旦获取焦点,就被mainform遮住了 设置成fsStayOnTop好象没有什么作用。
研究了一段时间,也用度娘度了好久,才找到一个合适的解决方案。现在共享出来,希望大家遇到之后能迅速解决~~
重载窗体的这个方法,然后在这个方法中指定窗体的句柄。
procedure CreateParams(var Params: TCreateParams); override;
procedure MainForm.Createparams(var Params: TCreateParams); begin inherited; With Params do begin WndParent := Application.MainForm.Handle; Params.ExStyle := WS_EX_TOPMOST; end; end;
这样之后,程序便可以顺利执行了。这是强制指定窗体的扩展属性啊!