delphi 在VCL中显示一个非激活状态的窗口  
官方Delphi 学习QQ群: 682628230(三千人)
频道

delphi 在VCL中显示一个非激活状态的窗口


在VCL中,调用窗体的TForm.Show时,窗口被自动激活到前台,从而令前面的窗口失去了焦点。有的时候,这并不是我们需要的效果,我们可能只是显示一个比较复杂的提示窗口,这个窗口默认并不需要获取焦点,而VCL并没有提供这样一个函数。

今天在群里话询问时,以前一直没有想明白怎么搞定TForm的Visible属性,不得闲给出了一个很简单解决办法,直接@属性的地址强制赋值即可。好吧,剩下的事情就简单化了,下面的函数用于实现这一效果:


procedure ShowNoActive(AForm: TForm);
begin
ShowWindow(AForm.Handle, SW_SHOWNA);
PBoolean(@AForm.Visible)^ := True;
AForm.Perform(CM_VISIBLECHANGED, 1, 0);
end;
要显示一个初始为非激活状态的窗口时,只需要调用一句 ShowNoActive(AForm) 即可,而隐藏它直接调用原来的Hide或Visible赋值为False即可。这再一次证明了属性是一个语法糖的传言。

推荐分享
图文皆来源于网络,内容仅做公益性分享,版权归原作者所有,如有侵权请告知删除!
 

Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号

执行时间: 0.051149845123291 seconds