Précédent   Forum du club des développeurs et IT Pro > C et C++ > Outils pour C & C++ > C++Builder
C++Builder Environnement de développement RAD C++Builder. Avant de poster -> F.A.Q C++Builder, Sources C++Builder
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 04/01/2013, 17h47   #1
pjtuloup
Membre à l'essai
 
Pierre-Jean TULOUP
Inscription : avril 2003
Messages : 37
Détails du profil
Informations personnelles :
Nom : Pierre-Jean TULOUP
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : avril 2003
Messages : 37
Points : 22
Points : 22
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 :
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 !
pjtuloup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 18h58   #2
blondelle
Rédacteur
 
Avatar de blondelle
 
Homme
Inscription : mars 2006
Messages : 2 629
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mars 2006
Messages : 2 629
Points : 3 405
Points : 3 405
Salut pjtuloup
Une piste
Code :
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.
  • N'oubliez pas de consulter la FAQ, la recherche sur le Forum.
  • N'oubliez pas que l'aide BCB existe, elle s'affiche sous simple pression de la touche F1.
  • N'oubliez pas de mettre : Bouton en bas de la page ou menu Outils de la discussion -> Mettre Résolu.
  • Mes Tutos http://jp-blondelle.developpez.com/
blondelle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 19h27   #3
pjtuloup
Membre à l'essai
 
Pierre-Jean TULOUP
Inscription : avril 2003
Messages : 37
Détails du profil
Informations personnelles :
Nom : Pierre-Jean TULOUP
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : avril 2003
Messages : 37
Points : 22
Points : 22
Merci pour la réponse rapide ! Je testerai Lundi, car là je quitte le bureau... épuisé !
pjtuloup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2013, 13h30   #4
yarp
Membre confirmé
 
Inscription : janvier 2003
Messages : 273
Détails du profil
Informations personnelles :
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : janvier 2003
Messages : 273
Points : 272
Points : 272
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.
yarp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2013, 15h04   #5
pjtuloup
Membre à l'essai
 
Pierre-Jean TULOUP
Inscription : avril 2003
Messages : 37
Détails du profil
Informations personnelles :
Nom : Pierre-Jean TULOUP
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : avril 2003
Messages : 37
Points : 22
Points : 22
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 :
GrilleFile->Options<<goRowSelect;
pour que mon problème soit résolu

Merci beaucoup à tous les deux.
pjtuloup est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 09h32.


 
 
 
 
Partenaires

Hébergement Web