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 d'un élément d'une ComboBox


Sujet :

Delphi

  1. #1
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 365
    Points : 83
    Points
    83
    Par défaut Couleur d'un élément d'une ComboBox
    Bonjour,
    est ce que je peux modifier la couleur et le style d'1 seul élément de ma comboBox en y acédant par index, du genre (MyCombo.Items[i].color := ...)

    ??

    Merci

  2. #2
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 421
    Points : 5 820
    Points
    5 820
    Par défaut
    salut

    la reponse est non les donnée d'un combo ne sont insere que dans un tstring
    mais par contre tu peut utiliser l'indice dans le ondrawitem

    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  3. #3
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    la reponse est non
    Euh, moi j'aurais dit oui à donf !

    Mes 2 cts,
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  4. #4
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 365
    Points : 83
    Points
    83
    Par défaut
    excuse moi mais j'ai pas compris..

    je peux le faire dans le ondrawitem??

  5. #5
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 365
    Points : 83
    Points
    83
    Par défaut
    Jipété..

    J'ai essayé ton code..

    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
     
    procedure TForm1.MyComboDrawItem(Control: TWinControl;
      Index: Integer; Rect: TRect; State: TOwnerDrawState);
    begin
     
      if index = Color_Index then begin
                              MyCombo.canvas.brush.color:=clwhite;
                              MyCombo.canvas.fillrect(rect);
                              end else begin
                                       MyCombo.canvas.brush.color:=$00F4F3EE;
                                       MyCombo.canvas.fillrect(rect);
                                       end;
     
      MyCombo.canvas.textout(rect.left+30,rect.top+2,MyCombo.items[index]);
    end;
    je comprends pas trop en fait, mais rien ne se passe avec ce code.. pourtant, le color_index est bel et bien affecté..

  6. #6
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 730
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 730
    Points : 15 132
    Points
    15 132
    Par défaut
    1. C'est pas mon code ;
    2. j'ai downloadé le .zip, j'ai viré une ligne dans le .dpr tel qu'expliqué dans la discute (en bas) ;
    3. j'ai compilé, j'ai exécuté (que du bonheur !) ;
    4. j'ai étudié le code, j'ai tout compris, en 2 heures j'ai complètement refait un truc pour moi, c'est trop fastoche.

    Et je suis vraiment pas un cador,
    Si tu comprends pas cet exemple-là, laisse tomber la prog, je crois.
    HTH,
    --
    jp
    Faut qu'je bouge, là.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  7. #7
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 365
    Points : 83
    Points
    83
    Par défaut
    pour un pété t vraiment un pété...

    à mon avis garde tes remarques pour toi et fais nous plaisir...

  8. #8
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut,

    Bon je prends le relais...

    Voici un exemple qui écrira le 2° item du ComboBox en rouge.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
      Rect: TRect; State: TOwnerDrawState);
    begin
      with TComboBox(Control) do
      begin
        Canvas.FillRect(Rect);
        if Index = 1 { ou bien: Items[Index] = 'Item 2' } then
          Canvas.Font.Color := clRed
        else
          Canvas.Font.Color := clWindowText;
        Canvas.TextOut(Rect.left, Rect.top, Items[index]);
      end;
    end;
    @+ Claudius

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    158
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 158
    Points : 158
    Points
    158
    Par défaut
    Bonjour,

    Je viens d'essayer le code précédent, cela fonctionne sans problème.

    Merci Claudius40 pour l'info.

    Petite précision, la propriété Style de la combo doit être modifié

    Aide Delphi 7 :

    OnDrawItem ne se produit que si la propriétéStyle a la valeur csOwnerDrawFixed ou la valeur csOwnerDrawVariable

    A+
    Pitango
    -------------------------------------------------
    [Delphi7.1 Entreprise][MYSQL 5.0.27][SQL SERVER 7][W2000/NT4]

  10. #10
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par pitango
    OnDrawItem ne se produit que si la propriétéStyle a la valeur csOwnerDrawFixed ou la valeur csOwnerDrawVariable
    Tout à fait !

    Autre exemple: Un item écrit en rouge, un autre sur fond cyan, et la gestion de la sélection.
    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
     
    procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
      Rect: TRect; State: TOwnerDrawState);
    begin
      with TComboBox(Control) do
      begin
        Canvas.Brush.Color := clWindow;
        Canvas.Font.Color := clWindowText;
        if odSelected in State then
          begin
            Canvas.Brush.Color := clHighLight;
            Canvas.Font.Color := clHighLightText;
          end
        else if Index = 1 then
          Canvas.Font.Color := clRed
        else if Index = 3 then
          Canvas.Brush.Color := clTeal;
        Canvas.FillRect(Rect);
        Canvas.TextOut(Rect.left, Rect.top, Items[index]);
      end;
    end;
    @+

  11. #11
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 365
    Points : 83
    Points
    83
    Par défaut
    juste une question..

    quand se déclenche exactement cet évènement ondrawitem de la combo??

    ce n'est pas au moment de l'alimentation de ma combo??

    à moins qu'il faille détruire ma combo à chaque fermeture de mon formulaire et la recréer après..

  12. #12
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut,

    Cet évènement est appelé à chaque fois que le contrôle a besoin d'être dessiné: lorsque tu déroules la liste, ou que ta fiche réapparait si elle avait été masquée.

    Donc je ne vois pas l'utilité de la détruire à la fermeture de ta fiche !!

    @+

  13. #13
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    365
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 365
    Points : 83
    Points
    83
    Par défaut
    je n'ai rien dit.. désolé

    En fait, la source de tous mes problèmes était que à un certain moment dans le code, je faisais une vérification sur le nombre d'Items dans ma combo.. si elle était vie, je fixais sa propriété style à csSimple, sinon ça aurait été csdropdownlist..

    c'est pour ça qu'il ne se passait rien entre temps...

    Voila.. ça marche nickel.. MERCI BP

    Sauf que j'ai un souci plus grave.. c'est que je ne peux plus écrire dedans comme j'avais prévu de le faire..

  14. #14
    Membre éclairé
    Avatar de denokan
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 434
    Points : 746
    Points
    746
    Par défaut
    Citation Envoyé par Aide Delphi
    Se produit quand un élément d'une boîte àoptions dessinée par le propriétaire doit être affiché.
    Donnez un poisson à un homme et il mangera pendant un jour... Apprenez-lui à pêcher et il s'assiéra dans une barque et boira de la bière toute la journée

  15. #15
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par freestyler
    Sauf que j'ai un souci plus grave.. c'est que je ne peux
    plus écrire dedans comme j'avais prévu de le faire..
    Ah non malheureusement lorsque ton combo est sur csOwnerDrawFixed tu n'as plus de zone d'édition.

    Et pour changer ce comportement c'est une autre paire de manches

    @+

  16. #16
    Membre régulier
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2011
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 248
    Points : 74
    Points
    74
    Par défaut Fonction DrawItem appelée en boucle infinie - AdvFocusHelper-> MsgHookProc
    Je fait le même projet (avec une combobox), sauf que ma fonction de dessin "cbx_bainsDrawItem" est appelée de manière infinie !!!

    Voici ce qui se passe en mode debug:
    Une fois que cette fonction a été appelée, le code passe dans AdvFocusHelper -> fonction MsgHookProc puis ça rappelle ma fonction à nouveau... de manière infinie....


    Que dois-je faire ?


    merci de votre aide !

    Delphi semble être un langage mort.... si l'on s'en tient aux dates de cet échange.... 10 ans déjà....
    "Les ordinateurs font toujours ce qu'on leur dit, mais jamais ce qu'on veut."

  17. #17
    Responsable Lazarus & Pascal

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Points : 20 855
    Points
    20 855
    Billets dans le blog
    84
    Par défaut
    Citation Envoyé par wilfryjules Voir le message

    Delphi semble être un langage mort.... si l'on s'en tient aux dates de cet échange.... 10 ans déjà....
    Bonjour,

    Loin d'être mort, Delphi se porte très bien dans nos forums . Les dates prouvent que le forum existe depuis longtemps, comme ce serait le cas pour bien d'autres langages.
    Cependant, déterrer des discussions closes il y a 10 ans, quel que soit le langage, voilà une très mauvaise idée ... Nous les conservons afin que chacun puisse récupérer, sans ouvrir de nouvelles discussions, des informations parfois importantes. Dans votre cas, je vous suggère d'ouvrir une discussion pour exposer votre problème à la communauté en fournissant tous les détails nécessaires à sa compréhension.

    Cordialement,
    Gilles
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

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

Discussions similaires

  1. Couleur d'arrière-plan des items d'une QComboBox
    Par mr_samurai dans le forum Qt
    Réponses: 7
    Dernier message: 18/10/2019, 11h06
  2. Définir la couleur de sélection d'une combobox
    Par sayou84 dans le forum Windows Forms
    Réponses: 0
    Dernier message: 08/04/2010, 11h58
  3. [XL-2003] Remplir une combobox avec la palette de couleur
    Par DUIS2001 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/09/2009, 03h53
  4. couleur d'une combobox
    Par awalter1 dans le forum GTK+ avec Python
    Réponses: 6
    Dernier message: 25/10/2007, 15h08
  5. Comment changer la couleur d'une combobox ?
    Par PetitPapaNoël dans le forum MFC
    Réponses: 6
    Dernier message: 16/03/2007, 11h00

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