3

我正在尝试重新制作一些旧项目以支持 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 仍然使它们具有那种颜色和透明性。

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

4

1 回答 1

3

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

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

高温高压

于 2010-05-19T16:14:09.927 回答