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

Delphi Discussion :

[DbGrid] lignes de toutes les couleurs.. et les idées pas tres claires


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 187
    Par défaut [DbGrid] lignes de toutes les couleurs.. et les idées pas tres claires
    Bon!

    Je ne comprend pas grand chose a ce tutoriel:
    http://delphi.developpez.com/faq/?pa...#couleurdbgrid

    Il faut déclarer DBGrid1DrawColumnCell en tant que procedure au debut du code et par la suite utiliser l'évènement OnDrawColumnCell qui est un re-dessinateur de cellule.
    Okay tres bien!! c'est fait mais par la suite, ça n'explique toujours pas comment colorier les celules de mon DbGrid.

    Supposons que j'ai un DbGrid avec un champs 'Prenom' et que je souhaite colorier toutes les lignes dont la valeur du champs 'Prenom' valent 'Julien'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dbgrid2.OnDrawColumnCell:= ????
    Enfin, je ne capte pas trop le procédé et les posts precedant sont pas mal complexes... (pour moi), quelqu'un aurait une explication simple
    Ou alors un exemple de code complet pour que je puisse decortiquer le tout!!!

    Merci

  2. #2
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Par défaut
    vas voir sur net, il y a des d'exemples si tu formules une recherche adhoc sur google.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 187
    Par défaut
    J'en ai un peu marre de tomber sur des truk foireux !!
    Donne moi un lien s'il en existe tant que cela.

  4. #4
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Bonjour,


    Un meilleur exemple :
    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 TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; 
      Rect: TRect; State: TGridDrawState); 
    var 
      s: String; 
    begin 
      if (ACol = 2) and (ARow = 3) then 
      with Sender as TStringGrid do 
      begin 
        s := Cells[ACol, ARow]; 
        Canvas.Brush.Color := clRed; 
        Canvas.FillRect(Rect); 
        Canvas.Textout(rect.left+3,Rect.top+3,s) ; 
      end; 
    end;
    Je te suggere d'utiliser la propriété Objects des cellules (ou d'une seule cellule de la ligne) afin d'y mettre le style.
    Ensuite dans l'événement onDrawCell, tester cette propriété afin de faire le fillrect et le textout suivant le style désiré.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 187
    Par défaut
    Sorry mais je ne comprend absolument rien de tout cela!!!

    Tu travaille avec des TstrinGrid??? Que tu as l'air de considerer comme une matrice!!!

    Ce que je ne comprend pas c'est le developpement!
    Pour reprendre mon exemple précedent : comment faire comprendre au system qu'on veut colorier en bleu, noir ou maron devant et rose derriere les ligne dont le nom vaut "Jules", "henry" ou meme "Marie-antoinette"?

    Y'a pas un truk plus simple du genere
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if table1.fieldbyname('prenom').value = 'Morisse' then cellule:= blue;
    By the way, je n'ai toujours pas réussi à trouver une source complete

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 187
    Par défaut
    Bon OK! Je pose ma question d'une autre façon alors :

    Avec 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
    procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; 
      Rect: TRect; State: TGridDrawState); 
    var 
      s: String; 
    begin 
      if (ACol = 2) and (ARow = 3) then 
      with Sender as TStringGrid do 
      begin 
        s := Cells[ACol, ARow]; 
        Canvas.Brush.Color := clRed; 
        Canvas.FillRect(Rect); 
        Canvas.Textout(rect.left+3,Rect.top+3,s) ; 
      end; 
    end;
    Les lignes du Dbgrids se re-dessinent toutes seules?
    Y'a l'air que oui, c'est ce que j'ai constaté dans les autres posts du forum!
    Il doit bien y avoir un moment donné ou on affecte quelque chose a quelqun quand meme??
    A part trois heures de recherche non fructueuse et l'envi de balancer l'ordi par la fenetre.... je n'ai pas avancé d'un poil... donc si qulqun a une idée MERCHI

  7. #7
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 704
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 704
    Par défaut
    Citation Envoyé par melles
    Supposons que j'ai un DbGrid avec un champs 'Prenom' et que je souhaite colorier toutes les lignes dont la valeur du champs 'Prenom' valent 'Julien'
    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
    procedure TForm1.DBGridDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
    var
       OldColor: TColor;
    begin
       OldColor := (Sender as TDBGrid).Canvas.Brush.Color;
     
       //.Surligne la ligne sélectionnée.
       if(gdSelected in State) then
       begin
          (Sender as TDBGrid).Canvas.Font.Color := clBlack;
          (Sender as TDBGrid).Canvas.Brush.Color := clSkyBlue;
       end
       else if not (gdFixed in State) then
          (Sender as TDBGrid).Canvas.Brush.Color := OldColor;
     
       //.Si PRENOM = Julien
       if((Sender as TDBGrid).DataSource.DataSet.FieldByName('PRENOM').AsString = 'Julien') and not(gdSelected in State) then
       begin
          (Sender as TDBGrid).Canvas.Brush.Color := clYellow;
          (Sender as TDBGrid).Canvas.Font.Color := clBlack;
       end;
     
       //.Affichage.
       Column.Grid.DefaultDrawColumnCell(Rect, DataCol, Column, State);
    end;
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    187
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 187
    Par défaut
    Merci Lung pour ta reponse... je commence à y voir un peu plus clair sauf que ça ne fonctionne pas

    1. Cette procedure se lance automatiquement ou alors il faut l'appeler sur une table donnée??
    2. Comment se fait il que lorsque je clique sur F1 sur DBGridDrawColumnCell l'aide ne me donne rien du tout??
      DBGridDrawColumnCell est considerée comme une procedure?? si c'est le cas, il faut l'appeler, non?
    3. Autre question : a quoi sert le
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      and not(gdSelected in State)

    Thanx in advance

  9. #9
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 491
    Par défaut
    salut

    c'est un evenement de la dbgrid OnDrawColumnCell

    @+ Phil

  10. #10
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Autre question : a quoi sert le and not(gdSelected in State)
    Comme on redessine complétement à la place de la procedure de draw standard, il faut savoir si la ligne est sélectionnée ou non, afin de tracer de façon spéciale la ligne selectionnée (exemple blanc sur fond bleu).

  11. #11
    Membre Expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Par défaut
    Salut melles,

    Au lieu de t'énerver sur certaines choses que tu ne comprends pas et de t'en prendre à la terre entière parce que personne ne se met à ton niveau :
    1) Fait une recherche dans les fichiers d'aide de ton Delphi, on ne va tout de même pas tout te recopier sur le forum.
    2) Ton premier problême est de répondre à la question :
    - c'est quoi un évènement ? (aide de Delphi, recherche sur le forum, merci)
    3) et : - OnDrawCell, ça sert à quoi (aide de Delphi aussi).
    4) Qu'est ce qu'un Canvas, à quoi ça me sert, est ce qu'un DBGrid (par exemple), possède un Canvas ? (Delphi, recherche sur le forum, FAQ)

    Déjà, avec ces lectures patientes, tu auras répondu à pas mal de tes questions : ça sert à rien de se jeter à l'eau sans avoir appris à nager .

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

Discussions similaires

  1. [VBA-A] changer les couleurs dans les listboxes
    Par Jik70 dans le forum VBA Access
    Réponses: 9
    Dernier message: 10/07/2006, 10h26
  2. Réponses: 2
    Dernier message: 03/05/2006, 15h01
  3. [un peu HS , si...si] les gouts et les couleurs
    Par elekis dans le forum OpenGL
    Réponses: 3
    Dernier message: 17/02/2005, 15h05
  4. Question sur les handles et les couleurs...
    Par MrDuChnok dans le forum C++Builder
    Réponses: 7
    Dernier message: 29/10/2002, 08h45

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