Pointeur souris position

Résolu
bip98 Messages postés 104 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 29 avril 2008 - 13 déc. 2004 à 11:00
bip98 Messages postés 104 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 29 avril 2008 - 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)

15 réponses

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
11 janv. 2005 à 16:51
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#
3
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
13 déc. 2004 à 11:46
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#
0
bip98 Messages postés 104 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 29 avril 2008 1
13 déc. 2004 à 13:33
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??
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
13 déc. 2004 à 14:08
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#
0

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

Posez votre question
bip98 Messages postés 104 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 29 avril 2008 1
13 déc. 2004 à 14:27
Merci c'est très sympa de ta part !
0
bip98 Messages postés 104 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 29 avril 2008 1
20 déc. 2004 à 13:36
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 ?
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
20 déc. 2004 à 14:09
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#
0
bip98 Messages postés 104 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 29 avril 2008 1
11 janv. 2005 à 14:37
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 ?
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
11 janv. 2005 à 14:55
ç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#
0
bip98 Messages postés 104 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 29 avril 2008 1
11 janv. 2005 à 15:43
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 ?
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
11 janv. 2005 à 15:46
euh attends : sur quoi est levée NullReferenceException, m_panelGraphics ou m_pointBmpBlack ?

Cocoricoooooooo !!!!
coq
MVP Visual C#
0
bip98 Messages postés 104 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 29 avril 2008 1
11 janv. 2005 à 15:55
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..
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
11 janv. 2005 à 16:08
passe en mode debug et regarde les valeurs de m_panelGraphics et m_pointBmpBlack, tu saura laquelle est null

Cocoricoooooooo !!!!
coq
MVP Visual C#
0
bip98 Messages postés 104 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 29 avril 2008 1
11 janv. 2005 à 16:24
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 !
0
bip98 Messages postés 104 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 29 avril 2008 1
11 janv. 2005 à 17:54
Super ! plus aucun bug !
0
Rejoignez-nous