IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Couleur dans une listbox


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Par défaut Couleur dans une listbox
    Bonjour à tous,

    Je cherche le moyen de changer la couleur d'une partie d'un item d'une listbox. Par exemple pour avoir:

    Le train N° train est en retard;

    J'arrive à changer toute la ligne de la listbox, mais pas juste un élément de la ligne, et c'est indispensable pour mon application.
    Si quelqu'un à une idée (même à la rigueur utiliser un autre composant)...

    Merci.

  2. #2
    Membre Expert
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 288
    Par défaut
    Bonjour,

    Si tu ne trouves aucunes réponses/solutions, alors pourquoi pas se pencher vers la création de plusieurs colonnes sur ton TListBox ; dont l'une serait... colorée

  3. #3
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Par défaut
    Citation Envoyé par J-P
    Bonjour,

    Si tu ne trouves aucunes réponses/solutions, alors pourquoi pas se pencher vers la création de plusieurs colonnes sur ton TListBox ; dont l'une serait... colorée
    Exactement
    Tu pourrais utiliser un TListView en vsReport (propriété ViewStyle) avec des SubItems En utilisant ses OnCustomDrawBidule, tu peux faire à peu près ce que tu veux
    D'autre part, rien ne t'empêche d'utiliser le OnDrawItem du TListBox et de refaire le dessin de chacun de tes Items en appliquant la couleur de ton choix
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  4. #4
    Membre éclairé Avatar de declencher
    Inscrit en
    Mai 2003
    Messages
    441
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 441
    Par défaut
    Bonjour,

    Comme dit par pedro, tu devrais t'en sortir en redessinnant le canva du ListBox toi même ça doit marcher. Voici un exemple où je redessine l'item en fonction de la valeur (dans mon cas je ne change que la couleur de fond).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    procedure TMainForm.ListBoxMainDrawItem(Control: TWinControl;
      Index: Integer; Rect: TRect; State: TOwnerDrawState);
    var
      pCanvas : TCanvas;
    begin
      pCanvas := (Control as TListBox).Canvas;
     
      if (((Control as TListBox).Items.Strings[Index] = 'Texte1') or
          ((Control as TListBox).Items.Strings[Index] = 'Texte2') or
          ((Control as TListBox).Items.Strings[Index] = 'Texte3')) then
        pCanvas.Brush.Color := $F5D68D;
     
      if ((Control as TListBox).Items.Strings[Index] = 'Texte4') then
        pCanvas.Brush.Color := $7E9CFF;
     
      // Lorsque la ligne est sélectionnée
      if (odSelected in State) then
      begin
        pCanvas.Brush.Color := $C56A31;
        pCanvas.FillRect(Rect);
        pCanvas.Font.Color := clWhite;
      end else
        pCanvas.FillRect(Rect);  //Les autres lignes
     
      // Ecrire les Items.
      pCanvas.TextOut(Rect.Left+5,Rect.Top,
                      (Control as TListBox).Items.Strings[Index]); // +5, +2
    end;

  5. #5
    Membre émérite Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Par défaut
    Merci à tous!!

    Avec ces exemples je devrais m'en sortir.
    Je vais tester tout ça et je vous tiens au courant...

  6. #6
    Membre Expert
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 288
    Par défaut
    Bonjour,

    Citation Envoyé par declencher
    Bonjour,

    Comme dit par pedro, tu devrais t'en sortir en redessinnant le canva du ListBox toi même ça doit marcher. Voici un exemple où je redessine l'item en fonction de la valeur (dans mon cas je ne change que la couleur de fond).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    procedure TMainForm.ListBoxMainDrawItem(Control: TWinControl;
      Index: Integer; Rect: TRect; State: TOwnerDrawState);
    var
      pCanvas : TCanvas;
    begin
      pCanvas := (Control as TListBox).Canvas;
     
      if (((Control as TListBox).Items.Strings[Index] = 'Texte1') or
          ((Control as TListBox).Items.Strings[Index] = 'Texte2') or
          ((Control as TListBox).Items.Strings[Index] = 'Texte3')) then
        pCanvas.Brush.Color := $F5D68D;
     
      if ((Control as TListBox).Items.Strings[Index] = 'Texte4') then
        pCanvas.Brush.Color := $7E9CFF;
     
      // Lorsque la ligne est sélectionnée
      if (odSelected in State) then
      begin
        pCanvas.Brush.Color := $C56A31;
        pCanvas.FillRect(Rect);
        pCanvas.Font.Color := clWhite;
      end else
        pCanvas.FillRect(Rect);  //Les autres lignes
     
      // Ecrire les Items.
      pCanvas.TextOut(Rect.Left+5,Rect.Top,
                      (Control as TListBox).Items.Strings[Index]); // +5, +2
    end;
    Super code, bravo !

    Pour les étourdis comme moi, ne pas oublier de paramétrer la propriété "Style" à ==> lbOwnerDrawFixed

  7. #7
    Membre éclairé Avatar de declencher
    Inscrit en
    Mai 2003
    Messages
    441
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 441
    Par défaut
    Bonjour,

    J'ai simplement adapté à mes besoins un code trouvé sur le net. Faites en de même et amusez vous bien

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/09/2011, 15h45
  2. Items en couleur dans une listBox
    Par xx_FiFty_xx dans le forum Windows Forms
    Réponses: 3
    Dernier message: 04/06/2008, 13h25
  3. Changer la couleur d'une ligne dans une listbox
    Par BoyzInDaProject dans le forum MFC
    Réponses: 2
    Dernier message: 01/06/2007, 10h23
  4. Alterner la couleur dans une Listbox
    Par l.mnu dans le forum Access
    Réponses: 3
    Dernier message: 20/03/2007, 14h46
  5. Changer la couleur d'une ligne dans une ListBox
    Par Leray dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 16/07/2006, 14h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo