Property OnClick d'un composant

Résolu
Sloridan Messages postés 20 Date d'inscription vendredi 24 décembre 2004 Statut Membre Dernière intervention 7 janvier 2005 - 1 janv. 2005 à 18:16
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 - 2 janv. 2005 à 01:44
Salut,

J'aimerais savoir comment assigner une procedure à la property OnClick de mon composant.

en fait pour etre plus clair, j'ai essayé ca:

procedure DeClick(Sender: TObject);

property OnClick: TObject write DeClick;

Mais dès que j'ouvre un projet qui se sert de mon composant j'ai une erreur.

Merci d'avance

10 réponses

cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
2 janv. 2005 à 01:44
Pas d'accord :
1) déclarer dans les type :
TNotifyEvent: procedure(Sender: TObjet) of Object;

TNotifyEvent est déjà déclaré dans l'unité Classes qu'on l'inclut presque systématiquement dans le cas d'un application GUI.

TGraphicControl ne déclare pas de propriété OnClick, c'est vrai. Mais son ancêtre immédiat, TControl, en déclare une en section Protected ainsi qu'une méthode Click.

Il suffit donc de déclarer dans les published :
property OnClick;
et rien de plus puisqu'on ne fait qu'en changer la visibilité.

Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
3
slachz Messages postés 109 Date d'inscription lundi 21 avril 2003 Statut Membre Dernière intervention 1 janvier 2006
1 janv. 2005 à 18:45
je me trompe peut etre hein, mais euh
Onclick c'est un evenement pas une propriete, nan ?
0
Sloridan Messages postés 20 Date d'inscription vendredi 24 décembre 2004 Statut Membre Dernière intervention 7 janvier 2005
1 janv. 2005 à 19:03
Oui c'est un évènement mais dans le composant on le déclare en mettant:
property OnClick;
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
1 janv. 2005 à 20:18
Quel est l'ancêtre de ton composant ?
Ne déclare-t-il pas déjà une propriété onClick ?

Sinon, pourquoi redéclarer un type existant ?
Dans ta déclaration, on voit tout de suite que l'évènement de ton composant est du type TNotifyEvent :
TNotifyEvent: procedure(Sender: TObjet) of Object;


Donc, il te suffit d'écrire :
property OnClick: TNotifyEvent read FOnclick write FOnClick;


Il faudra aussi déclarer un champ, de même nature, dans la section private du composant:
private
  FOnClick: TNotifyEvent;


Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.

Aidons-les
0

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

Posez votre question
Sloridan Messages postés 20 Date d'inscription vendredi 24 décembre 2004 Statut Membre Dernière intervention 7 janvier 2005
1 janv. 2005 à 22:31
Ok,
par contre désolé j'ai pas tout bien compris, comment je fais le lien entre FOnClick et DeClick?
(Au passage, DeClick n'a pa forcément besoin de paramètre)
Merci
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
1 janv. 2005 à 22:43
Dans les procedures où il est nécessaire de déclencher l'évènement OnClick de ton composant :
if Assigned(FOnClick) then Declick(Self);


Mais il faudrait quand même savoir si, oui ou non, Declick a besoin de paramètres. La conception de composants, ça ne s'improvise pas.
Et s'il n'en a pas besoin, à quoi cela sert-il de déclencher un évènement dont l'application utilisatrice ne pourra pas en connaitre la provenance ?
Attention : tu n'as pas répondu aux questions complémentaires que j'avais posées :
Quel est l'ancêtre de ton composant ?
Ne déclare-t-il pas déjà une propriété onClick ?

Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.

Aidons-les
0
cs_MHI Messages postés 110 Date d'inscription jeudi 7 octobre 2004 Statut Membre Dernière intervention 19 février 2009 1
1 janv. 2005 à 22:50
tu souhaite seulement brancher une procedure sur l'événement onClick de ton composant. Pour cela si ta procedure DeClick a la même signature que l'événement OnClick alors il suffit de faire :
tonComposant.OnClick = DeClick
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
1 janv. 2005 à 23:34
D'accord avec toi MHI, mais ça c'est bien au niveau applicatif. Pas au niveau du composant.
0
JulioDelphi Messages postés 2226 Date d'inscription dimanche 5 octobre 2003 Statut Membre Dernière intervention 18 novembre 2010 14
1 janv. 2005 à 23:46
DelphiProg a donné la bonne réponse !! (à 1 détail pres : le (4))

1) déclarer dans les type :
TNotifyEvent: procedure(Sender: TObjet) of Object;

2) déclarer dans les private :
 FOnClick: TNotifyEvent;

3) déclarer dans les published :
property OnClick: TNotifyEvent read FOnclick write FOnClick;

4) déclarer en protected :
procedure Click; override;

5) créer la procedure précedemment déclarée :
procedure TMonComposant.Click;
begin
     inherited Click;
     if Assigned(FOnClick) then FOnClick(self);
end;


A toi de jouer !!

N'oubliez pas de cliquer sur Réponse acceptée lorsque cette réponse vous convient ! ;)

-------------------------------------------
http://diabloporc.free.fr : Freeware et Opensource Delphi !
0
Sloridan Messages postés 20 Date d'inscription vendredi 24 décembre 2004 Statut Membre Dernière intervention 7 janvier 2005
1 janv. 2005 à 23:46
Quel est l'ancêtre de ton composant ?TGraphicControl
Ne déclare-t-il pas déjà une propriété onClick ?non

En fait Declick n'a pa besoin de paramètre, en gros ca me permet dans un composant dé de garder le dé pour le prochain lancé ou de le relancer.

en gros ca donne

Garder:=not Garder;
afficher();//Le dé changer de couleur
0
Rejoignez-nous