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 :

ListView CheckBoxes et CustomDraw


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Février 2005
    Messages
    317
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 317
    Par défaut ListView OnCustumDrawItem ne fonctionne pas
    Bonjour à tous, j'essaie de faire une listview perso, j'ai donc mis le ownerdraw à true, et testé la fonction OnCustomdraw avec ce petit 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 TfrmMain.lvPenetCustomDrawItem(Sender: TCustomListView;
      Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
    begin
    begin
      with lvPenet.Canvas.Brush do
      begin
        case Item.Index of
          0: Color := clYellow;
          1: Color := clGreen;
          else Color := clRed;
        end;
      end;
    end;
    end;
    Mais ça ne colore rien du tout :'(
    Quelqu'un aurait-il une idée ?

  2. #2
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2002
    Messages : 35
    Par défaut ah ?
    Ben chez moi, ça marche !
    J'ai juste changé ton code en remplacant le nom du composant par le Sender passé en argument comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView;
      Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
    begin
    with Sender.Canvas.Brush do
      begin
        case Item.Index of
          0: Color := clYellow;
          1: Color := clGreen;
          else Color := clRed;
        end;
      end;
    end;
    Je précise que ce test a été fait en Delphi 7.0

    Michel

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Février 2005
    Messages
    317
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 317
    Par défaut
    Hé bien chez moi ça ne marche pas, mais j'ai trouvé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TfrmMain.lvPenetAdvancedCustomDrawItem(Sender: TCustomListView;
      Item: TListItem; State: TCustomDrawState; Stage: TCustomDrawStage;
      var DefaultDraw: Boolean);
    var r: TRect;
    begin
    r:=item.DisplayRect(drbounds);
    sender.canvas.Brush.color := clblue;
    sender.canvas.FillRect(r);
    sender.canvas.font.Color:=clWhite;
     
    sender.Canvas.textout(r.Left, r.top,item.caption);
    end;
    Ce code semble fonctionner

  4. #4
    Membre éclairé

    Profil pro
    Inscrit en
    Février 2005
    Messages
    317
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 317
    Par défaut ListView CheckBoxes et CustomDraw
    Bonjour, je peint moi même les lignes de mon listview, mais les checkboxes devienent invisible, car elles sont 'peinte'. Existe t'il un moyen de garder les checkboxes d'une ListView visible en peignant la ligne ? merci

  5. #5
    Membre éclairé

    Profil pro
    Inscrit en
    Février 2005
    Messages
    317
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 317
    Par défaut
    Bon, j'ai un peu fait ça a l'arrache, je balance mon code pour ceux que ça intéresse, mais si quelqu'un à quelque chose de plus propre qu'il hésite pas:

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    procedure TfrmMain.lvpenetAdvancedCustomDrawItem(Sender: TCustomListView;
      Item: TListItem; State: TCustomDrawState; Stage: TCustomDrawStage;
      var DefaultDraw: Boolean);
    var r: TRect;
    i,t:integer;
    begin
    r:=item.DisplayRect(drbounds);
    r.Right:=sender.BoundsRect.Right;   //toute la ligne
    r.left:=r.left+20-1;
    if (item.Selected) then
    begin
    sender.canvas.Brush.color := clNavy;
    sender.canvas.font.Color:=clWhite;
    end
    else if (item.checked) then //sélectionné
    begin
    sender.canvas.Brush.color := $00CACAFF;
    sender.canvas.font.Color:= clNavy;
    end
    else
    begin
    sender.canvas.Brush.color := $00DFFFDF;
    sender.canvas.font.Color:= clNavy;
    end;
    sender.canvas.font.Style:=[fsbold];
    sender.canvas.FillRect(r);
    sender.Canvas.textout(r.Left+2, r.top,item.caption);
     
    r:=item.DisplayRect(drbounds);
    r.Right:=r.left+5 + 1; //check box marge = 5 ... + 1 car sinon bord blancs :s
    sender.canvas.FillRect(r);  //gauche
    r.left:=r.Right;
    r.right:=r.left+15 - 1;  //Size box = 15 -1 pour pas dépasser
    i:=r.Bottom-r.Top; //i=fourre tout;
    r.Bottom:=r.Top + ((i-15) div 2) + 1;  //+ 1 car sinon bord blancs :s
    sender.canvas.FillRect(r); //dessus
    r.Top:=r.top+15;
    r.Bottom:=r.Top + ((i-15) div 2);    //dessous   -2 pour pas dépasser
    sender.canvas.FillRect(r);
     
    //On custom draw subitem fonctionne pas, on dessine les subitems tout de suite !
    r:=item.DisplayRect(drbounds);
    sender.canvas.font.Style:=[];
    t:=2;   //2 pour la marge
    for i := 0 to item.SubItems.Count - 1 do
    begin
      t:=t+sender.column[i].width;
      sender.Canvas.textout(r.Left + t, r.top,item.subitems[i]);
    end;
     
     
    end;
     
    procedure TfrmMain.lvpenetChange(Sender: TObject; Item: TListItem;
      Change: TItemChange);
    begin
    lvpenet.Repaint; //se déclenche lors du click sur un checkbox(entre autres...)
    end;

Discussions similaires

  1. alertDialog ListView checkbox desactivation
    Par jojo_ol76 dans le forum Composants graphiques
    Réponses: 1
    Dernier message: 05/12/2011, 00h08
  2. alertDialog ListView checkbox desactivation
    Par jojo_ol76 dans le forum Composants graphiques
    Réponses: 0
    Dernier message: 10/11/2011, 16h09
  3. ListView & Checkbox ?
    Par Targan dans le forum Windows Forms
    Réponses: 1
    Dernier message: 29/07/2010, 21h05
  4. Listview checkbox coché
    Par totoche dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 28/11/2007, 17h03
  5. Comment savoir si dans Listview Checkbox est coché
    Par Ardely dans le forum Delphi
    Réponses: 8
    Dernier message: 16/01/2007, 10h51

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