LIstBox..

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

5 réponses

cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
22 juin 2005 à 14:02
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 ]
3
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
21 juin 2005 à 13:34
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 !




0
XgaletteX Messages postés 102 Date d'inscription samedi 14 mai 2005 Statut Membre Dernière intervention 12 août 2005
21 juin 2005 à 14:04
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...
0
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
21 juin 2005 à 17:55
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
0

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

Posez votre question
XgaletteX Messages postés 102 Date d'inscription samedi 14 mai 2005 Statut Membre Dernière intervention 12 août 2005
22 juin 2005 à 09:53
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
0
Rejoignez-nous