http://terony.blog.sohu.com/71347192.html
‍ Delphi2007中正确调用SetWindowLong隐藏程序任务栏图标 标签: Delphi2007 SetWindowLong 隐藏任务栏图标 分类: 专业2007-11-23 16:55
以前在Delphi6/7时代,如果要程序图标不在Windows任务栏显示,可以调用Windows API函数 SetWindowLong,但是进入Delphi2007时代后,发现原来的方法不行了,这是怎么回事呢?我想微软是不会轻易更改系统API函数的,在这一设定的前提下,我决定还是在Delphi2007上找原因。
我们知道,Delphi2007为了支持在Windows Vista上面进行原生开发并兼容之前的Windows操作系统做了很多修改,比如之前我在博客中提到的在Delphi2007的工程文件中新增了 Application.MainFormOnTaskbar := True; 这句代码。
(具体内容请参阅我的博文:《找回Delphi2007中的Application.Title》
URL:http://terony.blog.sohu.com/57095737.html)
而导致这个问题的关键也在于这句新增的代码。这一改进是为了适应Windows Vista的Flip3D任务切换界面,旧版Delphi编译之后的程序启动后的任务栏标题默认为程序标题而不是程序主窗体标题,这与微软编译器生成的可执行文件有所不同,在最新版的Windows Vista操作系统下,这个问题导致了用户在使用Flip3D任务切换界面时由旧版Delphi编译生成的程序所呈现的图标不美观,为了解决这一兼容性问题,Borland CodeGear对新版的Delphi窗体代码做了修改。所以如果你只是将 Application.MainFormOnTaskbar := True;改为Application.MainFormOnTaskbar := False;或者将它屏蔽掉都是没有用的,因为新版的Delphi编译之后的可执行文件默认显示当前程序的主窗口,所以在调用SetWindowLong时你不可以再使用Application.Handle而是要使用Self.Handle,通过阅读Delphi VCL源代码(具体请阅读新版 Forms 源代码,已经是Copyright (c) 1995-2007 CodeGear)了解到新版Delphi对程序窗口所作的具体修改之后,正确的代码实现方式应该是:
var
Style: Integer;
begin
Style := GetWindowLong(Handle, GWL_EXSTYLE);
SetWindowLong(Handle, GWL_EXSTYLE, Style and (not WS_EX_APPWINDOW));
end;
这样就可以实现在任务栏隐藏程序图标的目的了,并且可以兼容当前所有Windows操作系统。
对了,还有一点,上面的代码要添加到主窗体的FormShow事件中,而不是FormCreate事件。
以上拙见希望对碰到类似问题的朋友有帮助,祝大家编程愉快!
2008年6月4日下午的补充:
首先向网友“涉水者”表示歉意!你提的问题是正确的,在RADStudio2007(UP3)中(版本:11.0.2804.9245),该代码确实不能实现相应目的。现做修改如下:
1、修改工程文件中的“Application.MainFormOnTaskbar := True;”为“Application.MainFormOnTaskbar := False;”
2、在主窗体的 OnShow 事件中写下:ShowWindow(Application.Handle, SW_HIDE);
这样就可以在高版本编译器中实现需要的效果了。原理是恢复程序原来的任务栏(工程)显示,然后隐藏“工程”任务栏显示。这个办法有些折衷,权且解决手头问题,如有更好的办法,请告知一声。谢谢!

最新文章

  1. Concepts:Request 和 Task
  2. SQL Server中的GUID
  3. OC self和super
  4. Liferay 6开发学习(二十六):数据库连接相关问题
  5. 【BZOJ】【4002】【JLOI2015】有意义的字符串
  6. switch..case函数的基础使用一
  7. poj1226,poj3080
  8. c#中字符串截取使用的方法
  9. PHP函数积累总结(Math函数、字符串函数、数组函数)
  10. (三)Boost库之字符串处理
  11. 基于Predictive Parsing的ABNF语法分析器(十三)——rulelist、rule、rulename、define-as和elements
  12. bug记录_signalr执行$.connnection.testhub结果为空
  13. (二)Lua脚本语言入门
  14. JS-DOM . 01 简单了解DOM
  15. go get获取gitlab私有仓库的代码
  16. html-webpack-plugin详解
  17. 类装饰器,元类,垃圾回收GC,内建属性、内建方法,集合,functools模块,常见模块
  18. 以太坊客户端Geth命令用法-参数详解【转载】
  19. ASP.NET JSON(转http://www.360doc.com/content/14/0615/21/18155648_386887590.shtml)
  20. Spark强大的函数扩展功能

热门文章

  1. Vue学习笔记【17】——配置本地数据库和数据接口API
  2. Java——is-a、is-like-a、has-a
  3. NOIP模拟测试17
  4. python实现收邮件判断模块poplib,email
  5. Less 和 Sass
  6. (转)秒懂,Java 注解 (Annotation)你可以这样学 ---- 重要 注解定义与反射解析
  7. Shell基本正则表达式和扩展正则表达式
  8. 红黑数之原理分析及C语言实现
  9. CSS:CSS 语法
  10. linux进阶之路(一):linux入门