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 :

Couleur dans DBgrid a l'insertion


Sujet :

Bases de données Delphi

  1. #1
    Membre du Club Avatar de mamou30
    Inscrit en
    Janvier 2007
    Messages
    118
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 118
    Points : 67
    Points
    67
    Par défaut Couleur dans DBgrid a l'insertion
    j'ai fait une ligne de couleur dans un dbgrid (style access ligne par ligne de couleur) avec L'evenement DBGridDrawColumnCell()

    Ligne couleur1:TDBGrid(Sender).Canvas.Brush.Color := $00F7E7E7
    Else
    Ligne couleur2:TDBGrid(Sender).Canvas.Brush.Color := clWhite;
    ca marche.

    Mais Mon problème et quand je fait une insertion dans la base de donnée
    le dbgrid m'envoie seulement
    Ligne couleur2:TDBGrid(Sender).Canvas.Brush.Color := clWhite;
    L'evenement DBGridDrawColumnCell() reprend effet après avoir enregistrer
    table.post

  2. #2
    Membre actif
    Inscrit en
    Décembre 2004
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 390
    Points : 288
    Points
    288
    Par défaut
    C'est quoi le critère qui te permet de choisir l'une des couleurs dans l'evnt OnDraw... ????

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    39
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 39
    Points : 29
    Points
    29
    Par défaut
    Salut,

    j'ai ce code qui permets d'avoir un changement de couleur entre les ligne paires et les impaires + le texte centré en hauteur :

    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
    procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; 
      Rect: TRect; State: TGridDrawState); 
    begin 
         // Pas les lignes et colonnes fixes 
         if (aCol >= StringGrid1.FixedCols) and (aRow >= StringGrid1.FixedRows) then 
         begin 
              // Si ligne impaire 
              if Odd(ARow) then 
                 StringGrid1.Canvas.Brush.Color := clYellow 
              else 
                  StringGrid1.Canvas.Brush.Color := clWhite; 
     
              StringGrid1.Canvas.FillRect(Rect); 
              // Ecrit le texte centré en hauteur 
              StringGrid1.Canvas.TextOut( Rect.Left +2, 
                                   Rect.Top  + (Rect.Bottom-Rect.Top- 
                                   StringGrid1.Canvas.TextHeight(StringGrid1.Cells[ACol,ARow])) div 2, 
                                   StringGrid1.Cells[ACol,ARow]); 
         end; 
    end;
    En espérant que ceci puisse vous aidez.

    A bientôt, Couiss.

  4. #4
    Membre du Club Avatar de mamou30
    Inscrit en
    Janvier 2007
    Messages
    118
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 118
    Points : 67
    Points
    67
    Par défaut
    Merci a couiss et akli_agha
    Citation Envoyé par akli_agha
    C'est quoi le critère qui te permet de choisir l'une des couleurs dans l'evnt OnDraw... ????
    Le critere est le suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    If gdSelected In State Then
      Begin
        TDBGrid(Sender).Canvas.Brush.Color := clHighlight;
    end else
    begin
    If TDBGrid(Sender).DataSource.DataSet.RecNo mod 2 =0 then
        TDBGrid(Sender).Canvas.Brush.Color := $00F7E7E7
        else
        TDBGrid(Sender).Canvas.Brush.Color := Clwhite;
        end;
      TDBGrid(Sender).DefaultDrawColumnCell(rect,datacol,column,state );

  5. #5
    Membre actif
    Inscrit en
    Décembre 2004
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 390
    Points : 288
    Points
    288
    Par défaut
    Je crois que ce n'est pas la meilleure solution car le RecNo ne fonctionnera pas bien si ta table est indexée. Le RecNo suit l'ordre PHYSIQUE dans la table et si la table est indexée, l'ordre suivra la clé d'index ce qui fausse le RecNo et c'est pour ça que tu n'as pas les résultats attendus.

    La solution proposée ci-dessus par Couis conviendra mieux à tes attentes.

    PS : N'oublies pas de mettre le block if gdSelected juste avant DefaultDraw ...
    sinon tu ne verras pas les lignes sélectionnées.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 147
    Points : 164
    Points
    164
    Par défaut
    Mamou30 travaille avec un TDBGrid et non pas un TStringGrid

    L'évenement OnDrawCell ou OnDrawColumnCell ne renvoie pas de coordonnées Row et Col...

    Dans un documentation de Microsoft il atteste le non héritage de Row et Col et conseille d'utiliser le principe de Mamou30...

  7. #7
    Membre du Club Avatar de mamou30
    Inscrit en
    Janvier 2007
    Messages
    118
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 118
    Points : 67
    Points
    67
    Par défaut
    Citation Envoyé par EPJSoft
    Je crois que ce n'est pas la meilleure solution car le RecNo ne fonctionnera pas bien si ta table est indexée. Le RecNo suit l'ordre PHYSIQUE dans la table et si la table est indexée, l'ordre suivra la clé d'index ce qui fausse le RecNo et c'est pour ça que tu n'as pas les résultats attendus.
    j'ai essayé avec une table son index juste pour voir le résultat, mais sont effet

  8. #8
    atb
    atb est déconnecté
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Novembre 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Autre

    Informations forums :
    Inscription : Novembre 2004
    Messages : 639
    Points : 929
    Points
    929
    Par défaut
    Bonjour ,
    je te conseille d'essayer les composants qui sont ici dans cette topic
    http://www.developpez.net/forums/sho...d.php?t=309986
    je travail avec le SMDBGRID il resoudra ton promble de ligne par ligne

  9. #9
    Membre du Club Avatar de mamou30
    Inscrit en
    Janvier 2007
    Messages
    118
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 118
    Points : 67
    Points
    67
    Par défaut
    merci atb
    j'ai déjà ces composant il sont très performant
    mais j'aimerais obtenir une solution avec l'évènement DBGridDrawColumnCell()
    surement y 'a une meilleur stratégie pour ce type d'évènement

Discussions similaires

  1. comment changer la couleur d'une ligne dans dbgrid?
    Par dj_techno dans le forum Composants VCL
    Réponses: 5
    Dernier message: 06/10/2008, 08h25
  2. Insertion de Couleur dans Perlform
    Par badgod dans le forum Langage
    Réponses: 1
    Dernier message: 22/12/2007, 20h47
  3. Insertion de couleurs dans un TEdit
    Par Bouillon dans le forum Delphi
    Réponses: 8
    Dernier message: 24/10/2006, 12h50
  4. Alternance de couleur dans dbgrid
    Par albedo dans le forum C++Builder
    Réponses: 3
    Dernier message: 18/04/2006, 11h46
  5. Couleur des lignes dans DBGrid
    Par eddie dans le forum C++Builder
    Réponses: 5
    Dernier message: 21/06/2002, 18h15

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