ListBox en couleur [Résolu]

cs_f6dqm1
Messages postés
62
Date d'inscription
lundi 8 novembre 2004
Dernière intervention
25 mai 2013
- 26 janv. 2007 à 14:39 - Dernière réponse : cs_f6dqm1
Messages postés
62
Date d'inscription
lundi 8 novembre 2004
Dernière intervention
25 mai 2013
- 27 janv. 2007 à 08:21
Bjr à tous
J'essaie de résoudre un petit problème : dans une listbox à choix multiple avec mise en surbrillance des lignes choisies, pouvoir changer la couleur de la fonte d'une ligne quelconque.
J'ai trouvé sur le site la façon de changer la couleur d'une ligne en passant par l'évènement DrawItem, par contre lorsque je fais ça, je perds la fonction MultiSelect même si elle est à True et la surbrillance en bleu ne fonctionne plus. Y a t'il une solution ?
Merci pour l'aide
Gabriel
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
cincap
Messages postés
490
Date d'inscription
dimanche 5 décembre 2004
Dernière intervention
6 avril 2009
- 26 janv. 2007 à 15:52
3
Merci
Bonjour,

Je viens d'essayer de mettre une ligne rouge puis verte à chaque item puis les sélectionner (ctrl+A) et cela fonctionne quel est ton code ?

Dans le oncreate as tu mis pour le style de ton listbox  "lbOwnerDrawFixed;"

@+,

Cincap

[url]mailto:/url

Merci cincap 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de cincap
Meilleure réponse
ThWilliam
Messages postés
424
Date d'inscription
mardi 3 janvier 2006
Dernière intervention
26 novembre 2013
- 26 janv. 2007 à 17:32
3
Merci
Salut,

procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
begin
   with ListBox1 do
   begin
      if odSelected in State then
      begin
        Canvas.Brush.Color:= clskyblue; // par exemple
        Canvas.Font.Color:= clwhite;
      end
      else
      begin
        Canvas.Brush.Color:= Color;
        Canvas.Font.Color:= Font.Color;
      end;
      Canvas.FillRect(Rect);
      Canvas.TextOut(Rect.Left, Rect.Top, Items[Index]);
   end;
end;

A +
Thierry

Merci ThWilliam 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de ThWilliam
cincap
Messages postés
490
Date d'inscription
dimanche 5 décembre 2004
Dernière intervention
6 avril 2009
- 26 janv. 2007 à 17:49
0
Merci
Bonsoir,

@ Thwilliam, même avec ton code, je suis obligé de mettre dans le "oncreate" de la fiche :

listbox1.Style := lbOwnerDrawFixed;

Sinon cela ne fonctionne pas.

@+,

Cincap

[url]mailto:/url
Commenter la réponse de cincap
ThWilliam
Messages postés
424
Date d'inscription
mardi 3 janvier 2006
Dernière intervention
26 novembre 2013
- 26 janv. 2007 à 21:21
0
Merci
@ cincap : je ne l'ai pas précisé, puisque tu l'avais toi-même mentionné. Mais comme style est une propriété publiée, tu peux le définir directement dans l'inspecteur d'objets. L'événement OnDrawItem n'est appelé que si style = lbOwnerDrawFixed ou lbOwnerDrawVariable.  

Petite correction du code :
  if (odSelected in State) or (odFocused in State) then...
Commenter la réponse de ThWilliam
cincap
Messages postés
490
Date d'inscription
dimanche 5 décembre 2004
Dernière intervention
6 avril 2009
- 26 janv. 2007 à 22:33
0
Merci
Bonsoir,

@ ThWilliam, je viens d'apprendre encore une chose sur le filelistbox, merci beaucoup.

Code astucieux.

@+,

Cincap

[url]mailto:/url
Commenter la réponse de cincap
cs_f6dqm1
Messages postés
62
Date d'inscription
lundi 8 novembre 2004
Dernière intervention
25 mai 2013
- 27 janv. 2007 à 08:21
0
Merci
Re:bjr
je vois qu'il y a des forts en Delphi sur ce forum.
En fait je testai le code de Nebula.
J'ai compris que lorsque l'on est en OwnerDrawFixed il faut tout gérer soi-même, même la surbrillance ! Je pensais naïvement que ça se faisait automatiquement.
Le "if odSelected as State" ne s'invente pas ! je n'aurais pas trouvé tout seul !
Merci de m'avoir ouvert les yeux !

Gabriel
Commenter la réponse de cs_f6dqm1

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.