Delphi XE2 VCL风格,奇怪的故障,窗口隐形

时间:2012-04-04 11:05:23

标签: delphi styles vcl skinning

我遇到了VCL风格的一个非常奇怪的问题。有时,当使用预定义样式启动程序或稍后设置程序时,一个或一些程序窗口消失。

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

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

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

任何想法要检查什么?

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

1 个答案:

答案 0 :(得分:2)

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

重现的步骤:

  • 打开新的VCL表单项目
  • 项目选项,外观,设置样式主题。我使用Cobalt XE进行测试
  • 将Alphablend设为true
  • 运行

可能需要10-20次运行才能出现故障。

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

如果在窗口处于活动状态时执行alt + PrtScr,并粘贴在Paint等中,您将获得窗口边界后面的内容,就像alphablendvalue设置为0一样。