Récupérer l'objet sur lequel on clicke

Résolu
lolocbr19 Messages postés 2 Date d'inscription jeudi 15 décembre 2005 Statut Membre Dernière intervention 10 janvier 2007 - 10 janv. 2007 à 00:11
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 - 11 janv. 2007 à 09:14
Bonjour,

je voudrais savoir comment récupérer l'objet (ici un tlabel ou un statictext).
il me faut en fait récupérer le caption du label sur lequel l'utilisateur va cliquer.

merci d'avance.

Lolo

9 réponses

Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
10 janv. 2007 à 00:22
Salut,

Tu doubleClick sur un TStaticText de ta fiche et tu complètes comme suit :

procedure TfrmMain.StaticText1Click(Sender: TObject);
begin
  If Sender Is TStaticText Then
  ShowMessage((Sender as TStaticText).Caption);
  If Sender Is TLabel Then
  ShowMessage((Sender as TLabel).Caption);
end;

Ensuite tu lies tous les évènements OnClick des TLabel et TStaticText  (par l'intermédiaire de l'inspecteur d'objets) a cette procedure et c'est tout
 
@+
Cirec

<hr size="2" />
3
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
10 janv. 2007 à 09:26
bonjour,


Tu peux également te passer du "As"

Procedure TMyForm.LabelOnClick(Sender : TObject);

begin

        showmessage (TLabel(Sender).Caption));

end;

Simon
3
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 2
10 janv. 2007 à 14:47
Tu peux très bien avoir plusieurs composants pointant vers la même procédure pour leur Onclick par exemple.
Si tu as des Labels et des TStaticText, Delphi fonctionnera normalement car ils possèdent tous deux une proprété "Caption" mais gare à toi lors de développements plus complexes ...

Le mot clé "as" permet à Delphi de faire une vérification avant. Et déclanche des exception si ton transtypage n'est pas correct.

TMonType(xxx) devrait se limiter aux types simples.
Utilise (xxx as TMyClass) dès que cela parle d'objets. Et ne dit pas que ça prend plus de temps procésseur (ce qui est cependant vrai), il ne s'agit que de moins de 5 picoseconde (vérifié expérimentalement sur mon ordi).

Enfin... je dis ça... je dis rien en fait. C'est vous qui verrez la différence
3
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
10 janv. 2007 à 13:33
Il ne faudrait pas se passer du As il permet un contrôle supplémentaire pendant le transtypage
donc plus de sécurité

La méthode que tu proposes n'offre aucune sécurité ou contrôle

 
@+
Cirec

<hr size="2" />
0

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

Posez votre question
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
10 janv. 2007 à 14:31
C'est vrai Cirec, mais à partir du moment où je clique sur un TLabel,
que peut être le Sender sinon le TLabel en question ? 
Simon
0
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
10 janv. 2007 à 14:56
woaou ! 5 picosecondes !

Après relecture du post, il vaut mieux effectivement utiliser le "as",

1000 excuses

Simon
0
lolocbr19 Messages postés 2 Date d'inscription jeudi 15 décembre 2005 Statut Membre Dernière intervention 10 janvier 2007
10 janv. 2007 à 16:27
Merci à tous pour votre aide !!!
J'ai adopté la solution avec le AS !!!

A tres bientot sur ce super forum !!!

Lolo
0
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 2
10 janv. 2007 à 18:05
@ lolo: pourrait-tu valider la bonne réponse alors ? Merci d'avance.

@Simon: en fait, c'est 5 nanosecondes et non pas pico. Ce qui fait quand même 1000 fois plus !!!! Mais ça reste largement négligeable. En tout cas, c'est vraiment la dernière chose à laquelle je m'intéresserais si je devais optimiser au maximum mon code.
De toutes façons, la POO sera toujours plus lente que la programmation procédurale alors pourqui s'embetter avec de telles futilités ? On ferait mieux de coder au lieu de ... Ben tiens, c'est justement ce que je vais faire !

++
Flo
0
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
11 janv. 2007 à 09:14
Entièrement d'accord Flo !


Merci pour la précision et bon code !

Simon
0
Rejoignez-nous