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

时间:2010-05-19 10:17:18

标签: 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: 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;

所以我现在得到了漂亮的玻璃窗。由于黑色现在是透明的颜色(有点愚蠢的选择,为什么它不能是粉红色)clBlack的任何东西也变得透明。它意味着所有标签,编辑,按钮文本......即使我在设计时将文本设置为其他颜色,DWM仍然使它们变得透明。

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

1 个答案:

答案 0 :(得分:3)

Delphi 7和直到D2006的所有版本在Windows Vista和更新版本中也存在其他问题。

Delphi 2007是Vista的第一个认证版本。我的建议是升级到Delphi 2010.你修补Delphi 7的努力对于结果来说太大了。好吧,也许您需要将您的应用程序转换为Unicode(这听起来不像听起来那么痛苦 - 特别是如果您使用Embarcadero的论坛和/或此站点),但值得付出努力。这不仅适用于Vista兼容性,也适用于所有包含新版本Delphi的好东西,特别是Delphi 2010。

HTH