2010-05-19 53 views
3

我想重拍我的一些舊項目的支持Aero玻璃。雖然啓用玻璃框架很容易,但我遇到了一些主要問題。我用這個代碼:問題與Aero玻璃在Delphi 7個應用程序

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; 

所以我現在拿到了漂亮的玻璃櫥窗。由於黑色現在是透明的顏色(有點愚蠢的選擇,爲什麼它不是粉紅色),所有的黑色變得透明。它意味着所有的標籤,編輯,按鈕文本...即使我在設計時將文本設置爲其他顏色,DWM仍然使它們變得顏色透明。

好吧,我的問題是 - 是否有可能以某種方式解決這個問題?

回答

3

德爾福7和所有的版本,直到D2006也其他與Windows Vista和更新的問題。

德爾福2007年是Vista的拳頭版認證。我的建議是升級到德爾福2010年。你修補Delphi 7的努力對於結果來說太大了。好吧,也許你需要將你的應用程序轉換爲Unicode(這聽起來不那麼痛苦 - 尤其是如果你使用Embarcadero的論壇和/或本站),但這是值得的。而這不僅對Vista的兼容性也爲這都擠滿了德爾福的新版本,尤其是與德爾福2010年

HTH

+1

人們有時會說:「如果不破它的所有好東西,不解決它」。 但也許是時候繼續前進。我查一下2010年 THX的試用版;) – Cralias 2010-05-19 17:46:32

+0

然而,在Vista +實在是有點破 – 2010-05-19 20:40:19

+0

@Gerry:「* *這是一個有點壞了......」誰「它」?德爾福7或德爾福2007?我想我是在我的回答清楚... – 2010-05-20 06:50:58