Procedure ListBox1DrawItem avec condition
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:
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:
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:
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; |