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 :

Le composant TStringGrid


Sujet :

Composants VCL Delphi

  1. #1
    Membre expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Points : 3 404
    Points
    3 404
    Par défaut Le composant TStringGrid
    Bonjour à tous,

    Je suis actuellement en train de regarder comment changer les couleurs d'une StringGrid. Pour celà, la FAQ propose un petit bout de code :

    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
    procedure TForm1.StringGrid1DrawCell(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 gdSelected In State
            Then Brush.Color := clNavy
            Else If Odd(ARow)
              Then Brush.Color := $FFE0FF
              Else Brush.Color := $FFFFE0;
        { Dessin du fond }
        FillRect(Rect);
        { Sélection de la couleur d'écriture }
        If gdSelected In State
          Then Font.Color:=clWhite
          Else Font.Color:=clBlack;
        { Dessin du texte }
        TextOut(Rect.Left,Rect.Top,Cells[ACol,ARow]);
      End;
    end;
    j'ai essayé de comprendre un peu le fonctionnement, mais je me heurt a quelques incompréhensions.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Else If Odd(ARow)
              Then Brush.Color := $FFE0FF
              Else Brush.Color := $FFFFE0;
    Ici, je suppose que l'on test si on se trouve sur une ligne paire ou impaire via un booléen.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Else If gdSelected In State
            Then Brush.Color := clNavy
    Ici, si la case est active (auqel cas on lui attribut la couleur clNavy).

    La portion de code me posant problème est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     If gdFixed in State 
          Then Brush.Color := clBtnFace
    Dans la doc, il est dit que le gdFixed correspond à la cellule qui est dans une région fixe de la grille

    Je suppose qu'il s'agit de la colonne 0 étant donné qu'elle n'est pas atteinte par les changements de couleur lors de l'exécution. Le problème c'est que je ne comprend pas pas pourquoi.. Ceci-étant, en supprimant ce test, le résultat obtenu est le bon.

    Autre soucis, je voudrais que le clique sur une case provoque la sélection de la ligne complète (que la ligne complète prenne la couleur clNavy dans notre cas), mais je ne voit pas comment faire... J'ai essayer de changer le gdSelected (Cellulle active) par gdRowSelected (Ligne active), mais le résultat est non concluant...

    Merci par avance pour vos éclaircissements,

    Cordialement,

    ZenZiTone.

  2. #2
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 339
    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 339
    Points : 3 107
    Points
    3 107
    Par défaut
    Bonjour,

    la (ou les) lignes et colonnes fixes sont gérées par les propriétés FixedCols et FixedRows : =0 sans ligne ou colonne fixe >= 1 une ou plusieurs lignes et colonnes fixes

    Pour pouvoir sélectionner une ligne entière, il faut mettre la propriété Options/GoRowSelect de la grille à True

    A+

    Charly

  3. #3
    Membre expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Points : 3 404
    Points
    3 404
    Par défaut
    Bonjour Charly910,

    En effet, je n'avais pas prêté attention aux propriétés FixedCols et FixedRows. Soit-dit en passant, les deux propriétés était à 1 et seul la première colonne était fixe (Cells[2,0] était non fixe..).

    Pour la goRowSelect à true je n'avais pas essayé étant donné que la grille était dessiné colonnes par colonnes et non lignes par lignes... Mais ça fonctionne bien, merci

  4. #4
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    Citation Envoyé par ZenZiTone Voir le message
    En effet, je n'avais pas prêté attention aux propriétés FixedCols et FixedRows. Soit-dit en passant, les deux propriétés était à 1 et seul la première colonne était fixe (Cells[2,0] était non fixe..).
    Il me semble que tu as forcément une row non fixed (et pareil pour les col). Donc, si à un moment tu mets FixedRows à 1, et qu'a un moment tu mets le RowCount à 1, il te passe automatiquement les FixedRows à 0 car il n'y a plus de ligne non fixe.

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 30/09/2014, 17h51
  2. [Lazarus] [0.9.31] Composant héritier de TStringGrid et RowCount
    Par Invité dans le forum Lazarus
    Réponses: 7
    Dernier message: 04/11/2011, 21h20
  3. [Lazarus] [0.9.31] Override dans un composant TStringGrid. Questions diverses
    Par Invité dans le forum Lazarus
    Réponses: 4
    Dernier message: 04/11/2011, 10h40
  4. Rudiment composant TStringGrid
    Par bleuerouge dans le forum Composants VCL
    Réponses: 6
    Dernier message: 06/06/2008, 11h39
  5. Re-dimensionnement automatique de composants
    Par ludo_7 dans le forum C++Builder
    Réponses: 10
    Dernier message: 16/05/2002, 17h35

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