Clic dans une image pour obtenir position --> "Transtypage de classe incorrect" [Résolu]

vieuxpere 199 Messages postés samedi 3 janvier 2004Date d'inscription 17 décembre 2014 Dernière intervention - 23 juin 2008 à 10:40 - Dernière réponse : vieuxpere 199 Messages postés samedi 3 janvier 2004Date d'inscription 17 décembre 2014 Dernière intervention
- 23 juin 2008 à 15:15
Bonjour, je souhaite qu'en cliquant sur mon bouton (boutton1) j'ai la position (x, y) de la souris à l'instant T sur mon image (image1), à noter que mon bouton se trouve dessus mon image --> l'image étant donc derriere le bouton !).

En posant quelques questions sur le forum, j'ai obtenu le code suivant mais j'ai le message d'erreur "Transtypage de classe incorrect", le code est le suivant :

procedure TForm1.Button1Click(Sender: TObject);


var MP : TPoint;
begin
  GetCursorPos(MP);
  MP := (sender as TImage).ScreenToClient(MP);


end;

AUssi, mprocedure TForm1.Button1Click(Sender: TObject);


var MP : TPoint;
begin
  GetCursorPos(MP);
  MP := (sender as TImage).ScreenToClient(MP);


end;

Aussi mes questions sont les suivantes :
   - Est-ce que ce code, via ajustements, est le bon pour faire ce que je veux faire ?
   - Si non, qu'est-ce que je devrais faire ?

Merci par avance pour vos réponses !
Afficher la suite 

6 réponses

Répondre au sujet
Cirec 4217 Messages postés vendredi 23 juillet 2004Date d'inscription 3 avril 2018 Dernière intervention - 23 juin 2008 à 12:19
+3
Utile
Salut,

l'erreur est normal et même logique

procedure TForm1.Button1Click(Sender: TObject);
var MP : TPoint;
begin
  GetCursorPos(MP);
  MP := ( sender as TImage).ScreenToClient(MP);
end;

Sender représente l'objet qui a déclenché l'évènement et donc dans ce cas,
en règle général, c'est Button1 qui le déclenche lui même ... donc Sender = TButton
et forcement (Sender as TImage) n'est pas apprécié par le compilateur

pour ton cas de figure il faut utiliser l'évènement OnClick où OnMouseDown de l'objet TImage.

sinon pour passer par un TButton tu peux essayer comme ceci:

procedure TForm1.Button1Click(Sender: TObject);
var MP : TPoint;
begin
  GetCursorPos(MP);
  MP := Image1.ScreenToClient(MP);
end;

 
@+
Cirec

<hr siz="" />
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Cirec
vieuxpere 199 Messages postés samedi 3 janvier 2004Date d'inscription 17 décembre 2014 Dernière intervention - 23 juin 2008 à 10:45
0
Utile
Je le reposte,
Bonjour, je souhaite qu'en cliquant sur mon bouton (boutton1) j'ai la position (x, y) de la souris à l'instant T sur mon image (image1), à noter que mon bouton se trouve dessus mon image --> l'image étant donc derriere le bouton !).

En posant quelques questions sur le forum, j'ai obtenu le code suivant mais j'ai le message d'erreur "Transtypage de classe incorrect", le code est le suivant :

procedure TForm1.Button1Click(Sender: TObject);


var MP : TPoint;
begin
  GetCursorPos(MP);
  MP := (sender as TImage).ScreenToClient(MP);


end;

Aussi mes questions sont les suivantes :
   - Est-ce que ce code, via ajustements, est le bon pour faire ce que je veux faire ?
   - Si non, qu'est-ce que je devrais faire ?

Merci par avance pour vos réponses !
Commenter la réponse de vieuxpere
Nicolas___ 1039 Messages postés jeudi 2 novembre 2000Date d'inscription 24 avril 2013 Dernière intervention - 23 juin 2008 à 11:24
0
Utile
Salut,

Je comprends ce que tu veux faire mais si ce n'est pas indiscret pourquoi veux tu faire cela ?
Qu'elle est le but de ta manœuvre ?
Parce que je suis sur qu'il y a surement moyen de faire autrement ce que tu veux réaliser ...

Ciao
Commenter la réponse de Nicolas___
vieuxpere 199 Messages postés samedi 3 janvier 2004Date d'inscription 17 décembre 2014 Dernière intervention - 23 juin 2008 à 11:38
0
Utile
En gros je dessine une grille horaire en canvas sur une image, je souhaite savoir où se situe le pointeur de la souris afin de savoir sur quelle zone horaire il se trouve.

Cordialement,
Commenter la réponse de vieuxpere
vieuxpere 199 Messages postés samedi 3 janvier 2004Date d'inscription 17 décembre 2014 Dernière intervention - 23 juin 2008 à 14:50
0
Utile
Merci de cette réponse,

Mais apres avoir testé, j'ai toujours mon X qui a la valeur 0 quelque soit la zone où je clique sur l'image.

Faut-il que j'initialise X ou cette méthode n'est pas la bonne ?

Merci pour vos réponses.
Commenter la réponse de vieuxpere
vieuxpere 199 Messages postés samedi 3 janvier 2004Date d'inscription 17 décembre 2014 Dernière intervention - 23 juin 2008 à 15:15
0
Utile
Merci bcp en fait pour initialiser il fallait simplement faire X:=MP.X;

BIen cordialement,
Commenter la réponse de vieuxpere

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.