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 に含まれるすべての機能にも当てはまります。

HTH

于 2010-05-19T16:14:09.927 に答える