LIstBox..

Résolu
Signaler
Messages postés
102
Date d'inscription
samedi 14 mai 2005
Statut
Membre
Dernière intervention
12 août 2005
-
Messages postés
702
Date d'inscription
vendredi 21 mars 2003
Statut
Membre
Dernière intervention
1 octobre 2009
-
A quel niveau peut on utiliser la proc drawtext pour un list box

5 réponses

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



Je pense qu'il faut :



1 - Mettre la propriété Style du TListBox à lbOwnerDrawVariable

2 - Gérer l'évènement OnMeasureItem

3 - Gérer l'évènement OnDrawItem



procedure
Tfichetype2.ListQuestionMeasureItem(Control: TWinControl; Index: Integer;

var Height: Integer);

const

Marge = 2; // Pour séparer les items

var

Rect : TRect;

begin

Rect.Left : = 0;

Rect.Right := (Control as TListBox).ClientWidth;

with (Control as TListBox).Canvas do

begin

// Calcul de la hauteur du rectangle

DrawText(Handle,PChar(ListQuestion.Items[Index]),-1,Rect,DT_CALCRECT or DT_WORDBREAK);

end;

Height : = Rect.Bottom - Rect.Top + Marge;

end;




procedure
Tfichetype2.ListQuestionDrawItem(Control: TWinControl; Index: Integer;


Rect: TRect; State: TOwnerDrawState);


begin


with (Control as TListBox).Canvas do


begin


Fillrect(rect);


// Dessin du texte en utilisant la fonction API


DrawText(Handle,PChar(ListQuestion.Items[Index]),-1,Rect,DT_WORDBREAK);


end;


end;







Ken@vo

<hr size="2" width="100%">Code, Code, Codec !

[%3C/body ]
Messages postés
1418
Date d'inscription
samedi 12 juin 2004
Statut
Membre
Dernière intervention
5 juillet 2010
13
Dans l'événement OnDrawItem

@+
Bonne Prog'
Nico [www.ni69.new.fr]
<hr size="2" width="100%">





N'oubliez pas de cliquer sur Réponse acceptée lorsque la réponse vous convient !




Messages postés
102
Date d'inscription
samedi 14 mai 2005
Statut
Membre
Dernière intervention
12 août 2005

Ca ne marche pas, voici mon code:

procedure Tfichetype2.ListQuestionDrawItem(Control: TWinControl;
Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
inherited;


with Control as TListBox do with Canvas do
// Dessin du texte en utilisant la fonction API
DrawText(Canvas.Handle,PChar(ListQuestion.Items[Index]),-1,Rect,DT_WORDBREAK);
end;

Ca ne change rien...
Messages postés
1023
Date d'inscription
dimanche 1 août 2004
Statut
Membre
Dernière intervention
17 août 2008
2
Pourquoi ne pas utiliser directement l'implémentation de cet API dnas la classe TCanvas ?

Je veux parler de la procedure TextOut().



Un exemple:

<hr size= "2" width="100%"> procedure TFicheType2.ListQuestionDrawItem(Control: TWinControl;

Index: Integer; Rect: TRect; State: TOwnerDrawState);

begin

inherited;

with (Control as TListBox).Canvas do

// Dessin du texte en utilisant la fonction du TCanvas

TextOut(Rect.Left,Rect.Top,ListQuestion.Items[Index]);

end;

<hr size ="2" width="100%">Texte de l'aide: "
[TextOut] Ecrit une chaîne dans le canevas en commençant au point
(X,Y), puis actualise la valeur de PenPos à la fin du dessin de la
chaîne ".



Exactement ce qu'il te faut.

@ ++

Florent


Si tu ne te plantes pas ......
tu ne poussera jamais
Messages postés
102
Date d'inscription
samedi 14 mai 2005
Statut
Membre
Dernière intervention
12 août 2005

Ta proposition avec textout ne marche pas, je simplementcouper les chaines possédant plusieurs mots, donc je dois bien utiliser drawtext mais ici ca ne marche pas