Delphi 2010按钮,Windows版本的Aero glass打开,文本变为白色
前几天,我开始在Delphi中使用不同的视觉效果,但在使用Aero Glass effect时遇到了问题(我安装了Delphi 2010):当我将按钮放在玻璃上时,该按钮的某些部分(或其他元素)会燃烧并变为透明。我不知道为什么,但我试着在其他计算机上做同样的例子。这个错误重复了 一个bug的截图;第二个按钮的标题是透明的: 我的示例程序:Delphi 2010按钮,Windows版本的Aero glass打开,文本变为白色,delphi,delphi-2010,aero-glass,Delphi,Delphi 2010,Aero Glass,前几天,我开始在Delphi中使用不同的视觉效果,但在使用Aero Glass effect时遇到了问题(我安装了Delphi 2010):当我将按钮放在玻璃上时,该按钮的某些部分(或其他元素)会燃烧并变为透明。我不知道为什么,但我试着在其他计算机上做同样的例子。这个错误重复了 一个bug的截图;第二个按钮的标题是透明的: 我的示例程序: program Project1; uses Forms, Unit1 in 'Unit1.pas' {Form1}; {$R *.res}
program Project1;
uses
Forms,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
这是Delphi 2010支持“glass”(使用DWM的Aero Composition)中的一个已知错误,我相信它在Delphi XE中已经修复,我选择使用的解决方法是使用我自己的自定义类TButton 2010年,当我看到这个bug时,我向Embarcadero报告了这个bug,和其他人一样,我似乎找不到QC(bug report),但我不接受建议的双缓冲解决方案
TBitBtn
没有出现这个问题,我相信这是我最简单的解决方法,尽管它还有其他问题
Delphi 2010中有很多玻璃问题。一般意见;升级Delphi。只是澄清一下:Aero是Windows的东西,而不是Delphi的东西。您的代码似乎包含一个bug。请将代码添加到问题中。请给我一个完整的小程序。仅供参考:Aero glass只能在Windows 7上运行,AFAIK。正如Andreas所指出的,这是Windows的一部分,所以不要期望它在所有版本的Windows上都能工作。当然,它不会在所有版本的Windows上都能工作,@Jerry,但我认为至少应该期望它在支持Aero的版本上能工作。问题中表单的外观表明它正在这样一个版本上运行。问题是为什么按钮看起来不正确。我可以从.NET中确认相同的行为,所以这将是系统范围内的问题。在aero玻璃板上绘制纯文本(即使使用GDI+)也不容易。我想说,整个Windows aero支持是在Delphi 2009中引入的。至少我可以在那里找到复制这个问题所需的一切。而且,与.NETWinForms应用程序相同,所以只有系统决定如何在aero玻璃片上呈现按钮标题。我认为Delphi必须在其实现中解决这个系统问题。这个问题的根源是Windows常见控件的问题。是的,但你在回答中没有这样说。即使使用Delphi XE3,您也会看到相同的行为,因此没有“修复”任何内容。Embarcadero需要实现定制的按钮控件来解决这个系统问题(甚至是GDI+)。我认为他们在XE和更高版本中解决了这个问题,因为我在使用XE后无法重现这个问题。其他人还在XE、XE2、XE3中看到这一点吗?请记住,仅仅因为windows常见控件问题,并不意味着如果您是VCL的作者,就没有标志和可以执行的操作,包括对DWM API和其他API的调用。只有当您使用浅主题颜色(如白色)时,您才能看到此问题。你用灯光模拟过这个问题吗?
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
end.
object Form1: TForm1
Left = 0
Top = 0
Caption = 'Form1'
ClientHeight = 202
ClientWidth = 331
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
GlassFrame.Enabled = True
GlassFrame.Bottom = 50
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Button1: TButton
Left = 64
Top = 153
Width = 175
Height = 41
Caption = 'Button1'
Font.Charset = DEFAULT_CHARSET
Font.Color = clMenuHighlight
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
ParentFont = False
TabOrder = 0
end
object Button2: TButton
Left = 64
Top = 73
Width = 175
Height = 41
Caption = 'Button1'
Font.Charset = DEFAULT_CHARSET
Font.Color = clMenuHighlight
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
ParentFont = False
TabOrder = 1
end
end