Bonjour,
Je veux sélectionner en rouge le mot "PANNE" dans toutes les lignes d'un dbgrid nommé DBGRID1 d'une table nommée TABLE1.
je travaille en delphi7.
Merci d'avance
Bonjour,
Je veux sélectionner en rouge le mot "PANNE" dans toutes les lignes d'un dbgrid nommé DBGRID1 d'une table nommée TABLE1.
je travaille en delphi7.
Merci d'avance
Bonjour,
Tout va dépendre si "PANNE" est la valeur du champ ou seulement un mot dans le champ .
Dans le premier cas c'est simple sans le second par contre , ça risque d'être coton![]()
voir laet tout ce qui concerne l'évènement ondrawDataCell
salut sergio,
Malheureusement il s'agit d'un mot dans le champset je compte toujours sur votre aide,
Merci pour votre réponse.
Bonjour,
on pourrait au moins voir vos tentatives !
voici , une première approche 'presque complète'
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 procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); var Pvaleur : String; // chaine partielle taille,top,left,posPanne : integer; begin with (sender as TDBGrid) do begin if Column.FieldName='Champ_Panne' then begin posPanne:=pos('PANNE',Column.Field.asString); if posPanne>0 then begin {// cas simple // Canvas.Font.Color:=clRed; // DefaultDrawColumnCell(Rect,Datacol,Column,State); } // cas "complexe" // il va falloir séparer le canvas en 3 parties et calculer la taille a chaque fois // effacer ? Canvas.FillRect(Rect); // 1° partie de la chaine pvaleur:=Copy(column.Field.asString,1,pospanne-1); top := rect.top +2; left := Rect.left + 2; Taille:=Canvas.TextWidth(pvaleur); Canvas.TextOut(Left,Top,pvaleur); // 2° partie de la chaine = 'PANNE' pvaleur:='PANNE'; left := left+Taille; Taille:=Canvas.TextWidth(pvaleur); Canvas.font.Color:=clred; Canvas.TextOut(Left,top,pvaleur); // 3° partie pvaleur:=Copy(column.Field.asString,pospanne+5,length(column.Field.asString)-pospanne); left := left+Taille; Canvas.font.Color:=clwindowText; Canvas.TextOut(Left,Top,pvaleur); end; end else DefaultDrawColumnCell(Rect,Datacol,Column,State); end; end;
salut sergio,
j'ai essayé votre proposition , ça ne marche toujours pas
j'ai du loupé quelque chose,
je vais continuer mes recherches en tenant compte de ce que vous avez
proposé et je vous tiendrai au courant.
Merci encore.
Pourtant , mon test (fait en D3) fonctionne .
Je dois avouer ,n'avoir pas tester différents cas :
valeur débutant par 'PANNE'
valeur finissant par 'PANNE'
je n'aime pas non plus les
trop 'fixes' , si jamais la hauteur des cellules n'était pas standard , cela ne serait certainement pas trop centré en hauteur .
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 top := rect.top +2; left := Rect.left + 2;
J'ai fait au plus 'simple' sans soucis d'optimisation (j'avais aussi tenté avec des TextRect , plus complexe)
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