窗体Form的FormStyle属性设置为fsStayOnTop时属性设置不起作用问题探讨。

这个问题是这样的:

在应用程序中加载两个窗体,一个是模态的,另一个是非模态窗体。其中非模态窗体的属性设置为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;

这样之后,程序便可以顺利执行了。这是强制指定窗体的扩展属性啊!

posted on 2020-11-28 16:40  癫狂编程  阅读(282)  评论(0编辑  收藏  举报

导航

好的代码像粥一样,都是用时间熬出来的