Classe jouant avec la transparence entre 2 controles et un degrader pour faire des menu ou des boutons

Soyez le premier à donner votre avis sur cette source.

Vue 5 954 fois - Téléchargée 974 fois

Description

En faite, ce code est une classe que j’ai crée pour réaliser le menu de mon TPE (voir image) il a ete coder un peu sur mesure et a l’arrache donc il y aura surement des mise a jour pour ajouter des fonction et simplifier encore son utilisation.

On y apprend a cree un degrader a faire fusionner 2 images le tous en se servant des API.

API utiliser :
CreateCompatibleBitmap
CreateCompatibleDC
GetDC
DeleteDC
DeleteObject

AlphaBlend
RtlMoveMemory

GradientFill
SetPixel
StretchBlt

Pour mieux se rendre conte de se a quoi sert le code regarder l’image (le menu et la barre de titre sont cree grace a la classe)

Source / Exemple :


'Extrait : Fonction principale

Private Function Fusion(vObj As Object)
 Dim BF As BLENDFUNCTION, lBF As Long
 Dim i As Long
       
    For i = 0 To vObj.ScaleWidth
        BF.SourceConstantAlpha = 255 - Int(255 / vObj.ScaleWidth * i)
        RtlMoveMemory lBF, BF, 4
        
        AlphaBlend vObj.hdc, i, 0, 1, vObj.ScaleHeight, vDCDegrader, 0, 0, 1, vObj.ScaleHeight, lBF
    Next i
End Function

Private Function Make_Degrader(vObj As Object, vColor1 As Long, vColor2 As Long) As Boolean
 Dim R As Byte, G As Byte, B As Byte
 
 Dim gRect      As GRADIENT_RECT
 Dim vVertex(1) As TRIVERTEX
 
    'BMP degrader
    vDCDegrader = CreateCompatibleDC(GetDC(0))
    vBMPDegrader = CreateCompatibleBitmap(GetDC(0), 1, vObj.ScaleHeight)
    Call SelectObject(vDCDegrader, vBMPDegrader)
 
    gRect.UpperLeft = 0
    gRect.LowerRight = 1
    
    Call GetRGB(vColor1, R, G, B)
                
    vVertex(0).X = 0
    vVertex(0).Y = 0
    vVertex(0).Red = "&H" & Hex(R / 16 * 256 * 16)
    vVertex(0).Green = "&H" & Hex(G / 16 * 256 * 16)
    vVertex(0).Blue = "&H" & Hex(B / 16 * 256 * 16)
    vVertex(0).Alpha = 0
                
    Call GetRGB(vColor2, R, G, B)
                
    vVertex(1).X = 1
    vVertex(1).Y = vObj.ScaleHeight
    vVertex(1).Red = "&H" & Hex(R / 16 * 256 * 16)
    vVertex(1).Green = "&H" & Hex(G / 16 * 256 * 16)
    vVertex(1).Blue = "&H" & Hex(B / 16 * 256 * 16)
    vVertex(1).Alpha = 0
    
    Make_Degrader = GradientFill(vDCDegrader, vVertex(0), 2, gRect, 1, GRADIENT_FILL_RECT_V)
    
    If vStyle = 1 Then
        Call SetPixel(vDCDegrader, 0, 0, vStyleColor)
        Call SetPixel(vDCDegrader, 0, vObj.ScaleHeight - 1, vStyleColor)
    End If
End Function

Conclusion :


Il reste encore beaucoup a faire pour la rendre veritablement interessante, notament en remplacent la classe par un controleuser mais mon principale probablement est de recuperer l’image de fond de contrôle sur lequel est le contrôle est (ceux qui liron le code me comprendrons) donc si quelqu'un a une idee je suis ouvert (mes principale recherche pour la recuperer se sont tourner sur le DC mais du contrôle mais je n’est jamais reussi a recuperer l’image)

L’autre souci est qu’il est impossible de superposer plusieurs contrôle.

Voilà toute aide est la bien venu (remarque constructive et encouragement aussi :)

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
307
Date d'inscription
lundi 17 juillet 2006
Statut
Membre
Dernière intervention
27 mai 2012
3
salut, une bonne source et compréhensible à souhait.
a quant le contrôle activX cbMenu ? et cbBouton ?
Un grand bravo
Messages postés
2215
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
16 juillet 2009

Zut j'ai justement croisé une source comme ça aujourd'hui il faudrait que je la retrouve.
C'était pas une source de toi d'ailleurs DarkSidious ?
(avec la transparence sous win9x)
Messages postés
122
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
15 février 2011

Merci a tous, vos commentaires me font tres plaisir.
Cependant pour pouvoir ameliorer ma classe j’aurais besoin de recuperer le DC du contrôle parent pour recuperer l’image qui est en dessous et je ne trouve pas d’api pour si quelqu’un a une idee je suis preneur. J’ai poster une question dans le forum, il y a deja eu des tentative de reponce mais aucune ne convient, si vous voulez m’aidee c’est par ici
http://www.vbfrance.com/forum.v2.aspx?ID=391497
Messages postés
796
Date d'inscription
jeudi 17 mai 2001
Statut
Membre
Dernière intervention
5 mai 2009
5
Très très sympa l'effet.
Et le codage soigné...
Un bon 9 !
Messages postés
1488
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
3 décembre 2007
22
"Cool", très bon effet...

10/10
Afficher les 11 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.