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即可。这再一次证明了属性是一个语法糖的传言。

相关阅读 >>

Delphi延时

Delphi 字符串插入与删除

Delphi dbnavigator1 删除时弹出确认对话框

Delphi 获取当前系统语言环境(en,fr,ja等)

Delphi findwindow的一些用法

Delphi edit 让密码变成点

Delphi 结构化文件存取

Delphi获取注册表run下所有值

Delphi xe 安卓开发黑屏的另一种解决办法

Delphi 释放资源文件

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...