9

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

我新建一个项目,放下一个TRIbbon控件,编译运行。将表单保持在默认大小,然后我最小化并恢复没有问题。然后我将表格最大化,最小化并恢复,表格颜色变为黑色。

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

我已将编译后的 exe 移到朋友的计算机上,但问题仍然存在,所以我知道这不是我的计算机。如果我关闭 Aero 效果,问题就会消失,但重新打开 Aero,问题就会再次出现。

有什么想法吗?我无法在整个互联网上找到有关此问题的任何相关线程。

谢谢, 赛布

编辑(根据要求,显示此行为的表单的 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

一点儿也不奇怪,它只是一个单一形式的新项目。

4

2 回答 2

4

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

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

解决方法

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

于 2011-06-27T16:42:01.700 回答
1

您应该在使用 Ribbon 时启用 glass frame,因为 Ribbon 控件专门设计用于与航空玻璃框一起使用。其次,你应该做更多的工作来配置你的功能区,添加一个应用程序菜单和一些窗格,让它按设计工作。我不相信没有任何选项卡组或系统菜单的“功能区本身”会在运行时正确呈现。

如果您希望功能区在启用 Aero 玻璃的系统上工作,您应该启用玻璃框架属性 (Form.GlassFrame.Enabled),并打开 Form.DoubleBuffered 属性,添加一些选项卡页,添加一些选项卡组,然后添加一个系统菜单。很多步骤。

请尝试随附的功能区启动项目。(ribbonStarter.zip 88k)

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

于 2011-06-27T13:04:28.020 回答