List Box et rectangle de selection

Résolu
Signaler
Messages postés
96
Date d'inscription
jeudi 1 avril 2004
Statut
Membre
Dernière intervention
22 mai 2008
-
Messages postés
96
Date d'inscription
jeudi 1 avril 2004
Statut
Membre
Dernière intervention
22 mai 2008
-
Mon problème est que j'utilise une list box et que je voudrai que le rectangle de selection soit invisible, je pense qu'il faut passer par sa propriété OnDrawItem et utiliser le canvas, mais pour le moment sa marche pas trop bien.
Si quelqu'un sais quelque chose à ce sujet il est le bienvenue.

La puce

3 réponses

Messages postés
702
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
1 octobre 2009
4
Salut,



Joli ton astuce (bidouille ?) JulioDelphi. Mais il reste le rectangle de focalisation.

Comme il est généré par la fonction DrawFocusRect, qui utilise la fonction XOR, l'astuce (bidouille ?) consiste à le générer soi-même une deuxième fois

Soit le code - en utilisant OnDrawItem (c'était pas bête ton idée la puce) :



procedure TForm1.ListBox1DrawItem(Control: TWinControl; Index: Integer;

Rect: TRect; State: TOwnerDrawState);

begin

with (Control as TListBox).Canvas do

begin

Brush.Color := (Control as TListBox).color; // garde la couleur du fond de la TListBox

font.Color := (Control as TListBox).Font.color; // garde la couleur de la font
de la TListBox


FillRect(Rect); // rectangle couleur fond

TextOut(Rect.Left + 2, Rect.Top, (Control as TListBox).Items[Index]); // texte

if odFocused in State then

DrawFocusRect(Rect); // dessine le rectangle de focalisation pour qu'il soit effacé

end;

end;



il ne faut pas oublier de rajouter (dans FormCreate par ex.):

ListBox1.Style := lbOwnerDrawFixed;

Ou de le fixer dans l'inspecteur d'objet.




Ken@vo

____________________

Code, Code, Codec !
Messages postés
2226
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
14
"BONJOUR"

voila ce que je te propose, j'ai posé une listbox et un edit et j'ai fait ça :



procedure TForm1.ListBox1Click(Sender: TObject);

begin

with listbox1 do

begin

Tag := itemindex;

Itemindex := -1;

edit1.Text := format('Item %d selectionné : %s',[tag,Items[Tag]]);

end;

end;



Tu remarqueras que le fond reste de la meme couleur, seul un contour en pointillé reste.

voila si cela ne te va pas, explique nous quel est le but, plutot que d'essayer de bidouiller
Messages postés
96
Date d'inscription
jeudi 1 avril 2004
Statut
Membre
Dernière intervention
22 mai 2008
1
Kenavo à bien compris ce que je voulais, en effet il ne fallait plus qu'il se voit du tout, même les pointillés.

Je vous remercie tout les deux pour vos réponses.

Néanmoins JulioDelphi je pense que ta solution pourra me servir pour autre chose.

La puce