Delphi 2010按钮,Windows版本的Aero glass打开,文本变为白色

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}

前几天,我开始在Delphi中使用不同的视觉效果,但在使用Aero Glass effect时遇到了问题(我安装了Delphi 2010):当我将按钮放在玻璃上时,该按钮的某些部分(或其他元素)会燃烧并变为透明。我不知道为什么,但我试着在其他计算机上做同样的例子。这个错误重复了

一个bug的截图;第二个按钮的标题是透明的:

我的示例程序:

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