Listbox dynamique et procédure OnDrawItem

Résolu
Momo8910 Messages postés 14 Date d'inscription jeudi 4 décembre 2008 Statut Membre Dernière intervention 12 mars 2009 - 3 janv. 2009 à 01:31
Momo8910 Messages postés 14 Date d'inscription jeudi 4 décembre 2008 Statut Membre Dernière intervention 12 mars 2009 - 3 janv. 2009 à 21:50
Bonjour,

alors voilà je suis en train de finir un projet pour l'école, mais la j'ai un petit soucis avec la création dynamique...

JE crée une listbox en dynamique et je voudrais lui associer une procédure Ondrawitem...En fait, je voudrais recolorier chaque item ... Le soucis, c'est que je n'ai pas réussi à trouver la bonne syntaxe ...

Je sais qu'il faut créer une procédure que l'on va assigner à l'évènement Ondrawitem lors de la création dynamique, mais après cette procédure ne marche pas ..Je pense que el problème vient de l'assignation de la procédure à l'évènement OnDrawItem :

OnDrawItem := MaProcédure(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState) ...

que dois mettre à la place de Control, Index, Rect: TRectet State ?

J'ai tenté de mettre Liste ( qui est mon composant pour la création dynamique) pour ocntrol, Liste.index pour index, Liste.itemrect pour Rect, mais pour State je n'ai aucune idée...

Est ce que quelqu'un à déjà réussi à résoudre ce problème ??

Merci d'avance...

2 réponses

cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
3 janv. 2009 à 21:33
Déjà, on va parler de méthode et pas de procédure.
En effet, le pointeur de méthode OnDrawItem attend une méthode et pas une procédure.
Rappel !
TMethod = procedure of object;
Alors qu'une procedure n'est qu'une fonction ne retourant aucune valeur et n'appartenant à personne.
Ce n'est pas être tatillon mais tu apprendras que les mots ont de l'importance quand on désigne quelque chose de précis.
Bon, soit, assez de théorie et revenons-en à ce qui te préoccupe.
Ainsi, OnDrawItem attend qu'on lui affecte une méthode ayant pour signature :
UneMethode(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
Pour te faciliter les choses, tu déclares cette méthode dans le corps de la déclaration de ta fiche !
type
  TForm1 = class(TForm)
  ..
  procedure MaProcédure(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
end;

Puis, tu implémentes cette méthode :
procedure TForm1.MaProcédure(Control: TWinControl; Index: Integer; Rect: TRect; State: TOwnerDrawState);
begin
..
end;

Au moment opportun dans ton code, tu affectes la méthode ci-dessus à l'évènement OnDrawItem .
MyListBox: TListBox;
begin
MyListbox := TListBox.create...
MyListBox.OnDrawItem := MaProcedure;

Et, Ô miracle, le composant sait quels arguments il doit fournir à la méthode MaProcedure.
En espérant t'avoir éclairé et remis sur le droit chemin...
Je te souhaite bonne continuation.

May Delphi be with you !
<hr color="#008000" />Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
3
Momo8910 Messages postés 14 Date d'inscription jeudi 4 décembre 2008 Statut Membre Dernière intervention 12 mars 2009
3 janv. 2009 à 21:50
Je te remercie beaucoup :)

En fait, c'était les arguments que je n'arrivais pas à comprendre.. Mais comme tu l'as dit : Ô Miracle :)

Merci beaucoup
0
Rejoignez-nous