Tracer une ligne dans ComboBox par OnDrawItem

chental Messages postés 31 Date d'inscription vendredi 22 août 2003 Statut Membre Dernière intervention 15 mars 2015 - 3 janv. 2009 à 11:36
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 - 3 janv. 2009 à 19:27
Salut à Tous, Je cherche un moyen de créer un pseudo combobox à multicolonnes en dessinnant une ligne virtuelle de séparation entre éléments composant mes items de combobox.

Voici ce je teste déjà pour voir si je peux créer une ligne :

procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
var
  ItemString: string;
  X,Y : Integer;
begin
  X :=20; y :=TComboBox(Control).ItemHeight - 2;
  TComboBox(Control).Canvas.FillRect(Rect);
  TComboBox(Control).Canvas.Pen.Style := psSolid;
  TComboBox(Control).Canvas.Rectangle(20,Y,22,Y + 2);

  ItemString := TComboBox(Control).Items.Strings[Index];

  TComboBox(Control).Canvas.TextOut(Rect.Left,Rect.Top,itemstring);
end;

Avec ce code, j'ai juste un petit point qui apparait à mon point 20 gauche.
Si je lui enlève Y + 2 et le remplace par Rect.Bottom, j'ai deux points en haut et en bas aux points 20.
Comment faire pour avoir une veritable ligne de la hauteur de mon item ?
Merci de vos lumières.

12 réponses

Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
3 janv. 2009 à 11:39
Pense à définir une couleur pour Pen et Brush ?

Cordialement, Bacterius !
0
chental Messages postés 31 Date d'inscription vendredi 22 août 2003 Statut Membre Dernière intervention 15 mars 2015 1
3 janv. 2009 à 12:01
Merci du commentaire et je viens de compléter le code avec un certain résultat à 50 %.
En effet, cette fois-ci j'ai bien la ligne qui est dessinée mais seulement à partir de l'item n°2.
Il me manque donc la ligne pour le premier item.
0
chental Messages postés 31 Date d'inscription vendredi 22 août 2003 Statut Membre Dernière intervention 15 mars 2015 1
3 janv. 2009 à 12:05
Salut, c'est bon je viens de comprendre. voici le code qui marche parfaitement :

X :=20; y :=TComboBox(Control).ItemHeight - 2;
  TComboBox(Control).Canvas.FillRect(Rect);
  TComboBox(Control).Canvas.Pen.Style := psSolid;
  TComboBox(Control).Canvas.Pen.Color := clBlue;
  TComboBox(Control).Canvas.Brush.Style := bsSolid;
  TComboBox(Control).Canvas.Brush.Color := clWhite;
  TComboBox(Control).Canvas.Rectangle(200,0,201,Rect.Bottom);

avec ce code, la ligne est bien déssinée sur toute la hauteur du combobox et fait bien mon virtuel combobox à multicolonnes.

Merci encore de votre aide.
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
3 janv. 2009 à 15:35
bonjour,
heu, j'ai rien compris...
ta valeur x := 20 elle sert où ?

cantador
0

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

Posez votre question
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
3 janv. 2009 à 16:17
Probablement le début de la ligne de séparation, plutôt que de tracer la ligne directement au début (c'est pas beau je trouve lol).

Cordialement, Bacterius !
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
3 janv. 2009 à 16:57
@Bacterius:
as tu testé le code ?
les vois-tu les lignes ?

cantador
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
3 janv. 2009 à 18:14
Non je ne les vois pas, il manque un gros bout de code à mon avis ...

Cordialement, Bacterius !
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
3 janv. 2009 à 18:44
ça me rassure, car moi aussi je ne vois rien !

cantador
0
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
3 janv. 2009 à 19:00
C'est p'têt une ligne virtuelle...
0
Bacterius Messages postés 3792 Date d'inscription samedi 22 décembre 2007 Statut Membre Dernière intervention 3 juin 2016 10
3 janv. 2009 à 19:12
Oui c'est une ligne virtuelle il l'a dit :p

Cordialement, Bacterius !
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
3 janv. 2009 à 19:24
Il n'y a donc rien à voir...

cantador
0
Caribensila Messages postés 2527 Date d'inscription jeudi 15 janvier 2004 Statut Membre Dernière intervention 16 octobre 2019 18
3 janv. 2009 à 19:27
C'est ça.





- Allez ! Circulez !
0
Rejoignez-nous