Pointeur souris position [Résolu]

bip98 104 Messages postés mercredi 23 avril 2003Date d'inscription 29 avril 2008 Dernière intervention - 13 déc. 2004 à 11:00 - Dernière réponse : bip98 104 Messages postés mercredi 23 avril 2003Date d'inscription 29 avril 2008 Dernière intervention
- 11 janv. 2005 à 17:54
Bonjour, bonjour,

J'ai une petite question, qui je pense vous pourrez sûrement m'aider.
Je vous explique la situation: Je voudrais réaliser un programme qui enregistre les coordonnées x, y de la souris (dans 2 variables) et redessine le chemin parcouru sur une fenêtre Windows.. en C#

Comment faire pour enregistrer les coordonnées x,y de la souris..

avec la commande: PointToClient(Cursor.Position)
ca ne donne : {X=116,Y=55} comment faire pour prendre que la valeur des points ??

Ensuite avez vous une ID comment je pourrais m'y prendre pour dessiner le chemin parcouru... (Bien sûr la souris doit respecter une délimitation)
Afficher la suite 

Votre réponse

15 réponses

Meilleure réponse
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 11 janv. 2005 à 16:51
3
Merci
bon, pour le bug avec les 2 boutons dans un sens c'est logique, on laisse tomber Up/Down comme je l'ai dit plus haut

le code devient donc :

private Graphics m_panelGraphics;
private Bitmap m_pointBmpBlack;

private void panel_Dessin_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
if ( e.Button = = MouseButtons.Left )
{
m_panelGraphics.DrawImageUnscaled(m_pointBmpBlack, e.X, e.Y);
}
}

avec dans le cosntructeur du Form :

m_pointBmpBlack = new Bitmap(1,1);
m_pointBmpBlack.SetPixel(0,0,Color.Black);
m_panelGraphics = panel_Dessin.CreateGraphics();

Cocoricoooooooo !!!!
coq
MVP Visual C#

Merci cs_coq 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de cs_coq
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 13 déc. 2004 à 11:46
0
Merci
1) ben PointToClient te retourne une instance de Point contenant les coordonnées X et Y du point, je ne vois pas où est le pb là

2) en utilisant la méthode CreateGraphics (si dispo) du contrôle sur lequel tu veux dessiner et en te servant des méthodes de l'instance de la classe Graphics que retourne cette méthode

Cocoricoooooooo !!!!
coq
MVP Visual C#
Commenter la réponse de cs_coq
bip98 104 Messages postés mercredi 23 avril 2003Date d'inscription 29 avril 2008 Dernière intervention - 13 déc. 2004 à 13:33
0
Merci
Pour le point 1 ok.. pas de problème !!! mais pour le point 2 c'est deja plus complex !!!!

Je voudrais dessiner en meme temps le chemin de la souris (si on click sur le bouton gauche) dans un panel ! comment faire pour utiliser la méthode avec CreateGraphics??
Commenter la réponse de bip98
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 13 déc. 2004 à 14:08
0
Merci
avec qqch de ce genre qui dessine un point a chaque déclenchement de l'event MouseMove du panel :

private Graphics m_panelGraphics;
private Bitmap m_pointBmpBlack;

private void panel_Dessin_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
m_panelGraphics = panel_Dessin.CreateGraphics();
}

private void panel_Dessin_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
m_panelGraphics.Dispose();
m_panelGraphics = null;
}

private void panel_Dessin_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
if ( e.Button == MouseButtons.Left )
{
m_panelGraphics.DrawImageUnscaled(m_pointBmpBlack, e.X, e.Y);
}
}


dans le constructeur du form:
m_pointBmpBlack = new Bitmap(1,1);
m_pointBmpBlack.SetPixel(0,0,Color.Black);


explication de la bdouille avec le Bitmap ici : http://www.bobpowell.net/pixel_dot.htm

Cocoricoooooooo !!!!
coq
MVP Visual C#
Commenter la réponse de cs_coq
bip98 104 Messages postés mercredi 23 avril 2003Date d'inscription 29 avril 2008 Dernière intervention - 13 déc. 2004 à 14:27
0
Merci
Merci c'est très sympa de ta part !
Commenter la réponse de bip98
bip98 104 Messages postés mercredi 23 avril 2003Date d'inscription 29 avril 2008 Dernière intervention - 20 déc. 2004 à 13:36
0
Merci
Juste encore deux petites questions ?

