Un form transparant de 0 a 100 % et sa marche vraiment (xp/2000)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 563 fois - Téléchargée 34 fois

Contenu du snippet

Je sais je sais cette source est déja présente sur ce site MAIS on ne le dira jamais assez Windows XP et 2000 integrent une fonction génial qui permet a un form d'être transparant de 00 à 100 % et le tout parfaitement le plus naturellement du monde sans le moindre bug ni effet merdique...
le seul probleme peut etre est la consomation de RAM et le procede DIRECTX utilisé qui fait que sa peut perturber un peu les jeux et la lecture video mais c'est tout.

Source / Exemple :


Option Explicit

Global Const WS_EX_LAYERED = &H80000
Global Const LWA_COLORKEY = &H1
Global Const LWA_ALPHA = &H2
Global Const GWL_EXSTYLE = (-20)

Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hWnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Boolean
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Public Sub Trans(Stat As String, Fenêtre As Form, Optional ByVal Alpha As Byte = 255)
Select Case UCase(Stat)
Case "ON"
    SetWindowLong Fenêtre.hWnd, GWL_EXSTYLE, GetWindowLong(Fenêtre.hWnd, GWL_EXSTYLE) Or WS_EX_LAYERED
    SetLayeredWindowAttributes Fenêtre.hWnd, 0, Alpha, LWA_ALPHA
Case "OFF"
    SetWindowLong Fenêtre.hWnd, GWL_EXSTYLE, GetWindowLong(Fenêtre.hWnd, GWL_EXSTYLE) - WS_EX_LAYERED
Case "SET"
    SetLayeredWindowAttributes Fenêtre.hWnd, 0, Alpha, LWA_ALPHA
End Select
End Sub

Conclusion :


'pour activer la transparence :
Trans "ON",me,level
'Pour désactiver la transparence :
Trans"OFF",me
'Pour régler la transparence :
Trans "SET",me, level

Ou level contient un nombre de 0 à 255 qui est le niveau de transparance, a savoir :
0 totalement transparent
255 pas transparent du tout

A voir également

Ajouter un commentaire

Commentaires

Messages postés
81
Date d'inscription
jeudi 19 février 2004
Statut
Membre
Dernière intervention
18 avril 2008

Je sais que ça fait longtemps que cette source est inactive mais je vous donne la correction du bug discuté précédemment. L'erreur se situe ici :

Case "OFF"
SetWindowLong Fenêtre.hWnd, GWL_EXSTYLE, GetWindowLong(Fenêtre.hWnd, GWL_EXSTYLE) - WS_EX_LAYERED

Il faut remplacer le - par And Not. Donc on obtient :

Case "OFF"
SetWindowLong Fenêtre.hWnd, GWL_EXSTYLE, GetWindowLong(Fenêtre.hWnd, GWL_EXSTYLE) And Not WS_EX_LAYERED
Messages postés
116
Date d'inscription
jeudi 12 juillet 2001
Statut
Membre
Dernière intervention
23 juin 2005

je sais pas j'ai jamais essayer en tt cas peut etre que sa pourrait le faire si tu designe ta fauille fille dans le ME a la place du container mais a mon avis cela semble tres peu probable etant donné que la transparence d'une child servirai a voir.... le fond de ta MDI Parrent
encore une foi faut demander a M$ ou au MSND
Messages postés
13
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
16 mars 2006

Je note 7.5/10 pour la facilité de l’utilisation de cette procédure, mais je vois qu’elle ne concerne pas les feuille MDI_child, y’a-t-il modification à faire pour qu’elle soit opérationnelle pour tous les types de fenêtres ?
Messages postés
17
Date d'inscription
mercredi 2 avril 2003
Statut
Membre
Dernière intervention
15 mai 2003

Ouai, j'ai vu ça il y a assez longtemps... je crois que dans le module, il y a un "or" alors qu'il faut mettre une virgule... je sais pas si c'est un BUG ou si c'est une fonction de windows, ce que je sais, c'est que ça n'a rien à faire là.
Messages postés
116
Date d'inscription
jeudi 12 juillet 2001
Statut
Membre
Dernière intervention
23 juin 2005

dsl si bug il y a il faut s'adresser A Micro$oft car cette exemple ne fait qu'exploiter une API fournit par M$...
Afficher les 20 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.