Ajouter un icon dans un listbox [Résolu]

Signaler
Messages postés
135
Date d'inscription
jeudi 22 mars 2007
Statut
Membre
Dernière intervention
25 juillet 2008
-
Messages postés
637
Date d'inscription
dimanche 13 août 2006
Statut
Membre
Dernière intervention
13 décembre 2018
-
Bonjour,

je suis entrain de faire un logiciel avec un log ou je peu voir tout les avertissements et erreurs dans un listbox (cest facile a gerer car on a juste a faire listbox1.additem pour ajouter un item (dans scas si un message avec timestamp))

jaimerais ajouter un icone sur chaque ligne ex: icone derreur (16x16) pour un message derreur etc...

jai vu des tonnes et des tonnes de code soit avec un listview (pas bon car tout les examples que jai vu extrait leur icone du systeme ex: lister des fichiers etc cest pas bon dans scas ci ! ) ou avec une combobox ( cest bon pour listbox aussi ) MAIS....

procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
ComboBox1.Canvas.Fillrect(Rect);
ImageList1.Draw(ComboBox1.Canvas,Rect.Left,Rect.Top,Index);
ComboBox1.Canvas.Textout(rect.left+Imagelist1.width+2,rect.Top,ComboBox1.Items[index]);
end;

sa marche bien sauf que le probleme cest que je ne peu decider de licone que je met ... il assigne les icons seulon lindex de litem combobox example ... item 1 = imagelist icon avec index 1

moi je dispose dune imagelist avec 3 icones ...

donc jaimerais assigner a un item dans la listbox a un index dune icone dans imagelist que je choisie

(pour ensuite me faire une fonction du genre addmessage('bob',0) qui ferais automatiquement un nouveau item + avec licone 0 (exclamation) )

Merci beaucoup de l'aide !

Laurent belanger

11 réponses

Messages postés
1715
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
2 décembre 2019
3
Salut,

Le truc simplet, mais ça marche :

procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
var
  IcoIndex: Integer;
  ItemText: string;
begin
  with ListBox1 do
  begin
    IcoIndex := StrToIntDef(Items[Index][1], 0);
    ItemText := Items[Index];
    Delete(ItemText, 1, 1);
    Canvas.Fillrect(Rect);
    ImageList1.Draw(Canvas, Rect.Left, Rect.Top, IcoIndex);
    Canvas.Textout(Rect.Left + ImageList1.Width + 2, Rect.Top, ItemText);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var TextItem: string;
begin
  TextItem := edTextItem.Text; // <- texte de l'item
  ListBox1.Items.Add(Format('%d%s', [seIndex.Value, TextItem])); // valeur d'index de l'icone dans la liste
end;

N' oublie pas de mettre la propriété Style de la ListBox à  lbOwnerDrawVariable.

Pour tester ce code :
- une ListBox,
- un Edit,
- un SpinEdit,
- un Button,
- et évidemment une ImageList avec ses icones 16x16...

Bonne prog'
Messages postés
135
Date d'inscription
jeudi 22 mars 2007
Statut
Membre
Dernière intervention
25 juillet 2008

listbox1.itemheight ! LOL jme repond moi meme :P

a quand un edit button ici ?

merci beaucoup !
Messages postés
637
Date d'inscription
dimanche 13 août 2006
Statut
Membre
Dernière intervention
13 décembre 2018
2
Bj Elcouz
   Moi j'utiliserai les possibilités d'une stringliste!
Bonne prog!

Jean_Jean
Messages postés
135
Date d'inscription
jeudi 22 mars 2007
Statut
Membre
Dernière intervention
25 juillet 2008

merci davoir pris le temps de repondre,

>> Moi j'utiliserai les possibilités d'une stringliste!

tu peux me donner un example , je suis debutant

merci !
Messages postés
135
Date d'inscription
jeudi 22 mars 2007
Statut
Membre
Dernière intervention
25 juillet 2008

pour vous guider cest exactement ce que je veux faire ...

quand je vous parlais dicone et log ... cest exactement se que je veut faire ... une listbox comme sa! (photo ImgBurn)

merci beaucoup !
Messages postés
135
Date d'inscription
jeudi 22 mars 2007
Statut
Membre
Dernière intervention
25 juillet 2008

dsl pour les messages repetitif (ou les le EDIT button lol ) ,,, je tien a preciser que je sais comment manipuler le texte ,, jveut dire cest pas un problem ,,, le seul cest les icones que je ne sais pas comment les ajouter dans la listbox !

merci !
Messages postés
135
Date d'inscription
jeudi 22 mars 2007
Statut
Membre
Dernière intervention
25 juillet 2008

Merci japee !!!

un seul probleme regarde:

dapres toi cest un probleme de dimension dicones (16x16 pourtant) ou de code ?

merci

je vais assayer de les reduire genre 14x14 meme si cest pas standard normalement cest 16x16,32x32,48x48 etc
Messages postés
135
Date d'inscription
jeudi 22 mars 2007
Statut
Membre
Dernière intervention
25 juillet 2008

jai tenter dagrandir la police ... cest pire !!

jai verifier la dimension de licone dans imgburn log ,,, cest effectivement 16x16

et les miens aussi jai mesurer ...

alors je ne comprend plus

merci beaucoup de votre aide !!

Laurent
Messages postés
135
Date d'inscription
jeudi 22 mars 2007
Statut
Membre
Dernière intervention
25 juillet 2008

cest encore moi.... pour resoudre le probleme i faudrais trouver un moyen davoir le fameux rectangle , 4 pixel de plus en hauteur car il est plus petit que 16  (il fait 12 pixel de haut)!
Messages postés
637
Date d'inscription
dimanche 13 août 2006
Statut
Membre
Dernière intervention
13 décembre 2018
2
Bon exemple Japee!
j'arrive après la course, mais je n'aurai pas fait aussi bien!
Par contre, qu'est-ce qu'un spinEdit? je n'ai pas ce composant en D7? Est-ce un edit?
Jean_Jean
Messages postés
637
Date d'inscription
dimanche 13 août 2006
Statut
Membre
Dernière intervention
13 décembre 2018
2
Autant pour moi!
SpinEdit, Oui bien sûr!
Bon, je couche tôt ce soir!
Jean_Jean