Ajouter un icon dans un listbox [Résolu]

ELCouz 135 Messages postés jeudi 22 mars 2007Date d'inscription 25 juillet 2008 Dernière intervention - 29 sept. 2007 à 14:30 - Dernière réponse : cs_Jean_Jean 639 Messages postés dimanche 13 août 2006Date d'inscription 5 mai 2016 Dernière intervention
- 29 sept. 2007 à 21:06
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
Afficher la suite 

11 réponses

Répondre au sujet
japee 1792 Messages postés vendredi 27 décembre 2002Date d'inscription 12 novembre 2016 Dernière intervention - 29 sept. 2007 à 17:25
+3
Utile
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'
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de japee
ELCouz 135 Messages postés jeudi 22 mars 2007Date d'inscription 25 juillet 2008 Dernière intervention - 29 sept. 2007 à 18:19
+3
Utile
listbox1.itemheight ! LOL jme repond moi meme :P

a quand un edit button ici ?

merci beaucoup !
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ELCouz
cs_Jean_Jean 639 Messages postés dimanche 13 août 2006Date d'inscription 5 mai 2016 Dernière intervention - 29 sept. 2007 à 16:02
0
Utile
Bj Elcouz
   Moi j'utiliserai les possibilités d'une stringliste!
Bonne prog!

Jean_Jean
Commenter la réponse de cs_Jean_Jean
ELCouz 135 Messages postés jeudi 22 mars 2007Date d'inscription 25 juillet 2008 Dernière intervention - 29 sept. 2007 à 17:06
0
Utile
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 !
Commenter la réponse de ELCouz
ELCouz 135 Messages postés jeudi 22 mars 2007Date d'inscription 25 juillet 2008 Dernière intervention - 29 sept. 2007 à 17:20
0
Utile
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 !
Commenter la réponse de ELCouz
ELCouz 135 Messages postés jeudi 22 mars 2007Date d'inscription 25 juillet 2008 Dernière intervention - 29 sept. 2007 à 17:24
0
Utile
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 !
Commenter la réponse de ELCouz
ELCouz 135 Messages postés jeudi 22 mars 2007Date d'inscription 25 juillet 2008 Dernière intervention - 29 sept. 2007 à 17:53
0
Utile
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
Commenter la réponse de ELCouz
ELCouz 135 Messages postés jeudi 22 mars 2007Date d'inscription 25 juillet 2008 Dernière intervention - 29 sept. 2007 à 18:08
0
Utile
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
Commenter la réponse de ELCouz
ELCouz 135 Messages postés jeudi 22 mars 2007Date d'inscription 25 juillet 2008 Dernière intervention - 29 sept. 2007 à 18:16
0
Utile
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)!
Commenter la réponse de ELCouz
cs_Jean_Jean 639 Messages postés dimanche 13 août 2006Date d'inscription 5 mai 2016 Dernière intervention - 29 sept. 2007 à 20:55
0
Utile
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
Commenter la réponse de cs_Jean_Jean
cs_Jean_Jean 639 Messages postés dimanche 13 août 2006Date d'inscription 5 mai 2016 Dernière intervention - 29 sept. 2007 à 21:06
0
Utile
Autant pour moi!
SpinEdit, Oui bien sûr!
Bon, je couche tôt ce soir!
Jean_Jean
Commenter la réponse de cs_Jean_Jean

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.