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

C++Builder Discussion :

StringGrid: sélection et colorisation d'une ligne


Sujet :

C++Builder

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2003
    Messages : 38
    Points : 37
    Points
    37
    Par défaut StringGrid: sélection et colorisation d'une ligne
    Bonjour à tous,

    J'ai une stringgrid dont je veux que, si on clique sur une ligne, celle-ci change de couleur..., après avoir remis en couleur normale des lignes qui auraient antérieurement changé de couleur par la même manip. Problème classique si l'on en croit le nombre de questions posées à ce sujet sur Internet et dans les forums Delphi.... Mais j'ai lu la faq, Gilles Louise, Leblanc, L'ours des Carpathes et d'autres, piqué des bouts de code un peu partout, souvent après les avoir traduits de Delphi, (que je ne connais pas) et ça fait trois jours que rien ne marche et que j'en suis toujours au même point, à savoir que je ne change que la couleur de la cellule sur laquelle je clique et que toute cellule cliquée prend cette couleur.

    J'ai piqué (et transcrit) le code suivant dans un forum delphi, où il est certifié que toute la ligne change de couleur et où la discussion est considérée comme résolue... Et pourtant ça ne marche pas: le résultat est celui que je décris au-dessus.

    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
    31
    32
    33
    34
    void __fastcall TFileWeb::GrilleFileDrawCell(TObject *Sender, int ACol,
          int ARow, TRect &Rect, TGridDrawState State)
    {
    AnsiString ContenuCellule;
    int x,y;
     
    ContenuCellule=GrilleFile->Cells[ACol][ARow];
    x=Rect.Left;
    y=Rect.Top;
     
    if((State.Contains(gdFixed)))
       GrilleFile->Canvas->Brush->Color=clBtnFace;
    else
       if((State.Contains(gdSelected)))
          GrilleFile->Canvas->Brush->Color=clYellow;
       else
          GrilleFile->Canvas->Brush->Color=clWhite;
     
    GrilleFile->Canvas->FillRect(Rect);
     
    if((State.Contains(gdSelected)))
       GrilleFile->Canvas->Font->Color=clRed;
    else
       GrilleFile->Canvas->Font->Color=clBlack;
     
    GrilleFile->Canvas->TextOut(x,y,ContenuCellule);
     
    if(ARow==RowSelected&&RowSelected!=0)
       {
       GrilleFile->Canvas->Brush->Color=clYellow;
       GrilleFile->Canvas->Font->Color=clRed;
       GrilleFile->Canvas->TextOut(x,y,ContenuCellule);
       }
    }
    Nota: RowSelected est un int initialisé dans la fonction GrilleFileSelectCell à la valeur du paramètre ARow transmis à cette dernière

    Est-ce que quelqu'un peut m'expliquer ce qui se passe et ce que je devrais faire ?
    Merci d'avance !

  2. #2
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Salut pjtuloup
    Une piste
    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
     
    void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol,
          int ARow, TRect &Rect, TGridDrawState State)
    {
    // on peint la ligne 3
        if((ACol != 0) && (ARow == 3))
        {
    //    #pragma option push -w-eas
          StringGrid1->Canvas->Brush->Color = RGB(85,0,255);
          StringGrid1->Canvas->TextRect(Rect, Rect.Left
          , Rect.Top , StringGrid1->Cells[ACol][ARow]);
    //      #pragma option pop // -w-eas
        }
    // on peint la colonne 3
        if((ACol == 3) && (ARow != 0))
        {
    //    #pragma option push -w-eas
          StringGrid1->Canvas->Brush->Color = RGB(85,85,85);
          StringGrid1->Canvas->TextRect(Rect, Rect.Left
          , Rect.Top , StringGrid1->Cells[ACol][ARow]);
    //      #pragma option pop // -w-eas
        }
    }
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2003
    Messages : 38
    Points : 37
    Points
    37
    Par défaut
    Merci pour la réponse rapide ! Je testerai Lundi, car là je quitte le bureau... épuisé !

  4. #4
    Membre averti

    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    288
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 288
    Points : 334
    Points
    334
    Par défaut
    Dans la DrawGrid (pareil en StringGrid mais je maitrise mieux la DrawGrid), l'évènement de rafraichissement ne porte que sur le cellule concernée.
    Par exemple si tu clique sur une cellule ne se rafraichiront que cette cellule et que celle qui avait le focus précédemment, pour que tu puisses les redessiner. Dans ces conditions tu ne pourras pas rafraichir une colonne entière puisque le message de dessin (Le DrawCell n'est pas envoyé au reste de la grille).

    Par contre qu'il existe une option qui permet de rafraichir toute une ligne quand tu clique dessus (goRowSelect je crois). Cette option est-elle activée ?
    Si elle ne te conviens pas, regarde comment elle est implémentée dans le composant et fait pareil.
    Ce ne sera pas si facile car la plupart des méthodes sont protégées.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2003
    Messages : 38
    Points : 37
    Points
    37
    Par défaut
    Merci les gars !

    J'ai eu du boulot avant de recevoir la réponse de Yarp et comme je suis feignant et que celle-ci me paraissait plus simple, je l'ai testée en premier.

    En effet, je n'ai eu qu'à activer le goRowSelect par un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GrilleFile->Options<<goRowSelect;
    pour que mon problème soit résolu

    Merci beaucoup à tous les deux.

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

Discussions similaires

  1. [AC-2010] Sélection des données d'une ligne d'une liste déroulante
    Par ptitga dans le forum Access
    Réponses: 6
    Dernier message: 22/09/2014, 08h04
  2. Sélection aléatoire pondérée d'une ligne
    Par Babcool dans le forum Requêtes
    Réponses: 9
    Dernier message: 12/01/2011, 15h59
  3. [XL-2003] Problème sur une sélection puis séparation par une ligne blanche
    Par korni184 dans le forum Excel
    Réponses: 12
    Dernier message: 08/04/2010, 11h45
  4. sélection d'une ligne DBGrid par clic
    Par duffman dans le forum Bases de données
    Réponses: 2
    Dernier message: 17/05/2004, 13h45
  5. Déplacer la sélection d'une ligne dans un stringgrid
    Par jer64 dans le forum Composants VCL
    Réponses: 5
    Dernier message: 14/03/2003, 00h57

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