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

Lazarus Pascal Discussion :

Colorier une cellule d'un StringGrid [Lazarus]


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 3
    Par défaut Colorier une cellule d'un StringGrid
    Bonjour,

    j'aimerais connaître la procédure complète pour colorier une case donnée d'un StringGrid lorsque l'on clique dessus, avec une condition sur la couleur en fonction du texte (par exemple 0 = noir et 1 = blanc). J'ai pas mal cherché sur différents forums mais les solutions données ne fonctionnaient pas. (aucun changement de couleur, la procédure ne se déclenchait pas).

    Si j'ai bien compris le principe il faudrait définir un rectangle, puis le remplir avec l'objet Brush du canvas, mais lorsque j'essaye de le coder cela ne fonctionne pas non plus.

    Je n'ai pas vraiment de code à vous donner en exemple, la plupart de mes essais découlant de copier-coller venant de différentes sources, aucun ne fonctionnant.

    Merci d'avance !

  2. #2
    Membre prolifique Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 763
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 763
    Par défaut
    Bonjour,

    Je ne suis pas spécialiste des gestions graphiques dans les tables, mais ce genre de choses se gère au niveau de l'évènement OnDrawCell.

    Bon courage

    JS

  3. #3
    Membre Expert

    Homme Profil pro
    au repos
    Inscrit en
    Février 2014
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2014
    Messages : 429
    Par défaut
    Bonjour,

    exemple d'utilisation de l'événement OnDrawCell :

    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
    procedure TForm1.StringGrid1DrawCell(Sender: TObject; aCol, aRow: Integer;
      aRect: TRect; aState: TGridDrawState);
    begin
       if (gdFixed in aState) then Exit;
       with StringGrid1 do
       begin
           if Cells[aCol, aRow] = '0' then
           begin
             Canvas.Brush.Color:= clBlack; //couleur du fond
             Canvas.Font.Color:= clWhite;  // couleur du texte
           end
           else
           begin
             Canvas.Brush.Color:= clWhite;
             Canvas.Font.Color:= clBlack;
           end;
           Canvas.FillRect(aRect);
           Canvas.TextOut(aRect.left + 2, aRect.Top + 2,  Cells[aCol,ARow]);
       end;
    end;
    Cordialement
    Thierry

  4. #4
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 173
    Billets dans le blog
    9
    Par défaut
    Bonjour !

    Dans ce cas, on pourrait écrire simplement :

    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
    procedure TForm1.StringGrid1DrawCell(Sender: TObject; aCol, aRow: integer;
      aRect: TRect; aState: TGridDrawState);
    begin
      if (gdFixed in aState) then
        Exit;
      with StringGrid1 do
      begin
        if Cells[aCol, aRow] = '0' then
        begin
          Canvas.Brush.Color := clBlack; // couleur du fond
          Canvas.Font.Color := clWhite;  // couleur du texte
          Canvas.FillRect(aRect);
          Canvas.TextOut(aRect.Left + 2, aRect.Top + 2, Cells[aCol, ARow]);
        end;
      end;
    end;
    Autrement les cases blanches seront dessinées deux fois.

    Ou alors il faut régler la propriété DefaultDrawing à FALSE : ce qui veut dire qu'on se charge de dessiner toutes les cases (ce que fait le code proposé par Thierry).

    P.-S. J'ai ajouté cette QR dans la FAQ :
    https://lazarus.developpez.com/faq/?...un-TStringGrid

  5. #5
    Membre Expert

    Homme Profil pro
    au repos
    Inscrit en
    Février 2014
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2014
    Messages : 429
    Par défaut
    Bonjour Roland.

    Bonne idée d'avoir ajouté ceci dans la FAQ.

    Juste une remarque :
    Si DefaultDrawing = false et si le StringGrid contient des cellules fixes : il faut traiter le cas du gdFixed in aState.
    Sinon le texte éventuel de ces cellules ne s'affichera plus. Alors que la couleur de fond reste grisée ! (ce qui d'ailleurs me paraît un peu paradoxal)
    Je n'ai testé que sous Windows, le comportement est peut-être différent sous Linux.

    Amicalement
    Thierry

  6. #6
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 173
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par ThWilliam Voir le message
    Juste une remarque :
    Si DefaultDrawing = false et si le StringGrid contient des cellules fixes : il faut traiter le cas du gdFixed in aState.
    Sinon le texte éventuel de ces cellules ne s'affichera plus. Alors que la couleur de fond reste grisée ! (ce qui d'ailleurs me paraît un peu paradoxal)
    Ah oui, tiens, je n'avais pas pensé à ça. Merci pour cette remarque. Du coup il faudra que je reformule l'article de la FAQ.

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

Discussions similaires

  1. [jTable] Colorier une cellule
    Par Terminator dans le forum Composants
    Réponses: 16
    Dernier message: 28/05/2007, 16h54
  2. [JTable] Colorier une cellule d'une JTable
    Par Houssem dans le forum Composants
    Réponses: 1
    Dernier message: 15/05/2007, 14h54
  3. Colorier une cellule Excel
    Par MCoder dans le forum Delphi
    Réponses: 5
    Dernier message: 20/02/2007, 14h30
  4. [CR8.5][VS2002]Colorier une cellule
    Par San Soussy dans le forum SDK
    Réponses: 2
    Dernier message: 13/09/2005, 12h39

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