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 :

Évènement OnDrawColumnCell d'un DBGrid


Sujet :

Bases de données Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Points : 74
    Points
    74
    Par défaut Évènement OnDrawColumnCell d'un DBGrid
    Bonjour,

    petit soucis...

    Sur un DBGrid j'applique ce code dans l'évènement OnDrawColumnCell pour alterner les couleurs des lignes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    If gdSelected In State Then     // si la cellule est sélectionnée
        begin
        Dbgrid1.Canvas.Font.Style := [fsBold];
        Dbgrid1.Canvas.Brush.Color := clNavy
        end
      Else
      if (Dbgrid1.DataSource.DataSet.RecNo mod 2) = 0 then
              Dbgrid1.Canvas.Brush.Color :=  $00F4F3EE
            else
              Dbgrid1.Canvas.Brush.Color := clWhite;
     
      Dbgrid1.DefaultDrawColumnCell(rect,datacol,column,state);
    Le problème est que lorsque le DBGrid perd le focus la ligne reste en bleue mais le texte disparait.

    Quelqu'un a une idée pour résoudre ce problème?

    Cordialement

    Codial

  2. #2
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2005
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 218
    Points : 311
    Points
    311
    Par défaut
    Il suffit d'ajouter le test sur gdfocused

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If (gdSelected In State) and (gdFocused in state) Then     // si la cellule est sélectionnée

  3. #3
    Membre expert
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Points : 3 204
    Points
    3 204
    Par défaut
    Au fait, on dirait qu'il manque des ';' a certains endroits ...
    Aux persévérants aucune route n'est interdite.
    Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
    Current Status
    Avec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
    Faîtes quelque chose de bien avec vos petits sous: Enfants du Mekong

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2005
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 218
    Points : 311
    Points
    311
    Par défaut
    Au fait, on dirait qu'il manque des ';' a certains endroits ...
    Non il n'est pas obligatoire de mettre un ; sur la dernière instruction d'un bloc même si pour la lisibilité et la maintenance il est préférable d'en mettre un à chaque fin d'instruction.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Points : 74
    Points
    74
    Par défaut
    Bonjour,

    le pb c'est que j'ai j'ai mon RowDelect à true et avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     and (gdFocused in state)
    je n'ai plus que la premier champ d'afficher et dans les autres champs je n'ai plus rien.

    Cordialement

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2005
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 218
    Points : 311
    Points
    311
    Par défaut
    j'ai essayé le code que je t'ai indiqué et ca marche en y ajoutant le gdfocused...
    C'est quoi ton rowDelect?
    Edit : J'ai compris : rowselect...

  7. #7
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2005
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 218
    Points : 311
    Points
    311
    Par défaut
    Ca devrait mieux marcher avec le rowselect à true :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
      if (gdselected in state) and (dbgrid1.Focused) then
      begin
        Dbgrid1.Canvas.Brush.Color :=  clred;
      end
      else
      begin
        if (Dbgrid1.DataSource.DataSet.RecNo mod 2) = 0 then
          Dbgrid1.Canvas.Brush.Color :=  $00F4F3EE
        else
          Dbgrid1.Canvas.Brush.Color := clWhite;
        Dbgrid1.Canvas.Font.Color := clblack;
      end;
     
      Dbgrid1.DefaultDrawColumnCell(rect,datacol,column,state);

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Points : 74
    Points
    74
    Par défaut
    Bonsoir,

    grand merci à macumba pour le coup de main.

    Effectivement au lieu de rowDelect il fallait lire rowSelect:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    and (dbgrid1.Focused)
    Ce code fonctionne bien, je n'avais pas pensé à cette syntaxe.

    Encore merci

    Codial

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Lazarus] [0.9.26] DBGrid et l'événement onDrawDatacell
    Par SergioMaster dans le forum Lazarus
    Réponses: 4
    Dernier message: 30/08/2009, 09h30
  2. Problème avec événement OnClick de DbGrid
    Par melles dans le forum Composants VCL
    Réponses: 6
    Dernier message: 22/10/2008, 17h26
  3. DbGrid - OnDrawColumnCell
    Par Jean-Jacques Engels dans le forum Composants VCL
    Réponses: 4
    Dernier message: 10/05/2006, 19h23
  4. Problème avec OnDrawColumnCell sur un DBGrid
    Par n1portki dans le forum Composants VCL
    Réponses: 3
    Dernier message: 23/09/2005, 04h18
  5. DBGrid - OnDrawColumnCell - Bookmark
    Par Lung dans le forum Bases de données
    Réponses: 4
    Dernier message: 12/01/2005, 17h51

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