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
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
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
Euh, moi j'aurais dit oui à donf !la reponse est non
Mes 2 cts,
--
jp
excuse moi mais j'ai pas compris..![]()
je peux le faire dans le ondrawitem??
Jipété..
J'ai essayé ton code..
je comprends pas trop en fait, mais rien ne se passe avec ce code.. pourtant, le color_index est bel et bien affecté..
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;
- C'est pas mon code ;
- j'ai downloadé le .zip, j'ai viré une ligne dans le .dpr tel qu'expliqué dans la discute (en bas) ;
- j'ai compilé, j'ai exécuté (que du bonheur !) ;
- 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à.
pour un pété t vraiment un pété...
à mon avis garde tes remarques pour toi et fais nous plaisir...
Salut,
Bon je prends le relais...![]()
Voici un exemple qui écrira le 2° item du ComboBox en rouge.
@+ Claudius
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;
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+
Tout à fait !Envoyé par pitango
![]()
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;
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..
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 !!
@+
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..
Ah non malheureusement lorsque ton combo est sur csOwnerDrawFixed tu n'as plus de zone d'édition.Envoyé par freestyler
Et pour changer ce comportement c'est une autre paire de manches![]()
@+
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à....
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
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager