Comment personnaliser chaque item de listbox

Résolu
vieuxpere Messages postés 195 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 17 décembre 2014 - 4 mars 2008 à 16:43
vieuxpere Messages postés 195 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 17 décembre 2014 - 5 mars 2008 à 12:42
Bonjour, je voudrais savoir comment je peux mettre en gras que certain item de listbox, il existe certes des exemples sur le forum (via les canvas) mais que je ne les comprend pas trés bien.

Si vous pouviez m'éclairer un peu sur la méthode canvas ou que vous avez une méthode plus simple ca serait volontiers.

Merci par avance.

5 réponses

cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
4 mars 2008 à 17:22
Salut,

bem malheureusement, tu dois passer par les canvas et les démos sur ce site sont ce qu' il y a de plus simple.

Pour t' aider, et parce que je sens que tu n' es pas à l' aise, vois le canvas comme la feuille de papier oú est dessiné ton compo.

exemple simplissime:
Canvas.moveto(0, 0);
Canvas.Lineto(10, 10);
Ça dessine une ligne diagonale.
Pour gérer les couleurs du trait, du fond de la police:
Canvas.font.color
Canvas.Brush.Color
Canvas.Pen.Color

Bon après, il faut que tu étudies un peu ...

A+
3
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
4 mars 2008 à 18:32
Tu es donc dans le OnDrawItem avec la propriété Style à csOwnerDrawFixed:
il existe une variable State: TOwnerDrawState
Celle-ci te permet de savoir si l' item est seleccionné. Pourquoi?
Bem pour changer la couleur de fond et la couleur de la police!
  If (State [odSelected]) Or (State [odSelected, odFocused])
  Then // l' item est seleccionné
  Else // l' item n' est pas seleccionné!

PS: n' oublie pas de valider les réponses ...
3
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
5 mars 2008 à 12:06
Salut,

voici un exemple des plus simple (sans superflu)

{Dans l'inspecteur d'objets :
Mettre la propriété
Style à lbOwnerDrawFixed
Et double cliquer à droite de l'évènement
OnDrawItem
et complèter comme suit:}
Procedure TForm1.ListBox1DrawItem(Control:
TWinControl; Index: Integer;
  Rect:
TRect; State: TOwnerDrawState);
Begin
  With
TListBox(Control) Do Begin

    {On efface le fond}
    Canvas.FillRect(Rect);
    {Un Item sur Deux
et mis en rouge + Gras + Italique}
    If
Index Mod 2 = 0Then
      With Canvas.Font Do Begin
        Color := clRed;

        Style := [fsBold, fsItalic];
       End ;
    {Et on dessine
le texte}
    DrawText(Canvas.Handle, PChar(Items[Index]), -1 , Rect,
DT_VCENTER Or DT_SINGLELINE Or DT_LEFT);
  End;
End;

<center>Highlighted with Pas2HTML </center>

 
@+
Cirec

<hr siz ="" />
3
vieuxpere Messages postés 195 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 17 décembre 2014
4 mars 2008 à 18:19
Merci pour ta reponse j'ai tésté et en effet ça marche.

Je rencontre par contre un autre probleme !

Le probleme c'est que certes j'ecris en canvas dans le listbox, avec des fonts personnalisés pour chaque item, mais ce que je j'écris n'est pas considéré comme un item car ce qui s'affiche n'est pas cliquable comme les items d'un listbox, je sais pas si je suis clair.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vieuxpere Messages postés 195 Date d'inscription samedi 3 janvier 2004 Statut Membre Dernière intervention 17 décembre 2014
5 mars 2008 à 12:42
Merci beaucoup à vous pour votre réponse.
0
Rejoignez-nous