2012-04-04 21 views
1

我遇到了VCL样式的一个非常奇怪的问题。有时,无论是以预定义的样式启动程序,还是稍后设置一个程序,都会消失一个或一些程序窗口。德尔福XE2 VCL样式,奇怪的小故障,窗口不可见

这种情况非常随机,可能每10-20次发生一次,而不是在任何特定的窗口中。我有两种形式在运行时打开,有时是一种,有时是另一种。

发生这种情况时,我检查一些属性,而窗口不可见,Visible属性为true,窗口边界是正确的;如果我试图通过Aero DWM实时缩略图显示窗口,它也是空的;如果我捕获窗口DC,但是我得到一个带有窗口的位图,就好像它正常显示(并且样式已经应用)。

它不显示任何错误,没有警告,没有例外..没有什么似乎错了,只是窗口不存在。如果我将鼠标悬停在任务栏按钮上以查看预览,则会显示该框,但它是空的。

任何想法要检查什么?

编辑:调用RecreateWnd将问题解决为临时解决方法,但是,它可能会再次失败。

+0

胡乱猜测,它需要RecreatWnd。如果您点击任务栏中显示的预览,会发生什么情况? – 2012-04-04 18:22:43

+0

什么都没有。该程序变为活动状态,但不显示任何内容。如果我切换到另一种样式(通过托盘图标菜单),它会再次显示。看到这里,通过任务栏预览显示每个表单不同的两种情况:http://i.imgur.com/WT7KK.png http://i.imgur.com/gjClr.png另外,如果我做了一个bitblt在DC上,它捕捉正确应用样式的窗口。 – hikari 2012-04-04 22:04:10

+0

调用RecreateWnd修复了这个问题,我将在启动时调用此方法,并将样式更改为临时解决方法。 – hikari 2012-04-05 00:33:29

回答

2

找到问题的原因:“Alphablend”。如果启用该功能,即使在255,也会出现问题。

重现步骤:

  • 打开新的VCL窗体项目
  • 项目的选择,外观,设置一个风格的主题。我用钴XE的测试
  • 设置ALPHABLEND为true
  • 运行

可能需要10-20运行,直到它的毛刺。

我注意到它发生时,窗口实际上是在那里..你可以将鼠标悬停在上面,注意到那里有东西。如果你猜测他们的位置,你甚至可以点击控件。如果您设法在不可见的情况下拖动窗口,它会显示出来。如果你最小化/恢复它也会显示出来。

如果你做ALT + PrtScr而窗口处于活动状态,并且在油漆等贴,你会得到它背后的内容与窗口的界限,仿佛alphablendvalue被设置为0