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 :

Couleur dun TListView.Item.SubItem [FAQ]


Sujet :

Composants VCL Delphi

  1. #1
    Membre averti Avatar de Soulama
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 619
    Points : 416
    Points
    416
    Par défaut Couleur dun TListView.Item.SubItem
    Salut,
    je veux bien savoir si c possible de coloré un SubItem, par exemple:
    jai une TListview avec 8 Cologne, et je veux coloré le SubItem[3] de la ligne 2 en Rouge.
    jai vu levenement onCustomDrawSubItem, mais je colore toute la ligne, et c pas mon but.
    si quelqun connait le probleme?
    Merci

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Le mieux ce serait d'avir le code que tu utilises.

    A priori tu utilises Canvas.brush:=clred pour toute la ligne au lieu de l'utiliser que pour le subitem.

  3. #3
    Membre averti Avatar de Soulama
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 619
    Points : 416
    Points
    416
    Par défaut
    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 TFrameInvoiceObj.ViewLocalCallsCustomDrawSubItem(
      Sender: TCustomListView; Item: TListItem; SubItem: Integer;
      State: TCustomDrawState; var DefaultDraw: Boolean);
    var
      Str: String;
    begin
      if Item.SubItems.Count<=SubItem Then exit ;
      if SubItem=3 Then
      Begin
        Str:= UpperCase(Item.SubItems.Strings[SubItem]);
        if AnsiContainsStr(Str, 'DEJA') Then
        Begin
           Sender.Canvas.Font.Color := clRed;
        End ;
      End ;
    end;

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Et comme ç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
     
    procedure TFrameInvoiceObj.ViewLocalCallsCustomDrawSubItem(
      Sender: TCustomListView; Item: TListItem; SubItem: Integer;
      State: TCustomDrawState; var DefaultDraw: Boolean);
    var
      Str: String;
    begin 
      if SubItem=3 Then
      Begin
        Str:= UpperCase(Item.SubItems.Strings[SubItem-1]);
        if AnsiContainsStr(Str, 'DEJA') Then
        Sender.Canvas.Font.Color := clRed
      End
      else Sender.Canvas.Font.Color := clBlack;
    et sinon, ce que je te propose pour une ligne spécifique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    procedure TForm1.lv1CustomDrawSubItem(Sender: TCustomListView;
      Item: TListItem; SubItem: Integer; State: TCustomDrawState;
      var DefaultDraw: Boolean);
    var
      Str: String;
    begin
      if ((SubItem=3) and (Item.Index=1)) //Item.index=LigneVoulue-1 donc 2-1, donc 1.
      then Sender.Canvas.Font.Color := clRed
      else Sender.Canvas.Font.Color := clBlack;
    end;

  5. #5
    Membre averti Avatar de Soulama
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 619
    Points : 416
    Points
    416
    Par défaut
    salut,
    mais c pas ce que je veux.
    le code colore toute les colognes sauf la premiere, mois je veux colorer juste SubItem[3]

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Ha ba non, chez moi ça marche ! (avec Delphi 7, promis, juré, craché par terre)

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Voici la preuve :


    Voici le 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
    18
     
    procedure TForm1.lv1CustomDrawSubItem(Sender: TCustomListView;
      Item: TListItem; SubItem: Integer; State: TCustomDrawState;
      var DefaultDraw: Boolean);
    begin
      if ((SubItem=3) and (Item.Index=1)) //Item.index=LigneVoulue-1 donc 2-1, donc 1.
      then Sender.Canvas.Font.Color := clRed
      else Sender.Canvas.Font.Color := clBlack;
    end;
     
    procedure TForm1.lv2CustomDrawSubItem(Sender: TCustomListView;
      Item: TListItem; SubItem: Integer; State: TCustomDrawState;
      var DefaultDraw: Boolean);
    begin
      if ((SubItem=3) and (Item.Index=1)) //Item.index=LigneVoulue-1 donc 2-1, donc 1.
      then Sender.Canvas.Brush.Color := clRed
      else Sender.Canvas.Brush.Color := clWhite;
    end;

  8. #8
    Membre averti Avatar de Soulama
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 619
    Points : 416
    Points
    416
    Par défaut
    bon je vais essayé une 2eme fois

  9. #9
    Membre averti Avatar de Soulama
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 619
    Points : 416
    Points
    416
    Par défaut
    ben chez moi c toute la ligne qui est rouge ???

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Alors, maintenant, ils faudrait que l'on sache :
    1) Quelle version de delphi tu utilises
    2) si tu as activé la prise en chrge des themes de Windows XP (XPManifest, ou un truc comme ça)

    Parce que :
    1) Je suis en Delphi7
    2) Je n'utilise pas un truc comme XPManifest.

    bref, on a peut-être pas le même environnement de développement et ça changerait tout

  11. #11
    Membre averti Avatar de Soulama
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 619
    Points : 416
    Points
    416
    Par défaut
    suis en Delphi7, WinXP Pro.
    le probleme c que jai essayé ton code avec un simple project, et ca marche impek.

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Alors là je sêche...

    Qu'est-ce qui dans ton code fait que ça ne marche pas...

  13. #13
    Membre averti Avatar de Soulama
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 619
    Points : 416
    Points
    416
    Par défaut
    voila le code dans une autre variante:
    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 TFrameInvoiceObj.ViewLocalCallsCustomDrawSubItem(
      Sender: TCustomListView; Item: TListItem; SubItem: Integer;
      State: TCustomDrawState; var DefaultDraw: Boolean);
    var
      Str: String;
    begin
     Sender.Canvas.Font.Color := clBlack;
     Str:= UpperCase(Item.SubItems.Strings[1]);
     if SubItem=1 Then
     Begin
       if AnsiContainsStr(Str, 'DEJA') then
        Sender.Canvas.Font.Color := clRed
       else
        Sender.Canvas.Font.Color := clBlack;
     end ;
    end;

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Non, à la place, il faut que tu écrives ça, sinon la fin de ligne reste efectivement en rouge :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    procedure TFrameInvoiceObj.ViewLocalCallsCustomDrawSubItem(
      Sender: TCustomListView; Item: TListItem; SubItem: Integer;
      State: TCustomDrawState; var DefaultDraw: Boolean);
    var
      Str: String;
    begin
     Str:= UpperCase(Item.SubItems.Strings[1]);
     if ((SubItem=1) and AnsiContainsStr(Str, 'DEJA')) 
     Then Sender.Canvas.Font.Color := clRed
     else Sender.Canvas.Font.Color := clBlack;
    end;
    Edit : j'avais pas vu le Sender.Canvas.Font.Color := clBlack; en début de procedure
    En tout cas ça fait plus propre comme ça...

  15. #15
    Membre averti Avatar de Soulama
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 619
    Points : 416
    Points
    416
    Par défaut

    Desolé, mais ca ne marche pas du tout.

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Chez moi ça colorie bien tous les éléments de la deuxième colonne qui contiennent la sous-chaîne 'DEJA' sans distinction de majuscules ou minuscules... Etonnant : : :

    A mon avis, tu as du coder un autre évènement de la ListView que OnustomDrawSubItem.

    Je me trompe ?

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 298
    Points : 318
    Points
    318
    Par défaut
    A priori, tu as toutes les infos nécessaires, mais voici un lien qui explique les différents customdraw pour un listview
    http://www.delphidabbler.com/articles.php?article=16

  18. #18
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Salut
    As-tu comparé les options de ta ListView qui marche (dans le projet simple) et celle qui ne marche pas... Il y a peut-être une option qui modifie l'affichage des colonnes...

  19. #19
    Membre averti Avatar de Soulama
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2004
    Messages
    619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 619
    Points : 416
    Points
    416
    Par défaut
    Salut,
    jai changé la listview avec une autre et ca marche bien.
    Merci les gas pour vos Réponses

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

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Super !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Comment changer la couleur d'un item d'une listBox?
    Par Mickey.jet dans le forum Delphi
    Réponses: 3
    Dernier message: 19/05/2006, 16h52
  2. Récupérer la couleur d'un item de ListBox
    Par defluc dans le forum Delphi
    Réponses: 3
    Dernier message: 15/05/2006, 17h55
  3. Changer dynamiquement la couleur d'un item d'une listview
    Par little_cypress dans le forum C++Builder
    Réponses: 2
    Dernier message: 29/11/2004, 14h46
  4. Changer la couleur d'un item sélectionné dans TTreeview?
    Par nmathon dans le forum Composants VCL
    Réponses: 1
    Dernier message: 21/10/2004, 15h40

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