Utilisation de la fonction api gradientfillrect pour faire un dégradé de couleur

Soyez le premier à donner votre avis sur cette source.

Snippet vu 7 360 fois - Téléchargée 29 fois

Contenu du snippet

Ce code est à placer dans une feuille (Form1) avec un bouton de commande (Command1). Copier le code
dans la feuille et lancer le programme. Le dégradé apparaîtra sur la feuille lors d'un clic sur le
bouton de commande.

Source / Exemple :


'Fonction API
Private Declare Function GdiGradientFillRect Lib "gdi32" Alias "GdiGradientFill" (ByVal hdc As Long, pVertex As TRIVERTEX, ByVal dwNumVertex As Long, pMesh As GRADIENT_RECT, ByVal dwNumMesh As Long, ByVal dwMode As Long) As Long

'Types personnalisés
Private Type TRIVERTEX 'Le type TRIVERTEX sert à définir les paramètres du dégradé.
    x As Long
    y As Long
    Red As Integer
    Green As Integer
    Blue As Integer
    Alpha As Integer
End Type

Private Type GRADIENT_RECT
    UpperLeft As Long
    LowerRight As Long
End Type

Private Sub Command1_Click()
    Dim vert(1) As TRIVERTEX 'un dégradé défini par deux couleurs a des paramètres dans les variavles vert(0) et vert(1)
    Dim gRect As GRADIENT_RECT

'Il faut paramétrer les extrémums du dégradé :
'ici le dégradé ira du noir au bleu
'Malheureusement les couleurs ne fonctionnent pas de la même manière que RGB. Il faut les convertir
'd'abord, ce qui est fait par la fonction TransfCol plus bas.
'Grâce à cette fonction, vous pouvez rentrer les couleurs comme avant juste en appelant la fonction

    With vert(0)
        .x = 0
        .y = 0
        .Red = Transfcol(0)
        .Green = Transfcol(0)
        .Blue = Transfcol(0)
        .Alpha = Transfcol(0)
    End With
    With vert(1)
        .x = Me.ScaleWidth
        .y = Me.ScaleHeight
        .Red = Transfcol(0)
        .Green = Transfcol(0)
        .Blue = Transfcol(255)
        .Alpha = Transfcol(0)
    End With
    gRect.UpperLeft = 1: gRect.LowerRight = 0
    GdiGradientFillRect Me.hdc, vert(0), 2, gRect, 1, 0
    'le 2 après vert(0) correspond au nombre de variables de type TRIVERTEX
    'le 1 après gRect correspond au nombre de variables de type GRADIENT_RECT
    'la dernière valeur correspond au sens du dégradé : 0=Horizontal, 1=Vertical.
End Sub

Private Function TransfCol(ByVal Col As Integer) As Double
    If Col = 0 Then
    TransfCol = 0
    ElseIf Col > 127 Then
    a = 256 - Col
    TransfCol = -(256 * a)
    Else
    a = Col
    TransfCol = 256 * a
    End If
End Function

Conclusion :


Bientôt sera ajouté le code d'un contrôle barre de vie faisant un dégradé.

A voir également

Ajouter un commentaire Commentaires
Messages postés
11
Date d'inscription
mercredi 8 septembre 2004
Statut
Membre
Dernière intervention
27 juillet 2005

Ok merci.
Messages postés
908
Date d'inscription
jeudi 26 juillet 2001
Statut
Modérateur
Dernière intervention
1 février 2015
2
clique sur mon nom puis regarde un peu les sources que jai déjà déposées sur le site.
Messages postés
11
Date d'inscription
mercredi 8 septembre 2004
Statut
Membre
Dernière intervention
27 juillet 2005

code très très interessant. Merci beaucoup.
Mais comment definir plus de 2 couleurs pour le dégradé?
Quelles sont les numero de codesources qui montrent comment faire des dégradés dans des triangles?
Messages postés
908
Date d'inscription
jeudi 26 juillet 2001
Statut
Modérateur
Dernière intervention
1 février 2015
2
c'est déjà sur le site :)
n'oublions pas que si cette fonction permet de faire des dégradés linéaires, elle permet aussi de faire des dégradés dans des triangles, à l'aide de barycentre des couleurs ( voir mes sources ;) )
Messages postés
180
Date d'inscription
jeudi 21 août 2003
Statut
Membre
Dernière intervention
26 novembre 2007
2
Ah désolé, il faut mettre l'échelle en pixel, donc à ajouter ce code dans le tien :
Private Sub Form_Load()
Me.ScaleMode = vbPixels
End Sub
Afficher les 6 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.