Delphi2007存在如下bug???(30分)

  • 主题发起人 主题发起人 batconv
  • 开始时间 开始时间
B

batconv

Unregistered / Unconfirmed
GUEST, unregistred user!
大家都知道,使用
SetWindowLong(Application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);
可以让窗体不在任务栏上显示,用delphi7编译很正常,但是我无意中发现,同样一行代码,放到D2007上编译,虽然正常通过,但是却不能使窗体在任务栏上隐藏!怎么试都不行!!如果哪位不信可以测试一下。同时问一下有什么办法可以解决这个问题?
 
看看dpr中,去掉 Application.MainFormOnTaskBar := True; 一句
这句表示任务栏上放的是主窗体的Handle而不是Application的handle,因此你的代码光设Application的Handle是没用的。
 
我试试看,记得好像把这句去掉试过的。
谢谢passion,问一下,cnpack在D7中可以快速设书签,D2007中怎么不行呢
 
却认了,去掉那句也不行
 
快速设书签是指什么功能?Ctrl+1 2的快捷键还是在行号区点击的时候设书签?如果是后者CnPack专家包也不太好处理。BDS自己带了行号显示,但它的行号显示区自身没点击设置书签的功能。

SetWindowLong(Application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);
这句是写在什么地方的?可能设置的时机也有问题。
要不就干脆SetWindowLong(Application.MainForm.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);试一试?
 
快速设书签就是指在行号区点击的时候设书签,个人感觉这个功能很实用,如果D2007不能实现真是太遗憾了

SetWindowLong(Application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);
是在oncreat或onshow中的
 
至今无解...
 
不是BUG ,原来看到过文章。只不过隐藏窗口的方法变了。
 
to delhpi:
等于没讲,变成什么方法了?
 
那就当没有讲。你还是认为是BUG 就行了。
 
D2007和D2009为了兼容Vista任务栏图标显示窗口缩略图的功能,而对整个应用程序窗口显示方法做出了修改。以前的任务栏显示方式是显示Application.Handle产生的主窗口(实际上这就是Delphi程序唯一的主窗口,只是窗口本身是大小是0高宽看不到的),而其它窗口如果没有指定WS_EX_APPLICATION标记,都不会在任务栏上显示按钮。由于这个原因,Application的任务栏按钮还被特地取消了右键“移动”等几个菜的按钮。而到了Vista后,由于这样的设置将导致鼠标指向任务栏按钮后,显示一个中心带图标而没有任何窗口界面的缩略图的问题,所以Borland和CG改变了Application的设置。在D2007里面 ,为了向下兼容,增加了TApplicationHelper对象,来处理Vista的效果,也就是这个对象,增加了MainFormOnTaskBar属性。这个属性为False的时候,Application.Handle是彻底隐藏的,而主窗口则拥有了WS_EX_APPLICATION属性,这样主窗口的任务栏按钮出现在任务栏上了,从而解决了Vista的这个问题。当然,衍生而来的就是,如果你想隐藏任务栏上应用程序的按钮,必须采用另外的方法,也就是说,直接对Application.Handle操作已经无效了(它本身就已经隐藏了),你只能对你的MainForm.Handle做去除WS_EX_APPLICATION属性的SetWindowLong才能隐藏。这就是问题的原因,并不是2007和2009的bug。最后说一下,到了2009,CG已经把过渡性的TApplicationHelper对象去掉了,所有代码都已经融合到Application中了,而且为了提供Ribbon的更加美观的提示,还增加了CustomHint属性,所以过度到2009的项目,很多窗体都需要打开再保存后才能正常编译使用(当然结果是,保存后的窗体不能返回2007版本了,因为有多出来的属性被写入dfm文件中)
 
谢谢zqw0117
听君一席话,胜搜半天网啊
 
后退
顶部