IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

couleurs pas affichées dans un FlexGrid


Sujet :

VB 6 et antérieur

  1. #1
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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... j'en perds mon latin (heu... je connaissais le latin, moi?...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 :

  2. #2
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Bonjour zaza.

    Je ne sais pas qui, du peintre ou du Vbéiste, va aujourd'hui te répondre.

    Le peintre te dirait que ni le blanc ni le noir n'existent. Il y a plusieurs blancs et plusieurs noirs. Le noir est une couleur portée à son extrême. Le blanc est un mélange de toutes les couleurs...

    Le Vbéiste te dirait :

    -qu'il a l'habitude de traiter les couleurs en les décomposant en leurs composantes R G B. Et de traiter à partir de chacune de ces composantes.

    - il te dirait également que des difficultés vont certainement surgir, en informatique, lorsque l'on traite la "couleur" 255,255,255 ou la "couleur" 0,0,0...
    Que sont en effet ces "couleurs", toutes 2 arrivées au maximum de ce que permet l'informatique dans l'état actuel des choses ?
    C'est surtout vrai en ce qui concerne le "noir" 0,0,0. Quel noir serait-ce et à quelle saturation de quelle couleur primaire correspondrait-il ?

    Il n'existe hélas pas de plus petit que 0,0,0 ni de plus grand que 255,255,255.

    Peut-on éclaircir le 255,255,255 ? non
    peut-on assombrir le 0,0,0 ? non plus
    Quelle est alors la couleur dominante dans l'une ou l'autre de ces 2 couleurs ? Bien malin qui peut y répondre...
    Comment alors, déterminer une harmonique, une complémentaire, etc... ?
    Comment peut-on dans ces cas, assurer un contraste avec précision (comment contraster encore plus, par exemple, une image composée uniquement de 0,0,0 et de 255,255,255 ? On ne peut pas non plus, bien évidemment.

    Continuons : comment éclairicr le 0,0,255 ?
    On peut toujouirs augmenter chacun des deux 0 mais on ne peut pas augmenter le 255 ! On éclaircit alors, mais forcément en s'écartant de la teinte.
    Comment assombrir le 0,0,255 ? on peut toujours diminuer le 255 mais comment diminuer les 0, dans cette affaire ? On assombrit, oui, mais forcément en s'écartant là aussi de la teinte...

    Etc... etc...

    pour m'arrêter peut-être à cette question (qui est à la fois une réponse) que tu comprendras fort bien :

    Comment éclaircir ou assombrir, par exemple, le pixel RGB(0,20,255) tout en gardant les proportions d'origine entre ses composantes R, G et B ? : IMPOSSIBLE.

    Le peintre pleure...

    Bon dimanche.

  3. #3
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Bon je vois que faut que je ré-explique plus clairement

    Calcul de la complémentaire simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    complémentaire = &HFFFFFF - couleurCourante
    D'une simplicité enfantine

    Le hic, c'est que si ma couleur courante est &HFFFFFF, sa complémentaire devrait être zéro... et inversement. Or, j'ai vérifié l'calcul et il est bon vu l'affichage des valeurs (voir les images plus haut). Mais alors pourquoué (comme dirait Annie Cordy) le noir ne s'affiche pas! Serait-elle interdite pour la propriété CellBackColor?

  4. #4
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    c'est dans l'aide en ligne VB ... il faut mettre 1..

    Citation Envoyé par Aide en ligne CellBackColor, CellForeColor, propriétés
    Remarques
    La modification de cette propriété affecte la cellule ou la sélection en cours, en fonction de la valeur de la propriété FillStyle.
    La définition de l'une de ces propriétés sur 0 entraîne le contrôle MSHFlexGrid à colorier la cellule en utilisant les couleurs standard d'arrière-plan et de premier plan. Si vous souhaitez définir l'une de ces propriétés sur noir, remplacez la valeur 0 par la valeur 1.

  5. #5
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    peur-être que ceci saura expliquer celà

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Private Sub Command1_Click()
      Dim toto As Long, tata As Long, titi As Long
      toto = RGB(255, 255, 255) 'c'est du blanc
      Text1.BackColor = toto
      Text1.Text = "voilà ma couleur (blanc)"
      tata = &HFFFFFF
      Text1.BackColor = tata
      If toto = tata Then MsgBox "&HFFFFFF & RGB(255,255,255) sont la même couleur"
      Text2.BackColor = tata
      titi = RGB(100, 100, 100) ' c'est du gris
      Text2.BackColor = titi
      Text2.Text = "voilà du RGB(100,100,100)"
      Text3.BackColor = Text1.BackColor - Text2.BackColor
      Text3.Text = "voilà ce que donne le résultat"
      Text4.BackColor = Text1.BackColor - Text1.BackColor
      Text4.ForeColor = Text1.BackColor
      Text4.Text = "voila du noir"
    End Sub
     
    Private Sub Form_Activate()
      Me.Move 0, 0, 4000, 4000
      Text1.Move 0, 0, 3000
      Text2.Move Text1.Left, Text1.Top + Text1.Height, 3000
      Text3.Move Text2.Left, Text2.Top + Text2.Height, 3000
      Text4.Move Text3.Left, Text3.Top + Text3.Height, 3000
      Command1.Move Text4.Left, Text4.Top + Text4.Height
    End Sub

  6. #6
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Merci bbil

    J'étais justement à relire la version anglaise de cette rubrique (car j'ai la version anglaise de VB6... erreur de choix lors de la commande... maintenant, je fais avec).

    Setting either of these properties to zero causes MSHFlexGrid to paint the cell using the standard background and foreground colors. If you want to set either of these properties to black, set them to one instead of zero.
    Curieux, tout de même!

    jmf, je crois que tu fends les cheveux en quatre. Y'a longtemps que je connais la fonction RGB et la valeur entier long d'une couleur...
    En passant, j'ai des problèmes avec ma révision de la trigo... je peux t'en parler sur mp?

  7. #7
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    je peux t'en parler sur mp?
    tu es la bienvenue, zaza.
    Tu n'as pas à me demander cette permission. Tu l'as de façon permanente.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Page aspx pas affichée dans ie7
    Par isadel dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 08/08/2007, 18h15
  2. Modifier le contenus d'une table Access affiché dans un FlexGrid
    Par Agrume-Framboise dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 07/06/2007, 08h37
  3. pages ASP pas affichées dans internet explorer 7
    Par Monbasinstinct dans le forum ASP
    Réponses: 16
    Dernier message: 18/02/2007, 13h45
  4. [JFrame] Ne pas afficher dans la barre d'application de WIN
    Par nicolas.pied dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 06/01/2006, 14h15
  5. Afficher dans un flexgrid
    Par Terminator dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 18/10/2005, 14h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo