Delphi 7应用程序中的Aero Glass问题

Delphi 7应用程序中的Aero Glass问题,delphi,delphi-7,aero,aero-glass,Delphi,Delphi 7,Aero,Aero Glass,我正试图重新制作一些旧项目,以支持Aero Glass。虽然启用玻璃框架有点容易,但我遇到了一些主要问题。我使用了以下代码: var xVer: TOSVersionInfo; hDWM: THandle; DwmIsCompositionEnabled: function(pbEnabled: BOOL): HRESULT; stdcall; DwmExtendFrameIntoClientArea: function(hWnd: HWND; const pxMarInset:

我正试图重新制作一些旧项目,以支持Aero Glass。虽然启用玻璃框架有点容易,但我遇到了一些主要问题。我使用了以下代码:

var
  xVer: TOSVersionInfo;
  hDWM: THandle;
  DwmIsCompositionEnabled: function(pbEnabled: BOOL): HRESULT; stdcall;
  DwmExtendFrameIntoClientArea: function(hWnd: HWND; const pxMarInset: PRect): HRESULT; stdcall;
  bEnabled: BOOL;
  xFrame: TRect;

// ...

  xVer.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
  GetVersionEx(xVer);
  if xVer.dwMajorVersion >= 6 then
  begin
    hDWM := LoadLibrary('dwmapi.dll');
    @DwmIsCompositionEnabled := GetProcAddress(hDWM, 'DwmIsCompositionEnabled');
    @DwmExtendFrameIntoClientArea := GetProcAddress(hDWM, 'DwmExtendFrameIntoClientArea');
    if (@DwmIsCompositionEnabled <> nil) and
       (@DwmExtendFrameIntoClientArea <> nil) then
    begin
      DwmIsCompositionEnabled(@bEnabled);
      if bEnabled then
      begin
        xRect := Rect(-1, -1, -1, -1);
        DwmExtendFrameIntoClientArea(FrmMain.Handle, @xRect);
      end;
    end;
    FreeLibrary(hDWM);
  end;
var
xVer:TOSVersionInfo;
hDWM:THandle;
DwmIsCompositionEnabled:function(pbEnabled:BOOL):HRESULT;stdcall;
dwmextendframeintoclienterea:function(hWnd:hWnd;const-pxMarInset:PRect):HRESULT;stdcall;
可启用:布尔;
xFrame:TRect;
// ...
xVer.dwosVersionInfo:=SizeOf(toVersionInfo);
GetVersionEx(xVer);
如果xVer.dwMajorVersion>=6,则
开始
hDWM:=LoadLibrary('dwmapi.dll');
@DwmIsCompositionEnabled:=GetProcAddress(hDWM,'DwmIsCompositionEnabled');
@dwmextendframeintoclienterea:=GetProcAddress(hDWM,'dwmextendframeintoclienterea');
如果(@DwmIsCompositionEnabled nil)和
(@dwmextendframeintoclienterea nil)然后
开始
DwmIsCompositionEnabled(@bEnabled);
如果可以的话
开始
xRect:=Rect(-1,-1,-1,-1);
dwmextendframeintoclienterea(FrmMain.Handle,@xRect);
结束;
结束;
免费图书馆(hDWM);
结束;
所以我现在有了漂亮的玻璃窗。由于黑色现在是透明色(有点愚蠢的选择,为什么不能是粉红色),任何黑色的东西也会变成透明色。它意味着所有标签、编辑、按钮文本。。。即使我在设计时将文本设置为其他颜色,DWM仍会使它们具有该颜色和透明性


好吧,我的问题是-是否有可能以某种方式解决这个问题?

Delphi 7以及2006年之前的所有版本在Windows Vista和更新版本中也存在其他问题

Delphi2007是Vista的首个认证版本。我的建议是升级到Delphi2010。您修补Delphi 7的努力对于结果来说太大了。好的,也许您需要将应用程序转换为Unicode(这是一个远没有听起来那么痛苦的过程——特别是如果您使用Embarcadero的论坛和/或本网站),但这是值得的。这不仅是为了Vista的兼容性,也是为了所有与Delphi更新版本一起打包的好东西,尤其是Delphi2010


HTH

人们有时会说“如果它没有坏,就不要修理它”。但也许是时候继续前进了。我会检查2010年的试用版。Thx;)然而,在Vista+上,它有点broken@Gerry:“它有点破了…”谁“它”?德尔福7还是德尔福2007?我想我的回答很清楚……我的意思是“没有坏掉”——我的应用程序在Vista+上运行正常,只是它们没有那种实际上不需要的吸引眼球的功能。不管怎样,现在就去看看2010吧。似乎将大多数控件直接放置在玻璃表面并不是一个好主意。正在寻找解决方法…问题已解决。若将TLabel放置在玻璃表面上,我将其GlowSize设置为非零值。对于表单,我设置DoubleBuffered=true。启用/禁用时,按钮需要显式刷新。到现在为止,一直都还不错。现在,2010年的成本相当高,但我认为这是值得的。谢谢你,普莱思;)