Property OnClick d'un composant [Résolu]

Signaler
Messages postés
20
Date d'inscription
vendredi 24 décembre 2004
Statut
Membre
Dernière intervention
7 janvier 2005
-
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
-
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

Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
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.
Messages postés
109
Date d'inscription
lundi 21 avril 2003
Statut
Membre
Dernière intervention
1 janvier 2006

je me trompe peut etre hein, mais euh
Onclick c'est un evenement pas une propriete, nan ?
Messages postés
20
Date d'inscription
vendredi 24 décembre 2004
Statut
Membre
Dernière intervention
7 janvier 2005

Oui c'est un évènement mais dans le composant on le déclare en mettant:
property OnClick;
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
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
Messages postés
20
Date d'inscription
vendredi 24 décembre 2004
Statut
Membre
Dernière intervention
7 janvier 2005

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
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
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
Messages postés
110
Date d'inscription
jeudi 7 octobre 2004
Statut
Membre
Dernière intervention
19 février 2009

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
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
D'accord avec toi MHI, mais ça c'est bien au niveau applicatif. Pas au niveau du composant.
Messages postés
2226
Date d'inscription
dimanche 5 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2010
13
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 !
Messages postés
20
Date d'inscription
vendredi 24 décembre 2004
Statut
Membre
Dernière intervention
7 janvier 2005

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