Bonjour,

Je voudrais savoir pourquoi lorsque je mets une condition, l'affichage de mon listbox ne se reinitialise pas ? L'erreur doit etre enorme, mais je ne la vois pas. J'ai meme essayé avec un listbox1.repaint, ca me fait n'importe quoi !!!

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
procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
var marge:integer;
begin
    //on dessine le fond des lignes en alternant les couleurs
    if index mod 2<>1 then
      begin
          ListBox1.canvas.brush.color:=clwhite;
          ListBox1.canvas.fillrect(rect);
      end
    else
      begin
          ListBox1.canvas.brush.color:=$00F4F3EE;
          ListBox1.canvas.fillrect(rect);
      end;
    //on affiche le texte
    ListBox1.canvas.textout(rect.left+30,rect.top+2,ListBox1.items[index]);
    //affichage lorsque la ligne est sélectionnée
    if (odSelected in state) then
      begin
//          ListBox1.canvas.brush.color:=$00F8D1C5;
          ListBox1.canvas.fillrect(rect);
          ListBox1.canvas.font.color:=clblue;
          ListBox1.canvas.font.style:=ListBox1.canvas.font.style +[fsbold]+[fsitalic];
          ListBox1.canvas.textout(rect.left+30,rect.top+2,ListBox1.items[index]);
      end;
    {Dessin des icônes}
Puis, si je mets comme ceci, le listbox s'affiche correctement !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
          marge:=(Rect.Bottom-Rect.Top-DM.imageList1.Height) div 2;
          DM.imageList1.Draw(ListBox1.canvas, Rect.Left+4, Rect.Top+marge, 13);
      end;

Le problème vient d'ici. Lorsque je remplace mes deux dernieres lignes de code par une condition, le premier affichage est parfait, mais lorsqu'une fenetre s'affiche par dessus mon listbox et que je la referme, les icones sont soient effacées ou tronquées !!!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
    {Dessin des icônes}
    if Tableau_Icone[DessinIcone]<>'' then
      begin // Dessin de l'icône avec "cadenas"
          marge:=(Rect.Bottom-Rect.Top-DM.imageList1.Height) div 2;
          DM.imageList1.Draw(ListBox1.canvas, Rect.Left+4, Rect.Top+marge, 13);
      end
    else
      begin // Dessin de l'icône "vide"
          marge:=(Rect.Bottom-Rect.Top-DM.imageList1.Height) div 2;
          DM.imageList1.Draw(ListBox1.canvas, Rect.Left+4, Rect.Top+marge, 0);
      end;
    inc(DessinIcone);
end;