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 :
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
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;
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
3 Else If Odd(ARow) Then Brush.Color := $FFE0FF Else Brush.Color := $FFFFE0;
Ici, si la case est active (auqel cas on lui attribut la couleur clNavy).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Else If gdSelected In State Then Brush.Color := clNavy
La portion de code me posant problème est la suivante :
Dans la doc, il est dit que le gdFixed correspond à la cellule qui est dans une région fixe de la grille
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 If gdFixed in State Then Brush.Color := clBtnFace
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.
Partager