Bonjour Franckcl,
Merci pour ta réponse, il me semble d'ailleurs que j'avais fait ça et que cela ne fonctionnais pas, mais peut être avec les fêtes j'ai du mal faire quelque chose... je teste et te dit quoi
bonne journée
Bonjour Franckcl,
Merci pour ta réponse, il me semble d'ailleurs que j'avais fait ça et que cela ne fonctionnais pas, mais peut être avec les fêtes j'ai du mal faire quelque chose... je teste et te dit quoi
bonne journée
Je viens de faire le test, cela fonctionne bien quand je fais comme dans ton exemple.... Mais quand j'essaye de le faire dans mon programme plus rien ne marche
voici mon code :
et le code qui rempli la grille :
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 procedure TForm1.sgGrilleDrawColumnCell(Sender: TObject; const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF; const Row: Integer; const Value: TValue; const State: TGridDrawStates); begin with Canvas do Begin //if (Row=1) then -> fonctionne if (Row=Arow) then fill.Color := TAlphacolors.Crimson else fill.Color := TAlphaColors.Black; FillText(Bounds,sTexte,true,1,[TFillTextFlag.RightToLeft],TTextAlign.Trailing); End; end;
ARow et sTexte sont des variables globales...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 ... for Ligne := 0 to Liste.Count-1 do begin Arow:=Ligne; if Liste.GetValue('confusionable').value='non' then ARow:=Ligne else ARow:=-1; sTexte:=Liste.GetValue('type').Value +' du ' + Liste.GetValue('le').Value +#13; sTexte:=sTexte+Liste.GetValue('pour').Value; ...
y a un truc que je capte pas
salut
mouais je comprend mieux pourquoi ça marche pas
en somme a chaque ligne que tu affiche tu fait la recherche sur toutes les lignes
l'avantage de l'objet et des événements c'est que tu connais le déclencheur
ton stexte n'a aucunement besoin d’être global tu devrais être en moyen de retrouver pour chaque case la valeur correspondante
Blaise PascalNous souhaitons la vérité et nous trouvons qu'incertitude. [...]
Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
PS : n'oubliez pas le tag
C'est bien ça que je ne comprend pas.
je vais essayer avec sTexte en "normal" et voir si je ne peut pas voir si j'écris dans une cellule la valeur de Liste.GetValue('confusionable').value et que je regarde la valeur "oui" ou la valeur "non"
merci pour ton aide,
je vous tiens au jus
bonne nuit
bonsoir à tous,
J'avance, mais j'y suis pas encore
cela fonctionne presque comme je le souhaite...
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 procedure TForm1.GrilleDrawColumnCell(Sender: TObject; const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF; const Row: Integer; const Value: TValue; const State: TGridDrawStates); var RowColor : TBrush; begin RowColor := Tbrush.Create(TBrushKind.Solid,TAlphaColors.Alpha); {Je teste la valeur pour selectionner la couleur } if Value.ToString = 'non' then RowColor.Color := TAlphaColors.Red else RowColor.Color := TAlphaColors.green; Canvas.FillRect(Bounds, 0, 0, [], 1, RowColor); { idée de thierry car le texte est déjà écrit } TGrid(Sender).DefaultDrawColumnCell(Canvas, Column, Bounds, Row, Value, State); end;
Maintenant je sais colorier une cellule en fonction d'un critère (grâce à vous ), mais je voudrais non pas colorier juste la cellule contenant le texte, mais sa ligne complète.
Ensuite, en plus du fond et sur le même critère la couleur de tous les textes se trouvant sur cette ligne.
je continue à chercher, si vous avez une idée, ce serait génial...
Merci pour votre aide, je vous tiens au courant
Bonne soirée
krzysiu
salut,
un idée voir plus
pour te mettre sure la voie
ton critère doit être invariable selon la ligne ce qui implique que tu ne peut pas utiliser Value
par contre le sender a de forte probabilité d’être une grille
si sur cette grille il y aurais par le plus grand des hasard une propriété permettant d’accéder à une cellule par une colonne et une ligne
celle ci te permettrai de tester cette valeur a chaque fois
ne connaissant pas la grille que tu utilise voici un exemple delphi avec un TStringGrid
Code : Sélectionner tout - Visualiser dans une fenêtre à part maValeur := (sender as TstringGrid).Cells[ACol, ARow];
Blaise PascalNous souhaitons la vérité et nous trouvons qu'incertitude. [...]
Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
PS : n'oubliez pas le tag
Merci pour cette Piste, j'utilise TStringGrid.
je regarde ça demain...
Salut à tous,
Je parcours le web à la recherche d'une idée, C'est à croire que personne n'as eu besoin de m'as eu besoin de mettre une ligne en évidence dans une grille
Si j'ai bien compris commet ça marche, DrawColumnCells est appelé à chaque fois que l'on modifie une valeur dans une cellule. donc,je me dit si au lieu de tester toutes les cellules, je me concentre juste sue la colonne ou j'ai nom info. je connais donc la ligne et il ne me resta plus qu'a parcourir toutes colonnes et colorier la cellule de cette ligne dans toutes colonnes
ce qui pourrai donner ça
Mais ça marche pas ... Au secours y a vraiment un truc que je ne capte pas Grrrr
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 procedure TForm1.GrilleDrawColumnCell(Sender: TObject; const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF; const Row: Integer; const Value: TValue; const State: TGridDrawStates); var RowColor : TBrush; i: Integer; Col:Tcolumn; B:TrectF; begin RowColor := Tbrush.Create(TBrushKind.Solid,TAlphaColors.Alpha); {Je teste la valeur pour selectionner la couleur } if (Column=StringColumn8) then begin if Value.ToString = 'non' then RowColor.Color := TAlphaColors.Red else RowColor.Color := TAlphaColors.green; for i := 0 to TGrid(Sender).ColumnCount-1 do begin Canvas.FillRect(Bounds, 0, 0, [], 1, RowColor); Col:= TGrid(Sender).ColumnByIndex(i) ; { idée de thierry car le texte est déjà écrit} //TGrid(Sender).DefaultDrawColumnCell(Canvas, Column, Bounds, Row, Value, State); TGrid(Sender).DefaultDrawColumnCell(Canvas, Col, Bounds, Row, Value, State); end; end; end;
Bonjour,
Non en fait l’événement est appelé à chaque fois que la cellule est dessiné. Donc a chaque fois qu'elle est visible, que sa valeur change...etc.
Donc pour colorier la ligne cela peut se faire simplement par :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 var RowColor : TBrush; begin RowColor := Tbrush.Create(TBrushKind.Solid,TAlphaColors.Alpha); if TStringGrid(Sender).Cells[8,row] = 'non' then RowColor.Color := TAlphaColors.Red else RowColor.Color := TAlphaColors.green; Canvas.FillRect(Bounds, 0, 0, [], 1, RowColor); Column.DefaultDrawCell(Canvas, Bounds, Row, Value, State); end;
Merci pour cette précision Thiérry,
maisça marche pas,
Code : Sélectionner tout - Visualiser dans une fenêtre à part Column.DefaultDrawCell(Canvas, Bounds, Row, Value, State);
TColumn, ne contient pas un membre DefaultDrawCell qu'il me dit, j'ai oublié quoi ???
Je n'ai pas de XE8 donc je ne peux pas tester. Il faut trouver par quoi remplacer le DefaultDrawCell. Mais tu ne l'avais pas déjà fait dans tes codes ?
c'est pas TGrid(Sender).DefaultDrawColumnCell ?
Merci pour ton aide
oui, c'est bien ça, mais cela ne fonctionne que sur une seule cellule
Je continue à chercher
salut
montre nous ton code que tu as ecrit dans GrilleDrawColumnCell
pour que l'on puissent voir ou tu as fait ton erreur
Blaise PascalNous souhaitons la vérité et nous trouvons qu'incertitude. [...]
Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
PS : n'oubliez pas le tag
aussitôt dit aussitôt fait
J'ai regarder dans l'unit FMX.Grid;, le truc existe bien mais il est en
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 procedure TForm1.GrilleDrawColumnCell(Sender: TObject; const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF; const Row: Integer; const Value: TValue; const State: TGridDrawStates); var RowColor : TBrush; i: Integer; Col:Tcolumn; B:TrectF; aRowColor: TBrush; begin RowColor := Tbrush.Create(TBrushKind.Solid,TAlphaColors.Alpha); {Je teste la valeur pour selectionner la couleur if (Column=StringColumn8) then begin if Value.ToString = 'non' then RowColor.Color := TAlphaColors.Red else RowColor.Color := TAlphaColors.green; for i := 0 to TGrid(Sender).ColumnCount-1 do begin Canvas.FillRect(Bounds, 0, 0, [], 1, RowColor); } { idée de thierry car le texte est déjà ecrit Col:= TGrid(Sender).ColumnByIndex(i) ; //TGrid(Sender).DefaultDrawColumnCell(Canvas, Column, Bounds, Row, Value, State); TGrid(Sender).DefaultDrawColumnCell(Canvas, Col, Bounds, Row, Value, State); end; end; } if TStringGrid(Sender).Cells[8,row] = 'non' then RowColor.Color := TAlphaColors.Red else RowColor.Color := TAlphaColors.green; Canvas.FillRect(Bounds, 0, 0, [], 1, RowColor); Column.DrawCell(Canvas, Bounds, Row, Value, State); end;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 protected ... procedure DefaultDrawCell(const Canvas: TCanvas; const Bounds: TRectF; const Row: Integer; const Value: TValue; const State: TGridDrawStates); virtual; ...
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager