Pointeur souris position [Résolu]

Signaler
Messages postés
104
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
29 avril 2008
-
Messages postés
104
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
29 avril 2008
-
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)

15 réponses

Messages postés
6352
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
82
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#
Messages postés
6352
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
82
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#
Messages postés
104
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
29 avril 2008
1
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??
Messages postés
6352
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
82
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#
Messages postés
104
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
29 avril 2008
1
Merci c'est très sympa de ta part !
Messages postés
104
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
29 avril 2008
1
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 ?
Messages postés
6352
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
82
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#
Messages postés
104
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
29 avril 2008
1
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 ?
Messages postés
6352
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
82
ç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#
Messages postés
104
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
29 avril 2008
1
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 ?
Messages postés
6352
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
82
euh attends : sur quoi est levée NullReferenceException, m_panelGraphics ou m_pointBmpBlack ?

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
104
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
29 avril 2008
1
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..
Messages postés
6352
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
82
passe en mode debug et regarde les valeurs de m_panelGraphics et m_pointBmpBlack, tu saura laquelle est null

Cocoricoooooooo !!!!
coq
MVP Visual C#
Messages postés
104
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
29 avril 2008
1
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 !
Messages postés
104
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
29 avril 2008
1
Super ! plus aucun bug !