ListBox en couleur

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

6 réponses

cincap Messages postés 460 Date d'inscription dimanche 5 décembre 2004 Statut Membre Dernière intervention 6 avril 2009 2
26 janv. 2007 à 15:52
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
3
ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
26 janv. 2007 à 17:32
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
3
cincap Messages postés 460 Date d'inscription dimanche 5 décembre 2004 Statut Membre Dernière intervention 6 avril 2009 2
26 janv. 2007 à 17:49
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
0
ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
26 janv. 2007 à 21:21
@ 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...
0

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

Posez votre question
cincap Messages postés 460 Date d'inscription dimanche 5 décembre 2004 Statut Membre Dernière intervention 6 avril 2009 2
26 janv. 2007 à 22:33
Bonsoir,

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

Code astucieux.

@+,

Cincap

[url]mailto:/url
0
cs_f6dqm1 Messages postés 62 Date d'inscription lundi 8 novembre 2004 Statut Membre Dernière intervention 25 mai 2013
27 janv. 2007 à 08:21
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
0
Rejoignez-nous