2010-05-19 5 views
3

J'essaye de refaire certains de mes anciens projets pour supporter Aero Glass. Bien qu'il soit assez facile d'activer le cadre en verre, j'ai rencontré quelques problèmes majeurs. J'ai utilisé ce code:Problèmes avec Aero Glass dans les applications 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; 

J'ai donc eu la jolie fenêtre en verre maintenant. En raison du noir étant la couleur transparente maintenant (choix un peu stupide, pourquoi ne pourrait-il pas être rose) tout ce qui est clBlack devient transparent, aussi. Cela signifie toutes les étiquettes, les modifications, les textes de bouton ... même si je mets du texte à une autre couleur au moment du design, DWM les rend toujours de cette couleur ET transparent.

Eh bien, ma question serait - s'il est possible de résoudre ce problème?

Répondre

3

Delphi 7 et toutes les versions jusqu'à D2006 a également autres problèmes avec Windows Vista et plus récent.

Delphi 2007 est la première version certifiée pour Vista. Mon conseil est de passer à Delphi 2010. Votre effort pour patcher Delphi 7 est trop gros pour le résultat. Ok, peut-être aurez-vous besoin de convertir votre application en Unicode (un processus beaucoup moins douloureux que ça en a l'air - surtout si vous utilisez les forums d'Embarcadero et/ou ce site) mais ça en vaut la peine. Et cela non seulement pour la compatibilité Vista, mais aussi pour tous les goodies qui sont emballés avec les nouvelles versions de Delphi, en particulier avec Delphi 2010.

HTH

+1

Les gens disent parfois « si elle est pas cassé, ne le réparez il". Mais peut-être qu'il est temps de passer à autre chose. Je vais vérifier la version d'essai de 2010. Thx;) – Cralias

+0

Cependant, sur Vista + c'est un peu cassé –

+0

@Gerry: "* C'est * un peu cassé ..." qui "It"? Delphi 7 ou Delphi 2007? Je pense que j'ai été clair dans ma réponse ... –