Listbox dynamique et procédure OnDrawItem [Résolu]

Momo8910 14 Messages postés jeudi 4 décembre 2008Date d'inscription 12 mars 2009 Dernière intervention - 3 janv. 2009 à 01:31 - Dernière réponse : Momo8910 14 Messages postés jeudi 4 décembre 2008Date d'inscription 12 mars 2009 Dernière intervention
- 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...
Afficher la suite 

2 réponses

Répondre au sujet
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 3 janv. 2009 à 21:33
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Delphiprog
Momo8910 14 Messages postés jeudi 4 décembre 2008Date d'inscription 12 mars 2009 Dernière intervention - 3 janv. 2009 à 21:50
0
Utile
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
Commenter la réponse de Momo8910

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.