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

Composants VCL Delphi Discussion :

afficher la ligne d'un Tdbgrid avec une couleur différence pour la première occurrence


Sujet :

Composants VCL Delphi

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 945
    Points : 123
    Points
    123
    Par défaut afficher la ligne d'un Tdbgrid avec une couleur différence pour la première occurrence
    Bonjour à tous,

    pour afficher les lignes dans un Tdbgrid avec des couleurs différentes j'utilise ce code
    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
    procedure TForm1.dbgDrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    begin
      If gdSelected In State Then
        TDBGrid(Sender).canvas.Brush.color := clblue;
      Else
      Begin
        IF TDBGrid(Sender).datasource.dataset.fieldvalues[column.fieldname] =1 then
          TDBGrid(Sender).canvas.Brush.color := clLime
        Else
          TDBGrid(Sender).canvas.Brush.color := clWhite;
      End;
      TDBGrid(Sender).DefaultDrawColumnCell(Rect, DataCol, Column, State);
     
    end;
    jusqu'a là c'est bon. Maintenant, j'ai un champs année ,qui peut prendre la même valeur sur plusieurs enregistrement et je voudrais pouvoir mettre la première ligne avec un changement d'année en une couleur différente.

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Voilà une solution :

    • Utilisez une variable privée de la forme.
    • Initialisez là (emptystr) au moment du create (ou à l'ouverture de la table).

    Dans OnDrawColumncell
    • testez la valeur du champ Annee en fonction de cette variable.
      Si elles sont différentes :
    • changer la couleur, mémorisez la nouvelle valeur dans la variable
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 945
    Points : 123
    Points
    123
    Par défaut
    Bonjour,

    je l'ai déja testé, et ça marche pas, du fait que si on fait défiler le Tdbgrid la valeur change et la ligne qui plus haut prend la couleur.

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Si vous l'avez fait ce n'est pas indiqué dans le code que vous avez montré.
    Si ça ne fonctionne pas, c'est à un niveau au dessus (c'est à dire au niveau des données) qu'il faut travailler
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 945
    Points : 123
    Points
    123
    Par défaut
    Je pense que vous m'avez pas compris, voila un exple de ce que peut contenir le table

    année affection valeur
    2017 Axe sur voie 25 000.00 //ligne 1
    2017 Bille ronde 13 000.00
    2018 Axe sur voie 24 700.00 //ligne 3
    2018 Ligne en vrac 17 850.00
    2019 Bille ronde 14 000.00
    ect..
    ,
    si il ya pas de manipulation dans le Tdbgrid l'exple que vous m'avez donné fera tout à fait l'affaire. Maintenant, imagine je suis sur la 3eme ligne et je repasse à la 2eme ligne, le Tdbgrid va automatiquement changer l'affichage.

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par chekkal Voir le message
    Je pense que vous m'avez pas compris,
    vous me prenez pour un débile ?
    l'exemple que vous m'avez donné fera tout à fait l'affaire.
    je ne vous ai pas fourni d'exemple mais un début de démarche.

    De plus, je vous ai écrit que si cela ne fonctionnait pas il fallait travailler en amont, c'est à dire sur les données
    par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT ANNEE,AFFECTION,VALEUR FROM TABLETEST
    JOIN 
    SELECT ANNEE,NULL,NULL FROM TABLETEST GROUP BY ANNEE
    Permet d'obtenir une ligne de groupe ANNEE, un test sur la colonne affection ou valeur permet alors de savoir s'il s'agit d'un groupe ou pas. Et ça, ça fonctionne

    Cela écrit, il y a des composants de grilles qui gére ça sans.
    exemple SMDBGrid permet de faire un "datagrouping"
    TMS advDBGrid permet de faire des groupes type dossiers
    Nom : asgnod.png
