我从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
没有任何幻想,它只是一个单一形式的新项目。
答案 0 :(得分:4)
我能够重现这个错误,这里有一些我发现的问题。也许他们会帮助别人解决这个问题。
Invalidate
事件中调用OnClick
,则表单会恢复颜色。WndProc
= WM_SIZE
从wParam
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中。这可能是您的视频驱动程序中的一个错误,可以在功能区和表单代码中进行一些代码解决方法。