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

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre averti
    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
    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
    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
        }
    }

  3. #3
    Membre averti
    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
    Par d�faut
    Merci pour la r�ponse rapide ! Je testerai Lundi, car l� je quitte le bureau... �puis� !

  4. #4
    Membre exp�riment�

    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
    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
    Membre averti
    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
    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. 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