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 :

String Grid et choix d'une couleur pour une ligne [FAQ]


Sujet :

C++Builder

  1. #1
    Nouveau membre du Club Avatar de Gigottine
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 27
    Points : 28
    Points
    28
    Par défaut String Grid et choix d'une couleur pour une ligne
    Bonjour,

    Voila j'ai une String Grid et je voudrais pouvoir mettre le contenu d'une ligne en rouge si elle ne respecte pas une condition aussi non en noir qui est la valeur par défaut.

    Quelqu'un a une idée car moi tout ce que j'arrive à faire c'est toute le String Grid en rouge ou tout en noir.

    Merci d'avance.

  2. #2
    CGi
    CGi est déconnecté
    Expert éminent
    Avatar de CGi
    Inscrit en
    Mars 2002
    Messages
    1 026
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 1 026
    Points : 8 311
    Points
    8 311
    Par défaut
    Dans l'évenement OnDrawCell de ta StringGrid

    tu peut intégrer ACol et ARow dans ton test pour sélectionner
    les lignes et colonne dans lesquel tu est en train d'écrire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol, 
          int ARow, TRect &Rect, TGridDrawState State) 
    { 
            if (TonTest) StringGrid1->Canvas->Font->Color = clRed;                 
    }
    Site : http://chgi.developpez.com

    Pourquoi faire simple quand on peut faire compliqué ? (Jacques Rouxel)

  3. #3
    Nouveau membre du Club Avatar de Gigottine
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 27
    Points : 28
    Points
    28
    Par défaut
    Je ne comprend pas ca ne marche pas et ce n'est pas la faute de ma condition car j'ai mis un else avec une autre couleur et rien ne change.

    Si quelqu'un sait pourquoi ce serai sympa.

    Et encore merci pour ton aide CGI

  4. #4
    JEG
    JEG est déconnecté
    Membre éclairé
    Avatar de JEG
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 211
    Points : 727
    Points
    727
    Par défaut
    Essaye ca, peut-etre que ca marchera (je n'ai pas essayé) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect, TGridDrawState State) 
    { 
            StringGrid1->Canvas->Brush->Color = clRed;
            StringGrid1->Canvas->FillRect(Rect);
    }

  5. #5
    Nouveau membre du Club Avatar de Gigottine
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 27
    Points : 28
    Points
    28
    Par défaut
    Quand tu fais ca, la cellule est remplie de la couleur choisie mais tu n'as plus rien d'écrit dans ta cellule.

    Merci pour ton aide JPEG

  6. #6
    JEG
    JEG est déconnecté
    Membre éclairé
    Avatar de JEG
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 211
    Points : 727
    Points
    727
    Par défaut
    C'est peut-être parceque le texte était déjà écrit en rouge et rouge sur fond rouge ca donne un fond rouge...

    (Même s'il m'arrive quelquefois d'être sage comme une image , mon surnom c'est bien JEG, sans "P", )

  7. #7
    Nouveau membre du Club Avatar de Gigottine
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 27
    Points : 28
    Points
    28
    Par défaut
    Non la couleur de caractère est noir
    Donc je ne sais pas d'ou cela peut provenir.

  8. #8
    JEG
    JEG est déconnecté
    Membre éclairé
    Avatar de JEG
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 211
    Points : 727
    Points
    727
    Par défaut
    et comme ca (ok, c un peu bourrin, mais ca a des chances de marcher) ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect, TGridDrawState State) 
    { 
            AnsiString l_tmp = StringGrid1->Cells[ACol][ARow];
     
            StringGrid1->Canvas->Brush->Color = clRed; 
            StringGrid1->Canvas->FillRect(Rect); 
     
            StringGrid1->Canvas->Font->Color = clBlack; 
            StringGrid1->Cells[ACol][ARow] = l_tmp;
    }

  9. #9
    Membre régulier

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 25
    Points : 81
    Points
    81
    Par défaut
    Essaies ça plutôt :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect, TGridDrawState State) 
    { 
      AnsiString ansCell = StringGrid1->Cells[ACol][ARow];
      TRect rect = StringGrid1->CellRect(ACol, ARow);
      if (ansCell.Length())
      {
        StringGrid1->Canvas->Font->Color = clRed;
        StringGrid1->Canvas->TextRect(rect, rect.Left, rect.Top, ansCell);
      }
    }
    Si tu utilises le code de JEG, ça va bouler sans fin puisqu'à chaque fois que tu vas donner une valeur à StringGrid1->Cells[ACol][ARow], tu vas appeler l'évènement OnDrawCell.

  10. #10
    JEG
    JEG est déconnecté
    Membre éclairé
    Avatar de JEG
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 211
    Points : 727
    Points
    727
    Par défaut
    Si tu utilises le code de JEG, ça va bouler sans fin puisqu'à chaque fois que tu vas donner une valeur à StringGrid1->Cells[ACol][ARow], tu vas appeler l'évènement OnDrawCell.
    c'est pas faux...

    Tit question : Est-ce que StringGrid1->CellRect(ACol, ARow) renvoie le rectangle de délimitation du texte ou celui de la cellule (auquel cas il suffirait de prendre le Rect passé en paramètre de la fonction) ?

  11. #11
    Membre régulier

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 25
    Points : 81
    Points
    81
    Par défaut
    Citation Envoyé par JEG
    Tit question : Est-ce que StringGrid1->CellRect(ACol, ARow) renvoie le rectangle de délimitation du texte ou celui de la cellule (auquel cas il suffirait de prendre le Rect passé en paramètre de la fonction) ?
    Oui, je l'avais oublié celui-là (le Rect passé en paramètre).

    donc modif :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect, TGridDrawState State) 
    { 
      AnsiString ansCell = StringGrid1->Cells[ACol][ARow]; 
      if (ansCell.Length()) 
      { 
        StringGrid1->Canvas->Font->Color = clRed; 
        StringGrid1->Canvas->TextRect(Rect, Rect.Left, Rect.Top, ansCell); 
      } 
    }
    @+
    Fred

  12. #12
    Nouveau membre du Club Avatar de Gigottine
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2002
    Messages : 27
    Points : 28
    Points
    28
    Par défaut
    La dernière solution est la bonne...

    Un grand merci de m'avoir aidé.

  13. #13
    Membre à l'essai
    Inscrit en
    Avril 2002
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 13
    Points : 14
    Points
    14
    Par défaut
    Moi aussi j'en ai eu besoin, et ca marche nickel !

    Merci !
    Ginnovy

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

Discussions similaires

  1. [Débutant] Changer une couleur en une autre sur une figure
    Par Mac52 dans le forum MATLAB
    Réponses: 2
    Dernier message: 26/02/2014, 12h23
  2. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 14h35
  3. Réponses: 3
    Dernier message: 07/08/2008, 14h19
  4. donner une couleur a une partie d'une forme
    Par ralf91 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 04/04/2008, 18h02
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 14h48

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