带有Aero效果的Delphi XE会导致油漆问题

Seb*_*ien 9 delphi windows-7 delphi-xe aero-glass

我从2009年升级到Delphi XE,遇到了一个奇怪的问题.

我创建了一个新项目,放下了一个TRibbon控件,编译并运行.保持表单的默认大小我然后最小化和恢复没有问题.然后,我最大化表单,最小化和恢复,并将表单颜色更改为黑色.

我没有随机代码来更改它并使用Delphi XE附带的所有默认值,它每次都会这样做而且不会失败.

我已将已编译的exe移动到朋友计算机上,问题仍然存在,所以我知道这不是我的电脑.如果我关闭Aero效果,问题就会消失,但重新启动Aero并且问题会恢复.

有什么想法吗?我很难在互联网上找到关于这个问题的任何相关主题.

谢谢,Seb

编辑(根据请求,显示此行为的表单的DFM.注意:这发生在我启动的任何项目上):

object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 555
  ClientWidth = 989
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  Position = poScreenCenter
  PrintScale = poNone
  Scaled = False
  PixelsPerInch = 96
  TextHeight = 13
  object Ribbon1: TRibbon
    Left = 0
    Top = 0
    Width = 989
    Height = 143
    Caption = 'Ribbon1'
    ExplicitLeft = 104
    ExplicitTop = 296
    ExplicitWidth = 0
    StyleName = 'Ribbon - Luna'
  end
end
Run Code Online (Sandbox Code Playgroud)

没有任何幻想,它只是一个单一形式的新项目.

Cos*_*und 4

我能够重现该错误,以下是我发现的一些问题。也许他们会帮助某人解决这个问题。

  • 如果我在表单上放置一个按钮并Invalidate从按钮的OnClick事件中调用,则表单将恢复其颜色。
  • 如果我在表单上放置一个计时器,请使用=WndProc启用计时器,然后从计时器调用,表单将恢复其颜色。这本质上与第一种方法(从按钮调用)相同,但计时器使此方法自动进行,并确保仅在没有更多消息需要处理时才调用。我尝试了同样的简单方法,但没有成功(即:我可能太快了,这可能是另一个线索)WM_SIZEwParamSIZE_MAXIMIZEDInvalidateInvalidateInvalidatePostMessageInvalidate
  • 有趣的是:如果我Application.MainFormOnTaskbar := False在项目的源代码中制作,我将不再看到黑色表格。

解决方法

丝带占据了表格的顶部。TPanel在表格的其余部分上放置一个,制作Align = alClient并将所有内容放在面板上。面板后面的黑色不再可见!