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 :

Couleurs des lignes d'un StringGrid


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 531
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 531
    Par défaut Couleurs des lignes d'un StringGrid
    Bonjour à tous,

    je voudrais mettre en couleur les lignes d'un StrinGrid :

    - Une ligne sur 2 de couleur différente (ça c'est OK)
    - la ligne qui contient la cellule active d'une troisième couleur mais sans mettre la propriété goRowSelect à True car je veux pouvoir sélectionner une cellule (là je n'y arrive pas !)

    voici mon code qui produit des résultats bizarres :

    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 TF_ImportVisulag.GrilleDrawCell(Sender: TObject; ACol,
      ARow: Integer; Rect: TRect; State: TGridDrawState);
    begin
      With Sender As TStringGrid Do With Canvas Do
      Begin
        { sélection de la couleur de fond }
        If gdFixed in State
          Then Brush.Color := clBtnFace
          Else If (Arow = Row)                       // C'est ici que ce n'est pas bon
            Then Brush.Color := 16762508
            Else If Odd(ARow)
              Then Brush.Color := 16777190
              Else Brush.Color := 14548991;
     
        { Dessin du texte }
        TextOut(Rect.Left,Rect.Top,Cells[ACol,ARow]);
      End;
    end;
    { ============================================================================= }
    Quelqu'un peut il m'aider ?

    merci

    Charly

  2. #2
    Membre Expert

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Par défaut
    Salut

    Que vaut cette valeur Row ? Parce que ton code me semble bon ...

  3. #3
    Membre émérite
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Par défaut
    Que vaut cette valeur Row ? Parce que ton code me semble bon ...
    C'est la ligne active
    c'est bizarre chez moi le code ne marche pas sans peut-être du au XPMan

    Ajoute ACol :=Col
    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;
      Rect: TRect; State: TGridDrawState);
    begin
      With TStringGrid(Sender),Canvas  Do
      Begin
        { sélection de la couleur de fond }
        If gdFixed in State Then
          Brush.Color := clBtnFace
        Else If (Arow = Row)and(ACol=Col) Then                      // C'est ici que ce n'est pas bon
           Brush.Color := 16762508
       Else If Odd(ARow)Then
           Brush.Color := 16777190
        Else Brush.Color := 14548991;
     
        FillRect(Rect);
        { Dessin du texte }
        TextOut(Rect.Left,Rect.Top,Cells[ACol,ARow]);
      End;
     
    end;

  4. #4
    Membre Expert

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 47
    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
    Par défaut
    Citation Envoyé par Montor Voir le message
    c'est bizarre chez moi le code ne marche pas sans
    C'est normal, TextOut dessine du text, mais ne remplit pas le fond de la cellule pour autant. Selon le mode de dessin du texte, le fond du text sera transparent ou de la couleur du pochoir, mais ne remplira pas toute la cellule.

    Si tu fais un FillRect en premier, tu dessines d'abord le fond de la cellule, puis le texte.

    Personnellement, quand je dessines une grille à la main (c'est à dire très souvent), j'utilise TextRect.
    Cette méthode fait tout à la fois : Elle dessine le fond du rectangle indiqué, elle définit le clipping pour que le texte ne sorte pas de la cellule, et en plus on peut même lui demander de gérer l'alignement de texte (gauche, droite, centré...).

  5. #5
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 969
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 969
    Par défaut
    Et pour avoir la ligne complète d'une couleur sans goRowSelect, il faut aussi un Invalidate dans OnSelectCell.

  6. #6
    Membre émérite
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Par défaut
    @Franck SORIANO
    Merci pour les explications

  7. #7
    Membre Expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 531
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 531
    Par défaut
    Bonjour,

    Merci à tous pour vos réponses (désolé, je n'était pas là ce matin)

    En ajoutant (Acol = col), ça fonctionne, mais du coup je n'ai que la cellule sélectionné qui est bleu plus foncé et non la ligne entière (on peux le faire aussi avec la propriété State)

    Même avec le FillRect (sans ACol = Col) j'ai toujours le problème lorsque l'on se déplace avec l'ascenceur vertical

    @Andnotor comment on fait un invalidate ?

    A+ Charly

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/11/2010, 22h56
  2. StringGrid : Couleur des lignes
    Par Caro dans le forum Composants VCL
    Réponses: 7
    Dernier message: 21/02/2006, 09h35
  3. [D7] Couleur des cellules d'un StringGrid
    Par raoulmania dans le forum Composants VCL
    Réponses: 5
    Dernier message: 15/12/2005, 16h39
  4. Insérer des lignes dans une StringGrid
    Par da_latifa dans le forum Composants VCL
    Réponses: 1
    Dernier message: 26/09/2005, 13h45
  5. Couleur des lignes dans DBGrid
    Par eddie dans le forum C++Builder
    Réponses: 5
    Dernier message: 21/06/2002, 19h15

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