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

Composants VCL Delphi Discussion :

Couleur dans une cellule d'une TStringGrid


Sujet :

Composants VCL Delphi

  1. #1
    Membre habitué
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2003
    Messages
    397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mars 2003
    Messages : 397
    Points : 165
    Points
    165
    Par défaut Couleur dans une cellule d'une TStringGrid
    Bonjour,

    j'ai ce bout de code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
               for j:=1 to qt do
                begin
                   seek(fich_cave,j);read(fich_cave,enregvin);
                   Gril_visu.Cells[0,j-1]:=enregvin.vignoble;
                   Gril_visu.Cells[1,j-1]:=enregvin.legende;
                   gril_visu.Canvas.Brush.Color:=enregvin.leg_couleur;
                end;
    et je n'arrive pas à mettre la couleur de fond issue de mon fichier dans la cellule repérée en rouge. (la ligne en bleu ne marche pas).

    Pour info je récupère bien les valeurs de mon fichier donc le problème se situe dans le code

    si quelqu'un peut m'aider d'avance merci

  2. #2
    Expert éminent sénior

    Avatar de Nono40
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2002
    Messages
    8 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Loir et Cher (Centre)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 8 640
    Points : 19 104
    Points
    19 104

  3. #3
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 54
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut


    Je rajouterais aussi qu'une recherche dans le forum peut aussi aider...

  4. #4
    Membre habitué
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2003
    Messages
    397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mars 2003
    Messages : 397
    Points : 165
    Points
    165
    Par défaut
    Merci, j'avais déjà lu et vu ce code

    http://delphi.developpez.com/faq/?pa...leurstringgrid

    que j'utilise par ailleurs. Mais soit je ne suis pas doué (ce que je soupçonne), soit je me suis mal expliqué, soit ce que je cherche n'est pas réalisable.
    Je m'explique :

    J'ai une grille (Stringgird) avec deux colonnes
    dans les cellules de la première colonne je charge une valeur string issue d'un fichier (pas de problème)
    dans les cellules de la seconde colonne je charge également une valeur string toujours issue de mon fichier mais je veux également de modifier à chaque fois la couleur de fond également issue d'un champ Tcolor de mon fichier.
    Donc à chaque ligne je dois avoir une cellule fond blanc et texte noir et une cellule fond coloré (définie par mon fichier) et texte noir.

    Jusque maintenant je n'ai réussi a avoir que toutes les cellules de toutes les lignes de la même couleur (la dernière couleur issue de mon fichier)

    merci

  5. #5
    dem
    dem est déconnecté
    Membre habitué

    Inscrit en
    Juillet 2003
    Messages
    114
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Juillet 2003
    Messages : 114
    Points : 141
    Points
    141
    Par défaut
    Normalement il te suffit juste d'adapter la partie de code (indiquée dans la FAQ)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     { sélection de la couleur de fond }
        If gdFixed in State
          Then Brush.Color := clBtnFace
          Else If gdSelected In State
            Then Brush.Color := clNavy
            Else If Odd(ARow)
              Then Brush.Color := $FFE0FF
              Else Brush.Color := $FFFFE0;
    pour en faire ce que tu veux. Ici les lignes paires et impaires ont des couleurs différentes mais à toi de changer la couleur du fond comme tu veux en fonction de valeurs de variables affectées ailleurs dans ton code.

    Je l'avais fait il y a longtemps (un dev que je n'ai plus sur mon disque ) pour donner une couleur de plus en plus vive au fond en fonction de la valeur de la cellule, faudrait que je retombe sur ce bout de code mais c'est tout à fait possible.

    Si tu ne t'en sors pas j'essaierai de le retrouver dans mes sauvegardes.

  6. #6
    Expert confirmé

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Points : 4 173
    Points
    4 173
    Par défaut
    En fait, le composant TStringGrid ne permet pas de définir directement l'apparence de chaque cellule indépendemment des autres.

    Pour avoir une cellule qui s'affiche différemment, il faut la dessiner soit-même grâce à l'événement OnDrawCell. C'est ce que font tous les exemples qui ont été donnés précédemment.

    Dans ton cas, il faut que tu mémorises la couleur de fond de chaque ligne (dans une autre structure de données), pour ensuite dessiner la cellule correctement.

    A ta place, j'utiliserais carrément une TDrawGrid plutôt qu'une TStringGrid :

    Au chargement, tu lis les données dans un tableau de enregvin, avec un code du genre :

    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
    var  tbenregvin : array of enregvin;
        qt : integer;
        fich_cave : file of enregvin;
        i : integer;
    begin
      qt := 20;
     
      SetLength(tbenregvin, qt);
      seek(fich_cave, 1);
      for i := 0 to qt-1 do
      begin
        read(fich_cave, tbenregvin[i]); // lecture de l'enregistrement
      end;
      gril_visu.RowCount := qt;
    end;
    Puis tu code l'événement OnDrawCell de la TDrawGrid avec un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    procedure TForm2.gril_visuDrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    var grd : TDrawGrid;
    begin
      grd := TDrawGrid(sender);
      case ACol of
      0 : grd.Canvas.TextOut(Rect.Left, Rect.Top, tbenregvin[ARow].vignoble);
      1 : begin
            grd.Canvas.Brush.Color := tbenregvin[ARow].leg_couleur;
            grd.Canvas.FillRect(Rect);
            grd.Canvas.TextRect(Rect, Rect.Left, Rect.Top, tbenregvin[ARow].legende);
          end;
      end;
    end;
    L'important c'est de dessiner le texte de la cellule avec TextRect pour ne pas déborder dans la cellule suivante...

    Il faut comprendre le principe mais ensuite on peut se permettre les présentations les plus foles.

  7. #7
    Membre habitué
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2003
    Messages
    397
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mars 2003
    Messages : 397
    Points : 165
    Points
    165
    Par défaut
    Merci c'est exatement ce que je voulais, mais j'avoue que j'ai recopié bêtement sans trop comprendre ce que je faisais.
    Je vais essayé de me pencher sur le code pour comprendre.

    Encore merci

  8. #8
    dem
    dem est déconnecté
    Membre habitué

    Inscrit en
    Juillet 2003
    Messages
    114
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Juillet 2003
    Messages : 114
    Points : 141
    Points
    141
    Par défaut
    Pour ceux que ça intéresse, voici un petit exemple :

    StringGrid.rar

    J'utilise une StringGrid standard et j'ai réutilisé les codes de la FAQ en ne modifiant que le stricte nécessaire pour "faire joli".

    PS : michel71, tu as peut-être déjà trouvé ton bonheur entre temps, mais comme je l'avais déjà fait et téléchargé, alors je réponds quand même..

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/04/2015, 11h17
  2. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  3. Réponses: 2
    Dernier message: 16/10/2008, 12h06
  4. Pb copier une valeur d'une textbox vers une cellule
    Par whykiki dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/12/2007, 11h49
  5. Sélectionner seulement une partie d'une valeur d'une cellule
    Par ArthurO0O dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 20/08/2007, 11h05

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