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.