IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bases de données Delphi Discussion :

[DBGRID] Comment coloriser 1 ligne sur 2 dans un DBGRID


Sujet :

Bases de données Delphi

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 30
    Points : 28
    Points
    28
    Par défaut [DBGRID] Comment coloriser 1 ligne sur 2 dans un DBGRID
    Bonjour,

    Je débute en Delphi 6 Pro et je cherche le moyen d'avoir une alternance de couleur à la lecture du DBGRID.

    J'ai recherché sur le forum et vu 5 ou 6 messages qui traitaient du problème, mais sans succès pour moi.

    Celui ci me donne tout le fond en jaune:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    procedure TFormAfficher.DBGridAffichageDrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumn;
      State: TGridDrawState);
     
    begin
     
    With DbGridAffichage do
    Case Odd(DataSource.Dataset.Recno) of
    //Ligne impaires en jaune
    true : Column.Color:= clYellow;
    //Lignes paires, couleur par défaut
    False : Column.Color:= clNavy;
    end;
    end;
    et avec ce code, le tableau est tout en gris:

    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 TFormAfficher.DBGridAffichageDrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumn;
      State: TGridDrawState);
     
    begin
     
    if DBGridAffichage.datasource.dataset.recno mod 2 = 0 then // change de couleur 1 ligne sur 2
      begin
        DBGridAffichage.Canvas.Brush.Color:=clRed;
      end
      else
      begin
        DBGridAffichage.Canvas.Brush.Color:=clGray;
      end;
      DBGridAffichage.DefaultDrawColumnCell(Rect,Datacol,Column,State); // dessine les valeur des cellules
    end;
    end.
    J'ai lu un autre post qui parle du composant RXDbGrid, mais je ne sais pas quel code lui mettre pour avoir l'alternance de couleurs.

    Merci de votre aide

  2. #2
    Rédacteur
    Avatar de Giovanny Temgoua
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    3 830
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 3 830
    Points : 4 006
    Points
    4 006
    Par défaut
    Tu as essayé d'adapter le code présent dans la FAQ ?
    http://delphi.developpez.com/faq/?pa...#couleurdbgrid

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 30
    Points : 28
    Points
    28
    Par défaut
    Non

    Désolé je n'avais pas vu ce post

    j'essaye de suite

    Merci

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 30
    Points : 28
    Points
    28
    Par défaut
    Donc en mettant le code de la FAQ :

    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 TFormAfficher.DBGridAffichageDrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumn;
      State: TGridDrawState);
    begin
     
     If gdSelected In State Then
      Begin
        TDBGrid(Sender).Canvas.Brush.Color := clNavy
      End Else
      Begin
        If TDBGrid(Sender).DataSource.DataSet.FieldByName('NumAuto').Value=1 Then
          TDBGrid(Sender).Canvas.Brush.Color := clLime
        Else
          TDBGrid(Sender).Canvas.Brush.Color := clWhite;
      End;
      TDBGrid(Sender).DefaultDrawColumnCell(rect,datacol,column,state);
    end;
    J'ai la ligne numéro 1 du DBGrid souligné en vert
    Comment fait-on pour avoir les autres lignes de couleurs différentes ?

  5. #5
    Rédacteur
    Avatar de Giovanny Temgoua
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    3 830
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 3 830
    Points : 4 006
    Points
    4 006
    Par défaut
    Un code pour donner des couleurs alternées au ligne de la grille et la couleur rouge à la ligne actuellement sélectionnée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    begin
      If gdSelected In State Then
      Begin
        TDBGrid(Sender).Canvas.Brush.Color := clRed
      End Else
      Begin
        if (TDBGrid(Sender).DataSource.DataSet.RecNo mod 2) = 0 then TDBGrid(Sender).Canvas.Brush.Color := clWhite
        else TDBGrid(Sender).Canvas.Brush.Color := clNavy;
      End;
      TDBGrid(Sender).DefaultDrawColumnCell(rect,datacol,column,state);
    end;
    A+

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 30
    Points : 28
    Points
    28
    Par défaut
    Bonjour,

    Merci de votre effort.
    Mais il y a quelque chose que je ne dois pas faire correctement.

    Voici votre code modifié pour mon appli :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TFormAfficher.DBGridAffichageDrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    begin
      If gdSelected In State Then
      Begin
        TDBGrid(Sender).Canvas.Brush.Color := clRed
      End Else
      Begin
        if (TDBGrid(Sender).DataSource.DataSet.RecNo mod 2) = 0 then TDBGrid(Sender).Canvas.Brush.Color := clWhite
        else TDBGrid(Sender).Canvas.Brush.Color := clNavy;
      End;
      TDBGrid(Sender).DefaultDrawColumnCell(rect,datacol,column,state);
    end;
    En effet j'ai bien la cellule sélectionnée de la colonne 1 en rouge, mais tout le reste du DBGrid est en bleu couleur foncée.

    Y a t-il un paramètre à activer ou à désactiver dans les propriétés. Je n'ai pas l'alternance des couleurs, tout le DBGrid est de couleur unie.

    Merci de votre aide

  7. #7
    Rédacteur
    Avatar de Giovanny Temgoua
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    3 830
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 3 830
    Points : 4 006
    Points
    4 006
    Par défaut
    C'est bizzare que tu aies la couleur bleue partout!

    Quoi qu'il en soit, dans les options du DBGrid, mets gdRowSelect à true et réessaye voir...

    A+

    PS : Si cà te pose encore des problèmes, je te filerai mon code tout entier si tu veux...

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 30
    Points : 28
    Points
    28
    Par défaut
    Merci de ton aide,

    On se sent moins seul dans la galère

    J'ai fait la modif dans l'inspecteur d'objet du DBGrid en mettant dgRowSelect à true et il y a de l'amélioration :

    - il n'y a pas qu'une seule cellule de coloriée en rouge mais bien toute la ligne.
    - par contre il n'y a que celle qui reçoit le focus qui se colorise, moi j'aimerais que ça reste figé, je ne veux pas surligner de ligne avec une couleur précise
    - j'aurais aimé avoir 1 bleu, 1 blanche, 1 bleu, ... et ainsi de suite sans soulignement particulier
    - c'est pour avoir un DBGrid agréable à lire

    Merci de ton temps passé à m'aider

  9. #9
    Rédacteur
    Avatar de Giovanny Temgoua
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    3 830
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 3 830
    Points : 4 006
    Points
    4 006
    Par défaut
    Je suppose que tu as bien une alternance de couleur pour les autres lignes (celles qui ne sont pas sélectionnées).

    La première partie du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     If gdSelected In State Then 
      Begin 
        TDBGrid(Sender).Canvas.Brush.Color := clRed 
      End
    colorie la ligne sélectionnée en rouge. Donc en principe, en la supprimant, tu devrais normalement avoir des couleurs alternées...

    A+

    PS : je n'ai pas mon compilo sous la main

  10. #10
    Membre actif
    Inscrit en
    Juin 2002
    Messages
    409
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 409
    Points : 234
    Points
    234
    Par défaut
    Bonjour did85,

    Pour ma part, suite a ce post, je viens d'appliquer le code de King Kaiser, et ca marche impec. J'avais deja essaye de faire ce truc il y a qque temps et j'avais un scintillement, mais la nickel !
    j'ai une grille avec une alternance de couleur entre chaque ligne, et encore une autre couleur pour la barre de selection.

    Si je comprends bien, ce qu'il te gene c'est la barre de selection ?
    Mais il en faut bien une ! A moins que ta DBGrid ne soit pas modifiable. Auquel cas plutot chercher a rendre ton DataSet readOnly, qui je pense aurra pour effet d'enlever cette barre de selection. (je suis pas sur du coup, mais a voir)

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 30
    Points : 28
    Points
    28
    Par défaut
    En effet en occultant la ligne de code comme ceci (avec des accolades) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    begin
      {If gdSelected In State Then
      Begin
        TDBGrid(Sender).Canvas.Brush.Color := clRed
      End Else}
    Je n'ai plus le soulignement de la ligne en rouge, mais tout le fond du DBGrid reste en violet foncé !

    Dommage que je ne puisse pas te fournir de copie du fond d'écran du DBGrid, je ne vois pas comment utiliser le code "IMG"

    A+

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 30
    Points : 28
    Points
    28
    Par défaut
    Merci kase74 d'avoir essayé le code,

    cela prouve bien que je m...e quelque part.

    Je recommence le projet sur une unit vierge et ensuite je change l'écran (il est peut être HS ???).
    Quelque chose de pas normal se passe.

    En effet le DBGrid n'est pas modifiable (pour l'instant, je débute et j'ouvre une form pour ajouter des éléments dans la base, je ne sais pas rendre les lignes du DBGrid actives : prochaine étape).

    Je voulais juste donner du fun à la page utilisant les DBGrid en les colorisant comme le fait Romuald Raffin dans son logiciel R-Club, téléchargeable ici :
    http://romuald.raffin.free.fr/RClub.htm

    Dans son logiciel : a chaque nouvel enregistrement la ligne additionnée se colorise différement en fonction de son emplacement dans le DBGrid.

    Je réessaye

    A+

  13. #13
    Membre actif
    Inscrit en
    Juin 2002
    Messages
    409
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 409
    Points : 234
    Points
    234
    Par défaut
    J'ai peut etre compris :

    Si tu n'as qu'un ou 2 enregistrements, effectivement, ton premier enregistrement est en, disons, BLEU, et le deuxieme est en VERT.
    Et le reste du DBGRID est de la couleur defini par la propriete DBGrid.Color, qui chez toi est peut etre VIOLET.

    Pour ma part, j'ai affecte a mes lignes deux couleurs differentes (ClDark,CldkGray), et pour la couleur de fond de ma DBGrid, j'ai remis une de ces deux couleurs (ClDark), juste histoire que ca ne choque pas.
    Sinon, effectivement, l'alternance des couleur s'arrete des qu'il n'y a plus d'enregistrement a afficher. Logique ! Mais je ne sais pas faire mieux.

  14. #14
    Rédacteur
    Avatar de Giovanny Temgoua
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    3 830
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 3 830
    Points : 4 006
    Points
    4 006
    Par défaut
    Citation Envoyé par kase74
    J'ai peut etre compris
    Moi je ne saisis toujours pas très bien

    Un exemple concret. Ta grille affiche 5 lignes. Avec le code si-dessus, les lignes seront de couleurs alternées.

    Ensuite, tu aimerais que le reste de la grille (où il n'y a pas de lignes) aie une couleur particulière ?

    De toutes les façons, s'il t'est possible de nous donner une adresse où on pourrait acceder à la copie d'écran lorsque le programme est lancé, ce serait bien.

    A+

    PS : charger l'image directement ici alourdirait la page et donc ralentirait son chargement.

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 30
    Points : 28
    Points
    28
    Par défaut
    Réponse à kase74 :

    Si tu n'as qu'un ou 2 enregistrements, effectivement, ton premier enregistrement est en, disons, BLEU, et le deuxieme est en VERT.
    Et le reste du DBGRID est de la couleur defini par la propriete DBGrid.Color, qui chez toi est peut etre VIOLET
    Non c'est bien mon problème : je n'ai pas d'alternence de couleurs, tous les enregistrements sont de la même couleur. Comme si je forçais cette couleur quelque part. Et pourtant la propriété DBGrid.Color est à ClWhite (par défaut)

    J'ai l'impression que je ne passe pas dans cette ligne de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (TDBGrid(Sender).DataSource.DataSet.RecNo mod 2) = 0 then TDBGrid(Sender).Canvas.Brush.Color := clYellow
    : Quelqu'un pourrait-il me la traduire grosso modo ?


    Je passe uniquement dans la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    else TDBGrid(Sender).Canvas.Brush.Color := ClBlue;
    Tout est bleu et le fait d'avoir laissé le DBGrid.Color à White cela me donne un quadrillage blanc.


    En réponse à King Kaiser :

    Un exemple concret. Ta grille affiche 5 lignes. Avec le code si-dessus, les lignes seront de couleurs alternées.
    C'est justement ce que je souhaite, mais le DBGrid reste irrémédiablement uni en un joli bleu

    Ensuite, tu aimerais que le reste de la grille (où il n'y a pas de lignes) aie une couleur particulière ?
    Non seulement que le DBGrid reste d'une des 2 couleurs déjà utilisées.

    De toutes les façons, s'il t'est possible de nous donner une adresse où on pourrait acceder à la copie d'écran lorsque le programme est lancé, ce serait bien.
    Je n'ai pas de site internet pour vous envoyer la copie d'écran, donc là je ne qais pas comment faire autrement.

    Merci à tous les deux

  16. #16
    Membre actif
    Inscrit en
    Juin 2002
    Messages
    409
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 409
    Points : 234
    Points
    234
    Par défaut
    Bonjour, bon, ca me chagrine fortement cette histoire, alors reprenons depuis le debut :

    Tu mets une DBGrid dans une form, et tu renseignes les proprietes suivantes :
    DBGrid.DataSource := ton DataSource
    DBGrid.Color := disons ClDark
    DBGrid.DefaultDrawing := false
    (je crains qu'on est ommis de t'en parler de celui la ! Effectivement, si tu le laisse a true, il fait un affichage par defaut alors qu'a false, il passe par drawcolumncell)

    et donc dans l'evenement DBGrid.DrawColumnCell tu y mets le code de King Kaiser.
    Et la ca devrait marcher non de "`^"¤]¤ !!!!!!
    je viens de le faire, c'est impec !


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (TDBGrid(Sender).DataSource.DataSet.RecNo mod 2) = 0 then TDBGrid(Sender).Canvas.Brush.Color := clYellow
    TDBGrid(Sender).DataSource.DataSet = c'est ton clientdataset ! Seulement il passe par les prorietes du dbgrid.datasource puis du datasource.dataset pour connaitre son nom. Ce serait exactement pareil si tu mettais directement le nom de ton clientdataset : CSD_table_X.RecNo

    RecNo = C'est une propriete de TClientDataSet qui permet de connaitre le numero de l'enregistrement en cours. C'est un integer tout bete, independant de tes donnees que le ClientDataSet affecte sequentiellement a chaque ligne d'enregistrement.

    ...RecNo mod 2 = Calcul mathematique qui donne le reste de la division RecNo / 2

    Et donc au final, si le resultat = 0 on renseigne la propriete adequat du DBgrid pour qu'il prenne comme couleur de remplissage JAUNE. TDBGrid(Sender).Canvas.Brush.Color := clYellow = DBGrid.Canvas.Brush.Color = jaune.

    Et si le resultat est <> 0 (en l'occurence 1 car tout entier mod 2 donne 0 ou 1) alors on affecte la couleur verte !

    NB : Le fait d'utiliser le parametre SENDER de la procedure DrawColumnCell plutot que de denommer directement ton DBGrid, ainsi que de passer par les proriete DataSource.DataSet, peut sembler lourd et fastidieux. Effectivement, c'a l'est car plus long a ecrire et moins lisible, MAIS c'est la marque d'un codage propre et avertis : Si pour X raison, tu change de datasource ou de clientdataset, ou que tu les renomment, ben tu n'as pas a touche au reste du code !!! et ca roule tout seul. C'est la preuve que King Kaiser semble merite son pseudo dans ce domaine. (pour ma part, faudrait que j'y pense plus souvent!)

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 30
    Points : 28
    Points
    28
    Par défaut
    Bonjour kase74,

    merci pour toutes ses explications claires et instructives et aussi pour tout ton temps passé à m'aider.

    Dans le doute et dans le désespoir je suis allé sur le site de Romuald Raffin et là on trouve un composant nommé "RaGrid & RaDBGrid" téléchargeable ici : http://romuald.raffin.free.fr/composants.htm

    Une fois installé dans l'onglet RADBControls on trouve l'objet RaDBGrid qui remplace le DBGrid traditionnel et nous avons :

    - 1 propriété de l'objet nommée : LineColorOne
    - 1 autre : LineColorTwo

    Ensuite dans les options de l'objet il faut passer la propriété dgLineColor à True

    On se retrouve avec un DBGrid plutôt un RaDBGrid avec des lignes aux couleurs panachées et sans ajout de code


    Par contre, ne voulant pas rester sur un échec je regarde ceci : (remarque très intéressante !)

    Il faut que je regarde là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DBGrid.DefaultDrawing := false (je crains qu'on est ommis de t'en parler de celui la ! Effectivement, si tu le laisse a true, il fait un affichage par defaut alors qu'a false, il passe par drawcolumncell)
    Sinon pour ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Tu mets une DBGrid dans une form, et tu renseignes les proprietes suivantes : 
    DBGrid.DataSource := ton DataSource
    Oui j'ai bien ceci mais, la DataSource se trouve sur un DataModule: pas d'inconvénient :

    J'aimerais bien y arriver avec le code de King Kaiser

  18. #18
    Rédacteur
    Avatar de Giovanny Temgoua
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    3 830
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 3 830
    Points : 4 006
    Points
    4 006
    Par défaut
    Citation Envoyé par kase74
    Et la ca devrait marcher non de "`^"¤]¤ !!!!!!


    Citation Envoyé par did85
    Oui j'ai bien ceci mais, la DataSource se trouve sur un DataModule: pas d'inconvénient :
    Non aucun. Tu peux toujours faire un test en le plaçant sur la même form...

    Par ailleurs, merci pour l'info sur le composant RaDBGrid

    A+

    PS : si tu n'y arrives toujours pas, je te filerai mon code par mp si tu veux.

  19. #19
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 30
    Points : 28
    Points
    28
    Par défaut
    A King Kaiser:
    As-tu essayé le composant RaDBGrid ? Pas mal, non ?
    Comme quoi, je suis toujours en recherche de solution :
    Je veux bien de ton code, stp.


    A kase74
    En effet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DBGrid.DefaultDrawing := false
    était bien sur True, je l'ai donc passé à False
    Mais rien n'a changé, le DbGrid est tout bleu.

    Pourtant :
    DBGrid.DataSource := DataSourceAffichage (j'ai mis l'objet TDataSource sur le form au lieu du DataModule)
    DBGrid.Color := ClWhite
    DBGrid.DefaultDrawing := false

    Dans le DBGrid.DrawColumnCell, j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TFormAfficher.DBGridAffichageDrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    begin
      If gdSelected In State Then
      Begin
        TDBGrid(Sender).Canvas.Brush.Color := clRed
      End Else
      Begin
        if (TDBGrid(Sender).DataSource.DataSet.RecNo mod 2) = 0 then TDBGrid(Sender).Canvas.Brush.Color := clYellow
        else TDBGrid(Sender).Canvas.Brush.Color := ClBlue;
      End;
      TDBGrid(Sender).DefaultDrawColumnCell(rect,datacol,column,state);
    end;
    Et le DBGrid reste inéxorablement d'une jolie couleur bleutée de toute beauté !!
    Alors que le composant de Romuald Raffin : RaDBGrid fonctionne, étrange !!

    Je ne dois pas passer dans la boucle du If, j'ai bien le Else ... ClBlue

    Je crois que je ne vais pas vous ennuyer plus longtemps, je reprendrai plus tard parce qu'à côté de ça je ne fais rien d'autre.

    A+

  20. #20
    Membre actif
    Inscrit en
    Juin 2002
    Messages
    409
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 409
    Points : 234
    Points
    234
    Par défaut
    Verifie avec le debugger le resultat de ... mod 2
    Comme je te l'ai dis, tu dois avoir 0 ou 1 en alternance 1 ligne sur 2.

    Trace avec F7 pour voir s'il passe bien un coup dans THEN ... et un autre dans ELSE ...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 1
    Dernier message: 11/11/2009, 11h55
  2. Comment mettre des lignes de couleur dans une TCheckListBox ?
    Par Isa31 dans le forum Composants VCL
    Réponses: 9
    Dernier message: 31/03/2005, 08h40
  3. Réponses: 4
    Dernier message: 02/09/2004, 14h50
  4. [C#] Comment mettre une ligne en couleur dans mon DataGrid ?
    Par vandeyy dans le forum Windows Forms
    Réponses: 7
    Dernier message: 19/07/2004, 10h03
  5. [VB6] Obtenir +sieurs lignes sur RptTextBox dans un DataReport
    Par Babaframy dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 24/01/2004, 12h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo