首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

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

2012-09-05 
窗体Form的FormStyle属性设置为fsStayOnTop时属性设置不起作用问题探讨。这个问题是这样的:在应用程序中加

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

这个问题是这样的:

在应用程序中加载两个窗体,一个是模态的,另一个是非模态窗体。其中非模态窗体的属性设置为fsStayOnTop就是让其一直在前方显示。这样的效果就是在操作模态窗体的时候,可以看得到非模态窗体,但是不可以操作非模态窗体,这样的效果是正确的。但是当程序执行某些操作之后,比如发了某个windows消息之后,这样的状态就会发生改变,导致非模态窗体不能正常显示。

问题是系统消息发送之后窗体的FormStyle属性依然为fsStayOnTop但是就是不在前方显示,此问题相当恶心啊。如果设置为模态窗体则当这个窗体出现的时候就不能操作其他窗体,设置为非模态的则会导致没有获得焦点时可以处于最上面,但一旦获取焦点,就被mainform遮住了 设置成fsStayOnTop好象没有什么作用。


研究了一段时间,也用度娘度了好久,才找到一个合适的解决方案。现在共享出来,希望大家遇到之后能迅速解决~~

重载窗体的这个方法,然后在这个方法中指定窗体的句柄。

procedure MainForm.Createparams(var Params: TCreateParams);begin  inherited;  With Params do  begin    WndParent := Application.MainForm.Handle;    Params.ExStyle := WS_EX_TOPMOST;  end;end;

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


7楼sushengmiyan25分钟前
哦啦啦。自己占沙发
6楼oSuXiaoLan26分钟前
不错呀
5楼sushengmiyan1小时前
可以用窗体的Parent控制窗体所在的容器就可以在主窗体中显示子窗体。
4楼sushengmiyan1小时前
假如有三个窗体Form1, Form2 (FormStyle = fsStayOnTop) , Form3 n在Form1中把Form2 Show出来,然后再把Form3 ShowModal出来,但要求Form2还是显示在顶层,并且可以操作Form2。 nnto yanyandt2: n 就是浮动工具条的样子,用单独的进程的不合适,我实现的是提醒窗体,要在点击具体的项目进入具体的窗体。假如用单独的进程的话,还要跟这个主进程操作变量,控制起来就有点麻烦了。
3楼sushengmiyan1小时前
几个窗口都是fsstayontop,会不会相互有影响?nn来自: 云飘飘, 时间: 2003-11-30 22:40:00, ID: 2325378 n这几个窗口分别进行不同的操作(比如说画图),都打开来,会不会相互影响呢? n先谢谢了:) n n来自: let_it_be, 时间: 2003-12-02 9:37:00, ID: 2327893 n当然,只能有一个,最后show的一个fsstayontop 的窗口 在最上层 n n来自: 云飘飘, 时间: 2003-12-02 9:41:00, ID: 2327913 n是的,最后一个打开的在最上面,所有这些fsStayonTop的窗口可同时显示出来。 n问题是相互之间有影响呢?
2楼sushengmiyan1小时前
看别人的评论:n如果用 show则子窗体一闪就没了”? n不会啊,我试过了,不会一闪就没有了。 n大富翁WW的方法感觉应该是可行的,不过我没试。 n我使用的方法是这样的: nform2.show; nsetwindowpos(form2.handle,hwnd_topmost,self.left,self.top,self.width,self.height,swp_showwindow);
1楼oSuXiaoLan1小时前
是关于窗体的。应用程序

热点排行