阅读 148

窗体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;

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

原文:https://www.cnblogs.com/jijm123/p/14053080.html

文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