List Box et rectangle de selection

Résolu
lapucedu88 Messages postés 96 Date d'inscription jeudi 1 avril 2004 Statut Membre Dernière intervention 22 mai 2008 - 24 janv. 2005 à 13:56
lapucedu88 Messages postés 96 Date d'inscription jeudi 1 avril 2004 Statut Membre Dernière intervention 22 mai 2008 - 25 janv. 2005 à 07:47
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

cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
24 janv. 2005 à 18:19
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 !
3
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
24 janv. 2005 à 17:12
"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
0
lapucedu88 Messages postés 96 Date d'inscription jeudi 1 avril 2004 Statut Membre Dernière intervention 22 mai 2008 1
25 janv. 2005 à 07:47
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
0