Affichages : 161
Taille : 3,3 Ko

    je suis sur la 3eme ligne et je repasse à la 2eme ligne, le Tdbgrid va automatiquement changer l'affichage.
    Depuis presque 5 ans je n'utilise plus de DBGrid et déjà avant je n'étais pas très chaud à l'utiliser sur mes formes. Il faut remonter aux années de début du siècle pour retrouver dans mes programmes, une utilisation intensive des DBGrids dans mes formes. Malgré tout je me demande si vous avez totalement raison, comme vous n'avez pas fourni le code de votre soit-disant essai, je reste sceptique.

    d'ailleurs une mémorisation un peu plus pointue : dans un TDictionary, et ça fonctionne.
    ça c'est un exemple, pas une démarche

    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
    uses ... system.generics.collections;
     
    var
      Form1: TForm1;
      g : TDictionary<Integer,Integer>;
    .....
     
    procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    var ligne : integer;
    begin
       if g.TryGetValue(TDBGrid(Sender).datasource.dataset.fieldvalues['ANNEE'],ligne)
         then begin
            if ligne=TDBGrid(Sender).datasource.dataset.Recno
              then TDBGrid(Sender).canvas.Brush.color := clLime
              else TDBGrid(Sender).canvas.Brush.color := clwhite;
          end
       else begin
           g.Add(TDBGrid(Sender).datasource.dataset.fieldvalues['ANNEE'],
                     TDBGrid(Sender).datasource.dataset.Recno);
           TDBGrid(Sender).canvas.Brush.color := clLime;
       end;
       TDBGrid(Sender).DefaultDrawColumnCell(Rect, DataCol, Column, State);
    end;
    ...
    initialization
     g:=TDictionary<Integer,Integer>.Create;
    finalization
     g.Free;
    end.
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 945
    Points : 123
    Points
    123
    Par défaut
    l'exemple que vous m'avez donné fera tout à fait l'affaire.
    je ne vous ai pas fourni d'exemple mais un début de démarche.
    correction:
    mon exple fera tout à fait l'affaire.
    De plus, je vous ai écrit que si cela ne fonctionnait pas il fallait travailler en amont, c'est à dire sur les données
    j'insiste sur le fait que vous m'avez pas compris, vous me proposez un code sql qui se focalise sur le champs année alors que moi je veut pas changer la structure.

    Depuis presque 5 ans je n'utilise plus de DBGrid et déjà avant je n'étais pas très chaud à l'utiliser sur mes formes. Il faut remonter aux années de début du siècle pour retrouver dans mes programmes, une utilisation intensive des DBGrids dans mes formes. Malgré tout je me demande si vous avez totalement raison, comme vous n'avez pas fourni le code de votre soit-disant essai, je reste sceptique.
    avec ma modeste expérience avec delphi depuis la version 7, j'ai jamais trouvé un composant de gestion de données aussi puissant et complet

  8. #8
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    j'insiste sur le fait que vous ne m'avez pas compris, vous me proposez un code sql qui se focalise sur le champ année alors que moi je ne veux pas changer la structure.
    J'ai très bien compris au contraire, c'est vous qui ne lisez pas tout. Vous n'avez pas lu la fin de mon message qui ne touche en rien votre structure et répond à votre demande.
    Relisez ce que j'ai écrit sous cette partie
    d'ailleurs une mémorisation un peu plus pointue : dans un TDictionary, et ça fonctionne.
    Annotation : System.Generics.Collections est une unité de la RTL depuis D2009


    avec ma modeste expérience avec delphi depuis la version 7,
    l'expérience ne s'évalue pas en fonction d'une version
    je n'ai jamais trouvé un composant de gestion de données aussi puissant et complet
    Hé bien si vous considérez que TDBGrid est le summum j'en reste ébahi , les deux composants que j'ai cité (qui, je le concède sont des dérivés de TDBGrid) sont certainement plus évolués, remplissant de nombreuses lacunes
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

Discussions similaires

  1. Afficher la ligne en cours avec une couleur différente
    Par chekkal dans le forum Composants VCL
    Réponses: 3
    Dernier message: 05/12/2017, 10h50
  2. Réponses: 1
    Dernier message: 08/05/2009, 23h12
  3. Sélection des lignes de feuille Excel avec une listbox
    Par wlofab dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 22/07/2008, 15h35
  4. Réponses: 2
    Dernier message: 23/04/2008, 12h28
  5. Réponses: 2
    Dernier message: 13/12/2006, 20h30

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