ListBox en couleur [Résolu]

cs_f6dqm1 62 Messages postés lundi 8 novembre 2004Date d'inscription 25 mai 2013 Dernière intervention - 26 janv. 2007 à 14:39 - Dernière réponse : cs_f6dqm1 62 Messages postés lundi 8 novembre 2004Date d'inscription 25 mai 2013 Dernière intervention
- 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 

6 réponses

Répondre au sujet
cincap 490 Messages postés dimanche 5 décembre 2004Date d'inscription 6 avril 2009 Dernière intervention - 26 janv. 2007 à 15:52
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cincap
ThWilliam 424 Messages postés mardi 3 janvier 2006Date d'inscription 26 novembre 2013 Dernière intervention - 26 janv. 2007 à 17:32
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ThWilliam
cincap 490 Messages postés dimanche 5 décembre 2004Date d'inscription 6 avril 2009 Dernière intervention - 26 janv. 2007 à 17:49
0
Utile
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 424 Messages postés mardi 3 janvier 2006Date d'inscription 26 novembre 2013 Dernière intervention - 26 janv. 2007 à 21:21
0
Utile
@ 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 490 Messages postés dimanche 5 décembre 2004Date d'inscription 6 avril 2009 Dernière intervention - 26 janv. 2007 à 22:33
0
Utile
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 62 Messages postés lundi 8 novembre 2004Date d'inscription 25 mai 2013 Dernière intervention - 27 janv. 2007 à 08:21
0
Utile
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.