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 :

Couleurs d'un StringGrid [Lazarus]


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 31
    Par défaut Couleurs d'un StringGrid
    Bonjour,

    Je viens d'installer Lazarus 0.9.30. Curieusement, je n'arrive plus à faire afficher correctement les couleurs du texte. Objectif recherché : si la colonne 3 est vide, on a du bleu sinon c'est du vert.
    Voici le code utilisé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm9.mygridDrawCell(Sender: TObject; aCol, aRow: Integer;
      aRect: TRect; aState: TGridDrawState);
    begin
        if mygrid.Cells[3,arow]<>'' then mygrid.Canvas.font.Color:=clGreen
           else mygrid.font.Color:=clNavy;
    end;

    Avec ça, toutes les lignes sont en bleu, y compris celles dont la colonne 3 est vide. Pourtant ce code fonctionnait très bien avec la version 0.9.28. Où est le problème, à votre avis ?

    Merci d'avance

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 931
    Billets dans le blog
    6
    Par défaut
    mygrid.Canvas.font.Color:=clGreen ?
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Je ne sais pas si cela peut vous être utile. A partir d'une TStringGrid posée par défaut sur une TForm et renommée SG1, voici un code qui colorie toutes les 4 lignes en vert. Le " if StrToInt(Cells[1, aRow]) mod 4 = 0" remplace votre condition.

    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
    procedure TForm1.FormCreate(Sender: TObject);
    var
      i : Integer;
    begin
      with SG1 do begin
        RowCount := 21;
        for i := 1 to RowCount -1 do
          Cells[1, i] := IntToStr(i);
     end;
    end;
     
    procedure TForm1.StringGrid1DrawCell(Sender: TObject; aCol, aRow: Integer;
      aRect: TRect; aState: TGridDrawState);
    var
      sText : String;
    begin
      if aCol > 0 then
       if aRow > 0  then
          if not (gdSelected in aState) then
             with SG1 do
               if StrToInt(Cells[1, aRow]) mod 4 = 0 then begin
                 sText :=  Cells[aCol, aRow];
                 with CanVas do begin
                   brush.color := clGreen;
                   FillRect(aRect);
                   TextRect(aRect, aRect.Left + (aRect.Right - aRect.Left) shr 1
                    - (TextWidth(sText) shr 1), aRect.Top +3, sText);
                 end;
               end;
    end;
    Ici, le TextRect ne convient pas : il centre le texte. Mais le principe est là. Les 2 premiers if précisent la portée du traitement : toutes les lignes seront entièrement coloriées (aCol > 0 ==> de aCol := 1 à aCol := SG1.Colcount -1) et le traitement commence à partir de la ligne 1 (aRow > 0). Si vous ne voulez que le traitement porte uniquement sur la colonne 3 alors (if aCol = 3) : les autres cellules d'une même ligne "échapperont" alors au traitement. Le " if not (gdSelected in aState) then" précise que le traitement ne s'applique pas aux lignes "Selected".

    Cordialement. Gilles
    Dernière modification par Invité ; 01/08/2011 à 21h14.

  4. #4
    Membre averti
    Inscrit en
    Novembre 2009
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 31
    Par défaut
    Bon sang, mais c'est bien sûr ! Que vient faire ce "Canvas" dans la première ligne ?
    L'exemple donné avec le Rect va quand même me servir, car c'est une nnotion que je possède très mal. C'est en imitant qu'on peut progresser.

    Un grand merci à tous les deux.

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

Discussions similaires

  1. Couleur dans une stringgrid
    Par jyvesb dans le forum Composants VCL
    Réponses: 7
    Dernier message: 17/12/2012, 17h40
  2. Changer la couleur dans un StringGrid
    Par fermat dans le forum Débuter
    Réponses: 1
    Dernier message: 13/09/2008, 17h23
  3. Texte en couleur dans une StringGrid
    Par michel71 dans le forum Langage
    Réponses: 1
    Dernier message: 20/08/2008, 18h09
  4. La Couleur dans une StringGrid
    Par fermat dans le forum Delphi
    Réponses: 2
    Dernier message: 21/01/2007, 14h38
  5. couleur dans StringGrid
    Par amrock dans le forum C++Builder
    Réponses: 1
    Dernier message: 06/09/2004, 11h57

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