Comment fait-on pour dessiner un trais un peu plus larg que celui là?

Et comment doit-on faire pour tout effacer se qui a été dessiner ?
Commenter la réponse de bip98
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 20 déc. 2004 à 14:09
0
Merci
en fait là on ne dessinais pas un trait mais des points
si tu veux garder le dessin de points tu peux faire un Bitmap plus grand
sinon tu n'as qu'a retenir le point precedent et tracer un trait entre celui ci et le point courant avec drawline(et dans ce cas plus besoin du Bitmap

pour effacer, un appel a la methode Invalidate du panel devrait être suffisant

Cocoricoooooooo !!!!
coq
MVP Visual C#
Commenter la réponse de cs_coq
bip98 104 Messages postés mercredi 23 avril 2003Date d'inscription 29 avril 2008 Dernière intervention - 11 janv. 2005 à 14:37
0
Merci
J'ai un petit problème avec ce code source !


Il me met cette erreur à cette ligne:


private void panel_Dessin_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
if ( e.Button == MouseButtons.Left )
{
m_panelGraphics.DrawImageUnscaled(m_pointBmpBlack, e.X, e.Y); //Ici erreur
}
}
Il fait cette erreur quand je clique le bouton droit et gauche en même temps.. ( même erreur si dans la condition je mets: if (( e.Button MouseButtons.Left ) && ( e.Button MouseButtons.Right ))

Il me fait aussi une erreur quand j'enregistre mes coordonnées dans un fichier... bisard...

Erreur: Le projet XX.exe à rencontré une classe d'exeception non gérée System.NullReferenceException.Processus arrêté.

Et il me place sur la ligne en question !! pourquoi ?
Commenter la réponse de bip98
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 11 janv. 2005 à 14:55
0
Merci
ça doit être dû au fait que je libere l'instance de Graphics sur le MouseUp
au lieu de créer/détruire sur Up/Down, crée le Graphics a la création du Form

Cocoricoooooooo !!!!
coq
MVP Visual C#
Commenter la réponse de cs_coq
bip98 104 Messages postés mercredi 23 avril 2003Date d'inscription 29 avril 2008 Dernière intervention - 11 janv. 2005 à 15:43
0
Merci
Ca marche encore moins ! (ou j'ai pas compris exactement)

Dans le down y'avait : m_panelGraphics = panel_Dessin.CreateGraphics();

Que j'ai mis à la création du form !

c'est bien cela ?
Commenter la réponse de bip98
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 11 janv. 2005 à 15:46
0
Merci
euh attends : sur quoi est levée NullReferenceException, m_panelGraphics ou m_pointBmpBlack ?

Cocoricoooooooo !!!!
coq
MVP Visual C#
Commenter la réponse de cs_coq
bip98 104 Messages postés mercredi 23 avril 2003Date d'inscription 29 avril 2008 Dernière intervention - 11 janv. 2005 à 15:55
0
Merci
Alors là bonne question..

Je pourrais te répondre car sur l'erreur il ne l'indique pas ! Il me sélectionne toute la ligne.. et toujours la même..

Si je l'a met en commentaire et que je fais la manip pour faire planté c'est la ligne:
m_panelGraphics.Dispose(); dans le UP qui est visée..

Si je la met en commentaire.. Tout marche... mais plus rien ne s'affiche.. Evidemment..
Commenter la réponse de bip98
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 11 janv. 2005 à 16:08
0
Merci
passe en mode debug et regarde les valeurs de m_panelGraphics et m_pointBmpBlack, tu saura laquelle est null

Cocoricoooooooo !!!!
coq
MVP Visual C#
Commenter la réponse de cs_coq
bip98 104 Messages postés mercredi 23 avril 2003Date d'inscription 29 avril 2008 Dernière intervention - 11 janv. 2005 à 16:24
0
Merci
Debug:

m_pointBmpBlack={Color&, UNKNOWN VALUE, null reference, null reference}
m_panelGraphics=null reference

Le code est comme tu me l'as donné au début !
Commenter la réponse de bip98
bip98 104 Messages postés mercredi 23 avril 2003Date d'inscription 29 avril 2008 Dernière intervention - 11 janv. 2005 à 17:54
0
Merci
Super ! plus aucun bug !
Commenter la réponse de bip98

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.