Dbgrid et coloration

gabs77 Messages postés 379 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 8 octobre 2008 - 23 sept. 2006 à 19:10
gabs77 Messages postés 379 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 8 octobre 2008 - 25 sept. 2006 à 22:01
slt,
je travaille actuellement sur un projet avec delphi et mysql
et j'aimerai colorer une ligne sur deux la dbgrid
je ne parviens pas a le faire
si ce n'est que colorer toute la dbgrid d'une seule couleur

voila frossomodo ce que j'ai pu faire :(c'est fort peu compliqué, je dois l'admettre)

procedure dbgrid1DrawOnCell (........)
begin
with dbgrid1 do
canvas.brush.color:=clRed;
end;

9 réponses

cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 3
24 sept. 2006 à 08:47
Bj
il existe un code déposé sur ce site ou developper.com qui montre cela, mais avec un stringGrid.
le principe reste le même me semble t-il. Je n'utilise pas dbGrid!
Jean_Jean
0
Utilisateur anonyme
24 sept. 2006 à 20:49
Salut,

Faire ce genre de chose est rarement aisé : il faut souvent utiliser l'artillerie lourde. Dans ce cas deux autres solutions s'offrent à toi:
*Utiliser un composant amélioré par rapport à la vcl
*Coder toi même ton composant avec les options que tu veux

@+
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
24 sept. 2006 à 22:27
Inutile de sortir l'artillerie lourde (), il suffit d'exploiter l'évènement OnDrawColumnCell du composant TDbGrid :

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  with DbGrid1 do
  begin
    case Odd(DataSource.Dataset.Recno) of
      //Ligne impaires en jaune
      true: Column.Color :=  clYellow;
      //Lignes paires, couleur par défaut
      False: Column.Color := clWindow;
     end ;
    DefaultDrawColumnCell(Rect, DataCol, Column, State);
  end;
end;

May Delphi be with you !
<hr color ="#008000" />
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
24 sept. 2006 à 22:29
Oups !
Petite précision, ne pas oublier d'ajouter :
DbGrid1.DoubleBuffered := True;
à la création de la fiche contenant le TDbGrid1.

May Delphi be with you !
<hr color="#008000" />
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 3
25 sept. 2006 à 17:47
> [javascript:Insert_Emoticon('/imgs2/smile_question.gif'); ]Gabs77, est-ce que ça marche?
> [javascript:Insert_Emoticon('/imgs2/smile.gif'); ]Delphiprog, Heureusement que tu a répondu, car j'allais me pencher sur le problème et sortir l'artillerie lourde, [javascript:Insert_Emoticon('/imgs2/smile_dissapprove.gif'); ]entendre en ce qui me concerne, l'envoi direct d'un message au controle.
[javascript:Insert_Emoticon('/imgs2/smile_shy.gif'); ]J'ai perdu un peu confiance en mon ex expérience de programmeur. Je suis en train de tout revoir et en particulier, la gestion des messages de windows par delphi et les API. Ton dépot des data types va m'aider car je développai en BPW 7, mais il faut dire que c'était un peu lourd.
Je programme en Delphi7 maintenant (obtenu gratis) et j'ai quelques difficultés avec la doc qui me parait moins bien fournie que ma version delphi5 Pro sur disquette. Peut-être est-ce une idée?!?.
[javascript:Insert_Emoticon('/imgs2/smile_question.gif'); ]C'est peut être pas l'endroit pour évoquer le sujet, mais  je pensai aller dans toutes les unités fournie avec delphi7 récupérer les constantes de messages. Pensez-vous que c'est une démarche utile? Msdn ne fournit pas les cte utilisées par Delphi et je n'ai pas trouvé l'aide qui les fournissait systématiquement...
Jean_Jean
0
gabs77 Messages postés 379 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 8 octobre 2008
25 sept. 2006 à 18:37
désolé je viens juste d'essayer
et sa me colorie tous le tableau en jaune
sa fait pas :
jaune
normal
jaune
normal
par exemple!!
0
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 3
25 sept. 2006 à 19:43
Avec les boites listes, normalement l'évènement doit être géré avec l'évènement OnDrawItem.

  if index mod 2<>1 then ComboBox.canvas.brush.color:=couleur1
                               else ComboBox.canvas.brush.color:=ouleur2;
[javascript:Insert_Emoticon('/imgs2/smile.gif'); ]Bon code!
Jean_Jean
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
25 sept. 2006 à 21:14
@Jean_Jean :
if index mod 2<>1
est équivalent mais moins rapide je pense que :
case Odd(DataSource.Dataset.Recno)
De plus, l'événement OnDrawColumnCelle ne fournit pas d'argument nommé Index.

J'ai loupé quelque chose ou quoi ?
On parle de "boite liste" ou de DbGrid ?

@gabs77 : es-tu sur d'avoir utilisé le code que je t'ai donné ?

May Delphi be with you !


<hr color="#008000" />
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
0
gabs77 Messages postés 379 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 8 octobre 2008
25 sept. 2006 à 22:01
@delphiprog

j en suis sur voici ce que j'ai mis
procedure TForm1.OnCreate (Sender: TObject);
begin
DbGrid1.DoubleBuffered := True
;
end;

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  with DbGrid1 do
  begin
    case Odd(DataSource.Dataset.Recno) of
      //Ligne impaires en jaune
      true: Column.Color : = clYellow;
      //Lignes paires, couleur par défaut
      False: Column.Color := clWindow;
    end;
    DefaultDrawColumnCell(Rect, DataCol, Column, State);
  end;
end;
0
Rejoignez-nous