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

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

Votre réponse

2 réponses

Meilleure réponse
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Dernière intervention
9 janvier 2013
- 3 janv. 2009 à 21:33
3
Merci
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.

Merci cs_Delphiprog 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 86 internautes ce mois-ci

Commenter la réponse de cs_Delphiprog
Messages postés
14
Date d'inscription
jeudi 4 décembre 2008
Dernière intervention
12 mars 2009
- 3 janv. 2009 à 21:50
0
Merci
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.