Utilisation d'un Tobject

thonyboy Messages postés 165 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 16 février 2011 - 29 avril 2003 à 11:25
cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 - 29 avril 2003 à 12:43
Bonjour,

Presque tous les evenement d'un message envoient comme parametre Sender: Tobject

Comment utiliser ce parametre quand le code d'un evenement est commun a plusieurs composants ?

Genre, on a cinq boutons, et quand on clique sur un, on retourne son nom dans un TLabel, mais cela a partit d'une seule procedure commune....

D'avance Merci

4 réponses

cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 1
29 avril 2003 à 12:10
Salut !

Pour effectuer ce que tu demandes, il faut effectuer ce qu'on appelle un transtypage !
C'est simple : la classe TObject est une classe parent dont dérive la plupart (peut-être tous ?!) des composants... Le but est donc de faire "comprendre" au programme quel composant il doit utiliser... Dans ta procédure, tu feras donc ainsi : Label1.Caption := TButton(Sender).Name;
Le transtypage, c'est le fait de mettre Sender entre paranthèse avec TButton... Le compilateur "sait" qu'il doit alors considérer Sender comme un objet de classe TButton !

Pour la propriété Name, un transtypage avec TComponent suffirait cependant !

Bonne prog' !
[mailto:bestiol@cario.fr Bestiol.]
PS: Attention toutefois en faisant ce genre de transtypage... Si jamais tu fais un transtypage d'un "Sender" avec TLabel, par exemple, et que c'est un TEdit qui appelle la procédure (qui devient donc le sender), l'accès à une propriété comme Caption, qui n'existe pas dans la classe TEdit, provoquera une exception !
0
thonyboy Messages postés 165 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 16 février 2011
29 avril 2003 à 12:17
merci beaucoup pour cette explication aussi claire que complete.
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
29 avril 2003 à 12:28
C'est ça la magie du polymorphisme !
Appliquer la méthode de l'objet réel (ici un TButton) alors que le paramètre reçu est du type ancêtre de toutes les classes, c.a.d. TObject (voir le poster avec la hiérarchie de la VCL pour s'en convaincre).
Autre forme d'écriture pour effectuer un transtypage (en reprenant l'exemple de Bestiol) :
Label1.Caption := (Sender as TButton).Caption;

Au cas où tu brancherais cette routine sur divers composants mais que tu veuilles n'utiliser cette partie de code que pour les TButton :
if Sender is TButton then
  Label1.Caption := (Sender as TButton).Caption;

May Delphi be with you
0
cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 1
29 avril 2003 à 12:43
Pour les remerciements, thonyboy, il n'y a pas de quoi ! Le principal c'est que tu aies bien compris, car c'est quelque chose d'assez important à savoir utiliser, je pense !

Pour le polymorphisme, je pensais bien que ça se retouchait ! Donc en fait, le polymorphisme n'est "q'une" histoire d'héritage avec classes abstraites/classes concrètes ?!

Bonne prog' !
[mailto:bestiol@cario.fr Bestiol.]
0
Rejoignez-nous