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

时间:2011-06-27 09:29:11

标签: 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

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

2 个答案:

答案 0 :(得分:4)

我能够重现这个错误,这里有一些我发现的问题。也许他们会帮助别人解决这个问题。

  • 如果我在表单上放置一个按钮并从按钮的Invalidate事件中调用OnClick,则表单会恢复颜色。
  • 如果我在表单上放置了一个计时器,请使用WndProc = WM_SIZEwParam SIZE_MAXIMIZED启用计时器,然后从Invalidate拨打Invalidate形式获得它的颜色的计时器。这与第一个方法(从按钮调用Invalidate)基本相同,但计时器会自动执行此操作,并确保仅在没有其他消息要处理时调用PostMessage。我用一个简单的Invalidate尝试了相同的但是没有用(即:我可能Application.MainFormOnTaskbar := False - 太快了,这可能是另一个线索)
  • 有趣:如果我在项目的来源中制作TPanel,我就不会再看到黑色表单了。

解决方法

功能区占据表单的顶部。在表单的其余部分放置Align = alClient,将其设为{{1}}并将所有内容放在Panel上。面板后面的黑色不再可见!

答案 1 :(得分:1)

使用功能区时应启用玻璃框,因为功能区控件专门设计用于打开航空玻璃框架。其次,您应该做更多的工作来配置功能区,添加应用程序菜单和一些窗格,以使其按设计工作。我不相信没有任何标签组或系统菜单的“功能区本身”将在运行时正确呈现。

如果您希望功能区在启用了Aero glass的系统上运行,则应启用glass frame属性(Form.GlassFrame.Enabled),并启用Form.DoubleBuffered属性,添加一些选项卡页面,添加一些选项卡组,并添加一个系统菜单。很多步骤。

请尝试连接的功能区启动器project。 (ribbonStarter.zip 88k)

更新即使我的ribbonStarter在您的系统上产生相同的结果,也许这应记录在Quality Central中。这可能是您的视频驱动程序中的一个错误,可以在功能区和表单代码中进行一些代码解决方法。