Проблемы с Aero Glass в приложениях Delphi 7 - PullRequest
3 голосов
/ 19 мая 2010

Я пытаюсь переделать некоторые из моих старых проектов для поддержки 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 Ответ

3 голосов
/ 19 мая 2010

Delphi 7 и все версии до D2006 также имеют другие проблемы с Windows Vista и новее.

Delphi 2007 является первой версией для Vista. Мой совет - перейти на Delphi 2010. Ваши усилия по исправлению Delphi 7 слишком велики для результата. Хорошо, возможно, вам нужно будет преобразовать ваше приложение в Unicode (гораздо менее болезненный процесс, чем кажется - особенно если вы используете форумы Embarcadero и / или этот сайт), но оно того стоит И это не только для совместимости с Vista, но и для всех вкусностей, которые упакованы с более новыми версиями Delphi, особенно с Delphi 2010.

НТН

...