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

Delphi Discussion :

Comment changer dynamiquement la couleur d'une série dans TeeChart ?


Sujet :

Delphi

  1. #1
    Membre habitué

    Homme Profil pro
    Direction financière et formateur en gestion et contrôle de gestion
    Inscrit en
    Mai 2003
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Direction financière et formateur en gestion et contrôle de gestion
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2003
    Messages : 194
    Points : 127
    Points
    127
    Par défaut Comment changer dynamiquement la couleur d'une série dans TeeChart ?
    Bonjour,
    Tout est dans le texte, j'ai tout essayé (sauf ce qui fonctionne bien sur)
    J'ai essayé tout ça :
    Chart1.Series[0].Color:=ColorDialog1.Color;
    (Chart1.Series[0] as TLineSeries).AreaColor:=ColorDialog1.Color;
    (Chart1.Series[0] as TLineSeries).AreaLinesPen.Color :=ColorDialog1.Color;
    (Chart1.Series[0] as TLineSeries).Brush.Color :=ColorDialog1.Color;
    (Chart1.Series[0] as TLineSeries).LinePen.Color :=ColorDialog1.Color;
    (Chart1.Series[0] as TLineSeries).Pen.Color :=ColorDialog1.Color;
    (Chart1.Series[0] as TLineSeries).SeriesColor :=ColorDialog1.Color;
    Rien, j'ai toujours la couleur que j'ai défini dans l'éditeur
    Une idée ?

  2. #2
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    664
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2006
    Messages : 664
    Points : 3 648
    Points
    3 648
    Billets dans le blog
    2
    Par défaut
    Bonsoir,

    Je pense que c'est au moment où tu ajoutes un élément dans la série que tu peux spécifier sa couleur.

    J'ai fait le petit test suivant (Delphi XE8) :
    - j'ai un composant TChart posé sur ma fiche
    - j'ai paramétré un graphique de type camembert avec la palette "Opéra", un objet Series1 de type TPieSeries est créé.
    - dans l'événement FormCreate, j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Series1.Clear;
      Series1.Add(152,'cas1',clRed);
      Series1.Add(402,'cas2',clBlue);
      Series1.Add(210,'cas3',clYellow);
      Series1.Add(98,'cas4',clMaroon);
      Series1.Add(300,'cas5',clLime);
    Les méthodes add des différents objets "series" acceptent un troisième paramètre facultatif de type TColor

  3. #3
    Membre habitué

    Homme Profil pro
    Direction financière et formateur en gestion et contrôle de gestion
    Inscrit en
    Mai 2003
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Direction financière et formateur en gestion et contrôle de gestion
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2003
    Messages : 194
    Points : 127
    Points
    127
    Par défaut
    Bonjour gbegreg,

    Effectivement, on peut affecter une couleur à l'ajout de la donnée. Mais, dans l'éditeur du Chart, on peut changer toutes les couleurs. on a accès aux
    propriétés, parfois de façon moins intuitive -> (Chart1.Series[0] as TLineSeries) pour l'accès aux propriétés des lignes de la séries.

    Quand on regarde l'image de l'éditeur on voit un bouton COLOR, j'ai essayé simplement Chart1.Series[0].Color:=clRed mais ça ne fonctionne pas ...

    Dans l'éditeur on a un bouton BORDER
    Nom : Image.png
Affichages : 778
Taille : 10,3 Ko

    Qui appelle la boite de dialogue suivante
    Nom : Image2.png
Affichages : 761
Taille : 5,2 Ko

    Pour accéder au style de ligne j'ai trouvé : (Chart1.Series[0] as TLineSeries).LinePen.Style:=psSolid qui fonctionne parfaitement bien
    mais (Chart1.Series[0] as TLineSeries).LinePen.Color:=clRed ne fonctionne pas alors qu'en changeant la couleur de BORDER dans l'éditeur, la ligne est bien d'une autre couleur.

    Quand j'essaye d'aller dans le composant pour regarder son code, ben je n'y ai pas accès (impossible de trouver le fichier VCLree.Series.pas)


  4. #4
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 291
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 291
    Points : 1 942
    Points
    1 942
    Par défaut
    Ce que tu cherches est bien SeriesColor. Cela marche si tu n'as pas précisé de couleur au moment de l'ajout du point:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
      with Chart1.Series[0] do begin
        SeriesColor := clyellow;
        for i := 0 to 10 do begin
          if i mod 2 = 0 then
            AddXY(i, i)
          else
            AddXY(i, i, '', clBlue);
        end;
      end;

  5. #5
    Membre habitué

    Homme Profil pro
    Direction financière et formateur en gestion et contrôle de gestion
    Inscrit en
    Mai 2003
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Direction financière et formateur en gestion et contrôle de gestion
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2003
    Messages : 194
    Points : 127
    Points
    127
    Par défaut
    Bonsoir Linkin,
    Le programme fonctionne, mais le truc est de corriger la couleur de la série en dynamique suite à un appel à une colorbox par exemple. Intéressant toutefois le fait de passer ou pas le paramètre couleur.
    Alors, j'ai trouvé, gbegreg m'a mis la puce à l'oreille sur le comportement de TeeChart avec le terme facultatif mais je n'avais pas exploré plus avant cette piste reprise par Linkin.

    Il semblerai que ce composant ne gère pas le "passé", ce qui est tracé est tracé, on ne s'occupe que de ce qui vient. Il suffisait donc de balayer la série (ou du moins les points affichés) et de modifier la couleur :

    (Chart1.Series[0] as TLineSeries).LinePen.Color:=ColorDialog1.Color; // on change la couleur des lignes et des points qui arrivent
    et
    for X:=0 to Chart1.Series[0].count-1
    do (Chart1.Series[0] as TLineSeries).ValueColor[X]:=ColorDialog1.Color; // et là on change ce qui a déjà été dessiné

    Tout le monde à la même couleur, tout va bien

    ... Au forceps ces 2 lignes de rien du tout ... mais c'est nickel
    Merci à vous 2, et si ça peut servir à quelqu'un ... et ben c'est que du bonheur.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 22/12/2012, 15h38
  2. Réponses: 1
    Dernier message: 12/09/2007, 18h11
  3. Réponses: 1
    Dernier message: 29/08/2006, 12h01
  4. Comment changer dynamiquement la valeur d'une option de DbGrid ?
    Par Atrebate62 dans le forum Composants VCL
    Réponses: 4
    Dernier message: 17/03/2005, 13h35
  5. Changer dynamiquement la couleur d'un item d'une listview
    Par little_cypress dans le forum C++Builder
    Réponses: 2
    Dernier message: 29/11/2004, 14h46

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