Listbox dynamique et procédure OnDrawItem

Résolu
Messages postés
14
Date d'inscription
jeudi 4 décembre 2008
Statut
Membre
Dernière intervention
12 mars 2009
-
Messages postés
14
Date d'inscription
jeudi 4 décembre 2008
Statut
Membre
Dernière intervention
12 mars 2009
-
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

Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
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.
Messages postés
14
Date d'inscription
jeudi 4 décembre 2008
Statut
Membre
Dernière intervention
12 mars 2009

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