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

C++Builder Discussion :

[BCB6] Canvas et Color


Sujet :

C++Builder

  1. #1
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 341
    Par défaut [BCB6] Canvas et Color
    Bonjour

    j'ai un souci avec la gestion des couleurs de Font et de Brush.
    J'affiche un TListView à l'aide de CustomDrawSubItem afin de contrôler l'apparence de l'affichage des cellules.
    Ma grille fait 7 colonnes de large et pour chaque ligne de la grille, l'application passe 7 fois dans la procédure ( 7 colonnes ).

    A chaque passage je fixe par défaut la couleur du fond ( Brush ) à clWhite et la couleur de la fonte ( Font ) à clBlack.
    Ensuite selon des critères, je modifie les couleurs du texte et du fond. Mais s'il n'y a pas de critère, les couleurs sont celles par défaut définies en début de procédure.

    Ben si lors d'un passage, la couleur de la fonte est fixée à clRed par exemple, elle reste rouge pour les colonnes suivantes alors que je rappelle qu'à chaque entrée dans la procédure, les couleurs par défaut sont définies.

    Lors du débogage, Canvas->Brush->Color et Canvas->Font->Color prennent bien les valeurs par défaut, mais il n'empêche que les cellules ne sont pas affichée avec ces paramètres !

    Quelqu'un a-t-il déjà été confronté à ce problème ?

    @+

  2. #2
    Membre émérite
    Avatar de Interruption13h
    Inscrit en
    Août 2005
    Messages
    603
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 603
    Par défaut
    Salut !

    Peut on voire ce que t'as fait côté code

    ++

  3. #3
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 341
    Par défaut
    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
    35
    36
    37
    38
    CustomDrawSubItem( TCustomListView *Sender, TListItem *Item,
          int SubItem, TCustomDrawState State, bool &DefaultDraw)
    {
      int i1, i2;
      TCanvas* pCanvas;
      SAdherent* pEnfant;                              // Pointeur sur base données
      TDate Naissance;
      pCanvas = ((TListView *)Sender)->Canvas;
    
      pCanvas->Brush->Color = clWhite;                        // Par défaut
      pCanvas->Font->Color = clBlack;
      switch( SubItem )
      {
      case NAISSANCE:  // Valeur 2 indiquant affichage de ma 2ème colonne
        Bla bla, bla bla ...
        if( i1 >= i2 )
        {
          pCanvas->Font->Color = clRed;
        }
        break;
     
      case TAUX:    // Valeur 4 indiquant 4ème colonne en cours d'affichage
        Bla bla, bla bla ...
        if( i2 < i1 )
        {
          pCanvas->Brush->Color = clYellow;
        }
        break;
     
      case SOLDE:
        Bla bla, bla bla ...
        if( i1 <= 0 )
        {
          pCanvas->Brush->Color = 0x00B1B1FF;  // Couleur rose
        }
        break;
      }
    }
    Pour chaque cellule de la ligne ( 7 colonnes au total ), cette procédure est appelée. Et par défaut la couleur de fond est mise à clWhite, la couleur de la fonte est mise à clBlack. Si la colonne en cours d'affichage n'est ni NAISSANCE, TAUX ou SOLDE, les couleurs par défaut ne sont pas modifiées. Pourtant lorsque je passe dans le cas NAISSANCE et que la couleur est modifiée, toutes les cellules suivantes garderont la couleur rouge. Le positionnement aux couleurs par défaut semble ignoré lors des appels suivants.

    Voila c'est un peu long,mais j'espère que c'est clair.

    @+

  4. #4
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 341
    Par défaut
    L'enquête avance...

    En fait lorsque je fixe les couleurs par défaut :
    Font = clBlack et Brush = clWhite, c'est pas pris en compte.

    Par contre, si je fixe un couple
    Font = clBlue et Brush = clWhite
    ou
    Font = clBlack et Brush = clSilver

    et bien là ça marche !

    Alors là j'en perd mon C++... euh mon latin !

    Avis aux amateurs ...

  5. #5
    Membre Expert Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 341
    Par défaut
    J'ai résolu mon problème !

    J'avais fixé dans l'inspecteur d'objets la propriété Color à clWhite.
    Or cette propriété est par défaut clWindow.

    Apparemment lorsque l'on choisit par programme la couleur de Canvas->Brush de la même couleur que celle du composant, il y a un dysfonctionnement.
    J'ai essayé avec d'autres couleurs, ce phénomène se répète à chaque fois.

    Donc j'ai remis la propriété Color du composant à clWindow et maintenant, je peux fixer la couleur de Canvas->Brush à clWhite par programme, cela fonctionne. Allez comprendre...

    @+ sur 3W!

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

Discussions similaires

  1. Timage et Canvas??
    Par vanack dans le forum C++Builder
    Réponses: 4
    Dernier message: 14/04/2007, 11h38
  2. [Canvas] Listbox, couleur et multiselect
    Par rbag dans le forum Composants VCL
    Réponses: 3
    Dernier message: 25/09/2002, 13h02
  3. TObject->Color et composantes RGB
    Par Flo. dans le forum C++Builder
    Réponses: 10
    Dernier message: 14/06/2002, 17h07
  4. [Kylix] Memo color
    Par Metal3d dans le forum EDI
    Réponses: 1
    Dernier message: 21/05/2002, 17h12
  5. Réponses: 2
    Dernier message: 17/05/2002, 20h37

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