couleurs pas affichées dans un FlexGrid
Salut
Toujours mon projet de cercle chromatique... et d'harmonies de couleurs...
Cette fois-ci, c'est un problème d'affichage de couleur complémentaire entre le noir et le blanc!
J'ai deux Sliders qui modifient la saturation pour l'un et la luminosité pour l'autre (modèle TSL: Teinte, Saturation et Luminosité). Celui de la luminosité part du blanc vers le noir en passant au milieu par la couleur modifiée ou non par la valeur de saturation. Le hic, c'est que quand le slider Luminosité est sur le blanc ou le noir, celles-ci ne s'affichent pas correctement dans la grille d'affichage. Volir l'image.
J'ai un tableau de type personalisé pour garder sous la main les valeurs calculées
Code:
1 2 3 4 5 6 7 8 9
| Private Type THarmonie
ptX As Single
ptY As Single
Couleur As Long
Luminosite As Long
Saturation As Long
End Type
Dim Harmonie(0 To 3) As THarmonie |
Quand je clique sur le cercle chromatique ou que je déplace les sliders, les couleurs sont calculées et stockées dans le tableau
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| Private Sub CalculerHarmonie(ByVal C As Long, ByVal X As Single, ByVal Y As Single)
' couleur sélectionnée
Harmonie(0).Couleur = C
Harmonie(0).ptX = X
Harmonie(0).ptY = Y
Harmonie(0).Saturation = lblCouleurSat(slrSatur.Value).BackColor
Harmonie(0).Luminosite = lblCouleurLum(slrLumin.Value).BackColor
Select Case HarmonieType
Case 0 ' complémentaire naturelle
With Harmonie(1)
.Couleur = &HFFFFFF - C
.ptX = picCercle.Width - X
.ptY = picCercle.Height - Y
.Saturation = &HFFFFFF - Harmonie(0).Saturation
.Luminosite = &HFFFFFF - Harmonie(0).Luminosite
End With
With Harmonie(2)
.Couleur = &HFFFFFF
.ptX = 0
.ptY = 0
.Saturation = &HFFFFFF
.Luminosite = &HFFFFFF
End With
With Harmonie(3)
.Couleur = &HFFFFFF
.ptX = 0
.ptY = 0
.Saturation = &HFFFFFF
.Luminosite = &HFFFFFF
End With
Case 1 ' complémentaires doubles (en triangle)
Harmonie(1).Couleur = &HFFFFFF ' initialisée à vide (blanc)
Harmonie(1).ptX = 0
... |
Je vous fais grâce du reste de la procédure car pour l'instant je n'ai calculé que pour la complémentaire simple.
Et finalement, la procédure que je crois fautive... Mais j'ai beau regarder... 8O j'en perds mon latin (heu... je connaissais le latin, moi?...)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| Private Sub RemplirGrille()
Dim i As Integer
' Couleur
mfgHarmonie.Row = 1
For i = 0 To UBound(Harmonie)
With mfgHarmonie
.Col = i + 1
.TextMatrix(2, .Col) = Hex(Harmonie(i).Couleur)
.TextMatrix(4, .Col) = Hex(Harmonie(i).Saturation)
.TextMatrix(6, .Col) = Hex(Harmonie(i).Luminosite)
.Row = 1
.CellBackColor = Harmonie(i).Couleur
.Row = 3
.CellBackColor = Harmonie(i).Saturation
.Row = 5
.CellBackColor = Harmonie(i).Luminosite
End With
Next
End Sub |
mfgHarmonie est un FlexGrid... comme mentionné dans le titre.
Images :