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 FMX Delphi Discussion :

Couleur de fond d'une cellule de StringGrid


Sujet :

Composants FMX Delphi

  1. #21
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 130
    Points : 95
    Points
    95
    Par défaut
    Bonjour Franckcl,

    Merci pour ta réponse, il me semble d'ailleurs que j'avais fait ça et que cela ne fonctionnais pas, mais peut être avec les fêtes j'ai du mal faire quelque chose... je teste et te dit quoi

    bonne journée

  2. #22
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 130
    Points : 95
    Points
    95
    Par défaut
    Je viens de faire le test, cela fonctionne bien quand je fais comme dans ton exemple.... Mais quand j'essaye de le faire dans mon programme plus rien ne marche

    voici mon 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
    16
    17
     
    procedure TForm1.sgGrilleDrawColumnCell(Sender: TObject;
      const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF;
      const Row: Integer; const Value: TValue; const State: TGridDrawStates);
     
    begin
      with Canvas do
      Begin
        //if (Row=1) then -> fonctionne 
        if (Row=Arow) then
          fill.Color := TAlphacolors.Crimson
        else
          fill.Color := TAlphaColors.Black;
     
        FillText(Bounds,sTexte,true,1,[TFillTextFlag.RightToLeft],TTextAlign.Trailing);
      End;
    end;
    et le code qui rempli la grille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    ...
     for Ligne := 0 to Liste.Count-1 do
        begin
     
          Arow:=Ligne;
          if Liste.GetValue('confusionable').value='non' then
           ARow:=Ligne
          else
           ARow:=-1;
     
          sTexte:=Liste.GetValue('type').Value +' du ' + Liste.GetValue('le').Value +#13;
          sTexte:=sTexte+Liste.GetValue('pour').Value;
    ...
    ARow et sTexte sont des variables globales...

    y a un truc que je capte pas

  3. #23
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 416
    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 416
    Points : 5 814
    Points
    5 814
    Par défaut
    salut

    mouais je comprend mieux pourquoi ça marche pas

    en somme a chaque ligne que tu affiche tu fait la recherche sur toutes les lignes

    l'avantage de l'objet et des événements c'est que tu connais le déclencheur
    ton stexte n'a aucunement besoin d’être global tu devrais être en moyen de retrouver pour chaque case la valeur correspondante
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  4. #24
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 130
    Points : 95
    Points
    95
    Par défaut
    C'est bien ça que je ne comprend pas.

    je vais essayer avec sTexte en "normal" et voir si je ne peut pas voir si j'écris dans une cellule la valeur de Liste.GetValue('confusionable').value et que je regarde la valeur "oui" ou la valeur "non"

    merci pour ton aide,
    je vous tiens au jus
    bonne nuit

  5. #25
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 130
    Points : 95
    Points
    95
    Par défaut
    bonsoir à tous,

    J'avance, mais j'y suis pas encore

    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
    procedure TForm1.GrilleDrawColumnCell(Sender: TObject;
      const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF;
      const Row: Integer; const Value: TValue; const State: TGridDrawStates);
     var
      RowColor : TBrush;
     
    begin
     
      RowColor := Tbrush.Create(TBrushKind.Solid,TAlphaColors.Alpha);
     
    {Je teste la valeur pour selectionner la couleur }
      if Value.ToString = 'non' then
         RowColor.Color := TAlphaColors.Red
      else
         RowColor.Color := TAlphaColors.green;
     
      Canvas.FillRect(Bounds, 0, 0, [], 1, RowColor);
      { idée de thierry car le texte est déjà écrit        }
      TGrid(Sender).DefaultDrawColumnCell(Canvas, Column, Bounds, Row, Value, State);
     
     
    end;
    cela fonctionne presque comme je le souhaite...
    Maintenant je sais colorier une cellule en fonction d'un critère (grâce à vous ), mais je voudrais non pas colorier juste la cellule contenant le texte, mais sa ligne complète.
    Ensuite, en plus du fond et sur le même critère la couleur de tous les textes se trouvant sur cette ligne.

    je continue à chercher, si vous avez une idée, ce serait génial...
    Merci pour votre aide, je vous tiens au courant

    Bonne soirée
    krzysiu

  6. #26
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 416
    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 416
    Points : 5 814
    Points
    5 814
    Par défaut
    salut,

    un idée voir plus

    pour te mettre sure la voie
    ton critère doit être invariable selon la ligne ce qui implique que tu ne peut pas utiliser Value

    par contre le sender a de forte probabilité d’être une grille
    si sur cette grille il y aurais par le plus grand des hasard une propriété permettant d’accéder à une cellule par une colonne et une ligne
    celle ci te permettrai de tester cette valeur a chaque fois
    ne connaissant pas la grille que tu utilise voici un exemple delphi avec un TStringGrid

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      maValeur := (sender as TstringGrid).Cells[ACol, ARow];
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  7. #27
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 130
    Points : 95
    Points
    95
    Par défaut
    Merci pour cette Piste, j'utilise TStringGrid.
    je regarde ça demain...

  8. #28
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 130
    Points : 95
    Points
    95
    Par défaut
    Salut à tous,

    Je parcours le web à la recherche d'une idée, C'est à croire que personne n'as eu besoin de m'as eu besoin de mettre une ligne en évidence dans une grille

    Si j'ai bien compris commet ça marche, DrawColumnCells est appelé à chaque fois que l'on modifie une valeur dans une cellule. donc,je me dit si au lieu de tester toutes les cellules, je me concentre juste sue la colonne ou j'ai nom info. je connais donc la ligne et il ne me resta plus qu'a parcourir toutes colonnes et colorier la cellule de cette ligne dans toutes colonnes

    ce qui pourrai donner ça
    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
    31
    32
    33
    procedure TForm1.GrilleDrawColumnCell(Sender: TObject;
      const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF;
      const Row: Integer; const Value: TValue; const State: TGridDrawStates);
     var
      RowColor : TBrush;
      i: Integer;
      Col:Tcolumn;
      B:TrectF;
    
    begin
    
      RowColor := Tbrush.Create(TBrushKind.Solid,TAlphaColors.Alpha);
    
    {Je teste la valeur pour selectionner la couleur }
      if (Column=StringColumn8)  then
      begin
        if Value.ToString = 'non' then
           RowColor.Color := TAlphaColors.Red
        else
           RowColor.Color := TAlphaColors.green;
    
        for i := 0 to TGrid(Sender).ColumnCount-1 do
        begin
          Canvas.FillRect(Bounds, 0, 0, [], 1, RowColor);
        
           Col:= TGrid(Sender).ColumnByIndex(i)  ;
    
          { idée de thierry car le texte est déjà écrit}
        //TGrid(Sender).DefaultDrawColumnCell(Canvas, Column, Bounds, Row, Value, State);
          TGrid(Sender).DefaultDrawColumnCell(Canvas, Col, Bounds, Row, Value, State);
        end;
      end;
    end;
    Mais ça marche pas ... Au secours y a vraiment un truc que je ne capte pas Grrrr

  9. #29
    Membre émérite
    Avatar de Thierry Laborde
    Homme Profil pro
    N/A
    Inscrit en
    Avril 2002
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : N/A

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 391
    Points : 2 529
    Points
    2 529
    Par défaut
    Bonjour,

    Citation Envoyé par krzysiu Voir le message
    Si j'ai bien compris commet ça marche, DrawColumnCells est appelé à chaque fois que l'on modifie une valeur dans une cellule.
    Non en fait l’événement est appelé à chaque fois que la cellule est dessiné. Donc a chaque fois qu'elle est visible, que sa valeur change...etc.
    Donc pour colorier la ligne cela peut se faire simplement par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    var
      RowColor : TBrush;
    begin
      RowColor := Tbrush.Create(TBrushKind.Solid,TAlphaColors.Alpha);
     
      if TStringGrid(Sender).Cells[8,row] = 'non' then
        RowColor.Color := TAlphaColors.Red
      else
        RowColor.Color := TAlphaColors.green;
      Canvas.FillRect(Bounds, 0, 0, [], 1, RowColor);
      Column.DefaultDrawCell(Canvas, Bounds, Row, Value, State);
    end;

  10. #30
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 130
    Points : 95
    Points
    95
    Par défaut
    Merci pour cette précision Thiérry,

    mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Column.DefaultDrawCell(Canvas, Bounds, Row, Value, State);
    ça marche pas,
    TColumn, ne contient pas un membre DefaultDrawCell qu'il me dit, j'ai oublié quoi ???

  11. #31
    Membre émérite
    Avatar de Thierry Laborde
    Homme Profil pro
    N/A
    Inscrit en
    Avril 2002
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : N/A

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 391
    Points : 2 529
    Points
    2 529
    Par défaut
    Citation Envoyé par krzysiu Voir le message
    Merci pour cette précision Thiérry,

    mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Column.DefaultDrawCell(Canvas, Bounds, Row, Value, State);
    ça marche pas,
    TColumn, ne contient pas un membre DefaultDrawCell qu'il me dit, j'ai oublié quoi ???
    Chez moi sur Delphi Berlin Update2 ca fonctionne correctement. C'est quelle version de Delphi ?

  12. #32
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 130
    Points : 95
    Points
    95
    Par défaut
    c'est la version XE8

  13. #33
    Membre émérite
    Avatar de Thierry Laborde
    Homme Profil pro
    N/A
    Inscrit en
    Avril 2002
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : N/A

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 391
    Points : 2 529
    Points
    2 529
    Par défaut
    Je n'ai pas de XE8 donc je ne peux pas tester. Il faut trouver par quoi remplacer le DefaultDrawCell. Mais tu ne l'avais pas déjà fait dans tes codes ?

  14. #34
    Membre émérite
    Avatar de Thierry Laborde
    Homme Profil pro
    N/A
    Inscrit en
    Avril 2002
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : N/A

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 391
    Points : 2 529
    Points
    2 529
    Par défaut
    c'est pas TGrid(Sender).DefaultDrawColumnCell ?

  15. #35
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 130
    Points : 95
    Points
    95
    Par défaut
    Merci pour ton aide

    oui, c'est bien ça, mais cela ne fonctionne que sur une seule cellule

    Je continue à chercher

  16. #36
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 416
    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 416
    Points : 5 814
    Points
    5 814
    Par défaut
    salut


    montre nous ton code que tu as ecrit dans GrilleDrawColumnCell

    pour que l'on puissent voir ou tu as fait ton erreur
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  17. #37
    Membre régulier
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 130
    Points : 95
    Points
    95
    Par défaut
    aussitôt dit aussitôt fait
    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
    31
    32
    33
    34
    35
    36
    37
     
    procedure TForm1.GrilleDrawColumnCell(Sender: TObject;
      const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF;
      const Row: Integer; const Value: TValue; const State: TGridDrawStates);
     var
      RowColor : TBrush;
      i: Integer;
      Col:Tcolumn;
      B:TrectF;
      aRowColor: TBrush;
     
    begin
      RowColor := Tbrush.Create(TBrushKind.Solid,TAlphaColors.Alpha);
    {Je teste la valeur pour selectionner la couleur
      if (Column=StringColumn8)  then
      begin
        if Value.ToString = 'non' then
           RowColor.Color := TAlphaColors.Red
        else
           RowColor.Color := TAlphaColors.green;
     
        for i := 0 to TGrid(Sender).ColumnCount-1 do
        begin
          Canvas.FillRect(Bounds, 0, 0, [], 1, RowColor); }
        { idée de thierry car le texte est déjà ecrit
           Col:= TGrid(Sender).ColumnByIndex(i)  ;
        //TGrid(Sender).DefaultDrawColumnCell(Canvas, Column, Bounds, Row, Value, State);
          TGrid(Sender).DefaultDrawColumnCell(Canvas, Col, Bounds, Row, Value, State);
        end;
      end;     }
      if TStringGrid(Sender).Cells[8,row] = 'non' then
        RowColor.Color := TAlphaColors.Red
      else
        RowColor.Color := TAlphaColors.green;
      Canvas.FillRect(Bounds, 0, 0, [], 1, RowColor);
      Column.DrawCell(Canvas, Bounds, Row, Value, State);
    end;
    J'ai regarder dans l'unit FMX.Grid;, le truc existe bien mais il est en

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     protected
       ...
        procedure DefaultDrawCell(const Canvas: TCanvas; const Bounds: TRectF; const Row: Integer;
          const Value: TValue; const State: TGridDrawStates); virtual;
     
        ...

Discussions similaires

  1. Réponses: 4
    Dernier message: 26/08/2010, 08h20
  2. Modifier couleur de fond d'une cellule d'un tableau dynamiquement.
    Par fred61 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 27/03/2009, 02h19
  3. Couleur de fond d'une cellule variable
    Par Cafu3 dans le forum Débuter
    Réponses: 2
    Dernier message: 19/03/2009, 10h56
  4. [VB.NET][DataGridView]:couleur de fond d'une cellule
    Par BigTicket42 dans le forum Windows Forms
    Réponses: 8
    Dernier message: 13/05/2008, 22h07
  5. mise à jour de la couleur de fond d'une cellule
    Par Lady_jade dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 02/11/2005, 11h18

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