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

Langage Delphi Discussion :

TlistView et AdvancedCustomDrawItem


Sujet :

Langage Delphi

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juillet 2008
    Messages : 71
    Points : 32
    Points
    32
    Par défaut TlistView et AdvancedCustomDrawItem
    Bonjour tout le monde,

    je rencontre actuellement un problème lié au composant TlistView sous Delphi XE.
    Le composant est en mode vsreport. Je souhaite afficher à gauche de chaque item un petit rectangle d'une couleur différente suivant l'item.

    J'utilise donc l’évènement OnAdvancedCustomDrawItem de la manière suivante:

    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
    38
     
    procedure TForm1.AdvListView1AdvancedCustomDrawItem(Sender: TCustomListView;
      Item: TListItem; State: TCustomDrawState; Stage: TCustomDrawStage;
      var DefaultDraw: Boolean);
    var
      rect     : TRect;
     
      OldBrushCol   : TColor;
      OldBrushStyle : TBrushStyle;
      OldPenCol     : TColor;
      OldPenStyle   : TPenStyle;
      OldPenMode    : TPenMode;
    begin
      if (Stage = cdPostPaint) then
      begin
        {sauvegarde de brush et pen}
        OldBrushCol := Sender.Canvas.Brush.Color;
        OldBrushStyle := Sender.Canvas.Brush.Style;
        OldPenCol   := Sender.Canvas.Pen.Color;
        OldPenStyle := Sender.Canvas.Pen.Style;
        OldPenMode  := Sender.Canvas.Pen.Mode;
     
     
        Sender.Canvas.Brush.Color := {get item color}
        Sender.Canvas.Pen.Style := psClear;
        {récupération du rectangle cible}
        rect:=Item.DisplayRect(drIcon);
        {dessin du rectangle}
        Sender.Canvas.RoundRect(rect.Left,rect.top,rect.right,rect.bottom,10,10);
     
        {récupération des anciennes valeurs de brush et pen}
        Sender.Canvas.Brush.Color:=OldBrushCol;
        Sender.Canvas.Brush.Style:=OldBrushStyle;
        Sender.Canvas.Pen.Color:=OldPenCol;
        Sender.Canvas.Pen.Style:=OldPenStyle;
        Sender.Canvas.Pen.Mode:=OldPenMode;
     end;
    end;
    A première vue cela semble marcher mais lorsque qu'à l'exécution je joue avec le focus, je veux dire par la que je passe ma souris plus ou moins rapidement au dessus des items, un fond noir apparaît derrière chacun des libellés des subitems de l'item pointé.
    Ce qui est encore plus étonnant c'est que ce fond noir apparaît lorsque que je descends dans la liste mais pas lorsque je remonte.

    Quelqu'un a-t-il déjà rencontré ce problème?

    [EDIT] Je joins 2 screenshots pour imager tout ça.
    Images attachées Images attachées   

  2. #2
    Nouveau membre du Club
    Inscrit en
    Juillet 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juillet 2008
    Messages : 71
    Points : 32
    Points
    32
    Par défaut
    Ce post ne semble pas passionner les foules...

    Personne n'a déjà eu ce genre de problème avec le OnAdvancedCustomDrawItem?

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 710
    Points : 25 596
    Points
    25 596
    Par défaut
    Au pire, si tu n'as pas trop de couleur, utilise une TImageList contenant les pastilles de chaque couleur prévu !
    D'ailleurs, tu n'aurais pas affecter une TImageList vide juste pour afficher les Icones (sinon l'option m'interesse !)

    Sinon, as-tu un autre évènement OnCustomDraw pour le Texte en Rouge ?
    Parce qu'en C++ Builder 2007 (XP SP3), j'ai repris ton code (Random pour la Couleur), c'est nickel !

    L'aspect de mon RowSelect est différent du tiens, moi c'est un rectangle Bleu + Pointillé, tu l'as refait ou c'est Seven ?

  4. #4
    Nouveau membre du Club
    Inscrit en
    Juillet 2008
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juillet 2008
    Messages : 71
    Points : 32
    Points
    32
    Par défaut
    Les couleurs correspondent à des groupes dont je ne connais pas le nombre. Elles sont donc générés aléatoirement. Il faudrait dont que je génère dynamique un TImagelist ... ça peut être une solution.

    Non je n'ai pas d'autre OnCustomDraw. C'est la propriété font du Listview qui est définit rouge.

    Pour l'aspect de sélection, c'est bien seven.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 80
    Points : 53
    Points
    53
    Par défaut
    Bonjour,

    J'ai actuellement le même problème que toi sous c++ builder.

    J'essaye de jouer avec les états mais rien n'y fait...

    As-tu trouvé une solution ?

Discussions similaires

  1. [VCL][TListView]Montrer une ligne à l'écran
    Par ptitbob dans le forum Delphi
    Réponses: 4
    Dernier message: 23/07/2007, 17h35
  2. [TListView] OnClick ? Tri ?
    Par remixtech dans le forum Composants VCL
    Réponses: 2
    Dernier message: 07/04/2003, 22h33
  3. Comment effacer des Items d'un TListView ?
    Par boyerf dans le forum Composants VCL
    Réponses: 4
    Dernier message: 11/11/2002, 11h19
  4. [Kylix] TListView et Kylix 3 OE
    Par jpminiscloux dans le forum EDI
    Réponses: 3
    Dernier message: 04/11/2002, 22h59
  5. [TListView] Compter le nombre de lignes
    Par agh dans le forum Composants VCL
    Réponses: 2
    Dernier message: 30/09/2002, 21h25

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