J'ai trois problèmes avec le rectangle de sélection de l'enregistrement en cours du composant DBGrid:
1- J'utilise la propriétépour assurer la transparence du rectangle de sélection et laisser son contour visible néanmoins lorsque le DBGrid est activé (à la première exécution ou après perte de focus) le rectangle de sélection prend la couleur blanche; il revient transparent en pointant sur un autre enregistrement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part canvas.Brush.Style:=bsclear
2- en parcourant plusieurs enregistrements de la grille, l'affichage des données devient illisible (en utilisant la barre de défilement par exemple). (Voir l'image DBGRID1.png)
En évitant d'utiliser la commandecet effet ne se produit pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part canvas.Brush.Style:=bsclear
3-En sélectionnant la ligne i, ensuite la ligne i+1 et enfin n'importe quelle position, on remarque que le ligne supérieure de la ligne i+1 a obtenue la couleur du contour de sélection (Voir l'image DBGRID2.png). Ces couleur disparaissent si la grille perd le focus et se réactive (j'ai triché un peu en ajoutant DBGrid.Repaint dans les événements OnCellClic OnKeyUp) mais il y a surement mieux à faire.
Voici le Code utilisé:
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 procedure TPrincipalForm.GridCarsDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin if gdSelected in State then //la modification de l'apparence du rectangle de selection begin With TDBGrid(Sender) do begin canvas.Pen.Width:=5; canvas.Pen.Color:=clred; canvas.Brush.Style:=bsclear; //le rectangle de selection devient transparent TDBGrid(Sender).DefaultDrawColumnCell(rect,datacol,column,state); // trace la ligne du haut Canvas.MoveTo(Rect.Left,Rect.Top); Canvas.LineTo(Rect.Right,Rect.Top); // trace la ligne du bas Canvas.MoveTo(Rect.Left,Rect.Bottom); Canvas.LineTo(Rect.Right,Rect.Bottom); // cas de la première cellule if DataCol = 0 then begin // on trace la coté gauche Canvas.MoveTo(Rect.Left,Rect.Top); Canvas.LineTo(Rect.Left,Rect.Bottom); end; // Cas de la dernière colonne if DataCol = Columns.Count -1 then begin // On trace le coté droit Canvas.MoveTo(Rect.Right,Rect.Top); Canvas.LineTo(Rect.Right,Rect.Bottom); end; end; end else begin //pour alterner les couleurs de la grille if TDBGrid(Sender).datasource.dataset.RecNo mod 2 =0 then TDBGrid(Sender).Canvas.Brush.Color:=clwhite else TDBGrid(Sender).Canvas.Brush.Color:=$00FDCCC1; TDBGrid(Sender).DefaultDrawColumnCell(rect,datacol,column,state); end; end;
Partager