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

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

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.