Graphic et réticule

babe59 Messages postés 189 Date d'inscription vendredi 28 mai 2004 Statut Membre Dernière intervention 27 novembre 2015 - 24 nov. 2010 à 11:28
Shaolyne Messages postés 155 Date d'inscription jeudi 12 mai 2005 Statut Membre Dernière intervention 8 mars 2011 - 24 nov. 2010 à 16:08
Bonjour,
je dessine une image dans une picture box (pic1) et j'aimerai affficher un réticule sur le pointeur de la souris lorsque je me déplace dans cette image. j'ai donc dessiné une pictureBox pour la ligne horizontale (picH) du réticule et une pour la ligne verticale(picV).
j'ai ensuite déplacé mes lignes picH et picV en fonction de la position de la souris dans l'évent pic1_MouseMove.

Mon problème : Si la souris se déplace dans pic1 (sans toucher picH et pivV) tout est ok. Par contre lorsque la souris se déplace sur l'un des deux traits (H ou V) d emon réticule, l'évent MouseMove de mon image (pic1) n'est pas déclenché. Le réticule ne se déplace donc pas.
j'ai donc essayé de mettre des events MouseMove sur mes picH et picV mais les 3 events MouseMouve s'appelle eux même....

Y a t il un solution ?


DT

9 réponses

BunoCS Messages postés 15477 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 30 mai 2024 103
24 nov. 2010 à 11:42
Yo,
Pourquoi tu ne changes pas directement la forme du pointeur? Cursor.Cross par exemple...

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Rejoignez mon réseau professionnel sur Viadeo
0
Shaolyne Messages postés 155 Date d'inscription jeudi 12 mai 2005 Statut Membre Dernière intervention 8 mars 2011 1
24 nov. 2010 à 13:05
Et si tu veux changer l'aspect de ton curseur avec une image, voici un lien qui peut t'intéresser: Changer l'aspect du curseur.

Shao.
0
babe59 Messages postés 189 Date d'inscription vendredi 28 mai 2004 Statut Membre Dernière intervention 27 novembre 2015
24 nov. 2010 à 13:45
mon réticule doit occuper toute la largueur et toute la longueur de mon picturebox

DT
0
Shaolyne Messages postés 155 Date d'inscription jeudi 12 mai 2005 Statut Membre Dernière intervention 8 mars 2011 1
24 nov. 2010 à 13:54
Euh... Je ne suis pas certain de bien comprendre...
Peux-tu fournir une image du résultat attendu ?

Pour info, ce que Bruno et moi même te proposons consiste à supprimer tes 2 pictureboxes (H & V) et changer l'apparence de ton curseur à la place.

Shao.
0

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

Posez votre question
BunoCS Messages postés 15477 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 30 mai 2024 103
24 nov. 2010 à 14:05
En fait, il voudrait que la barre horizontale (resp. verticale) prenne toute la largeur (resp. hauteur).
Une solution consiste à dessiner les lignes, plutôt que d'utiliser des images...

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Rejoignez mon réseau professionnel sur Viadeo
0
babe59 Messages postés 189 Date d'inscription vendredi 28 mai 2004 Statut Membre Dernière intervention 27 novembre 2015
24 nov. 2010 à 15:53
Buno a compris ma demande.

Si je dessine des lignes. comment les faire disparaître pour en dessiner des nouvelles (déplacement de la souris) ?

DT
0
Shaolyne Messages postés 155 Date d'inscription jeudi 12 mai 2005 Statut Membre Dernière intervention 8 mars 2011 1
24 nov. 2010 à 15:58
Tu peux utiliser un code comme ceci:
Pointeur previousPointer = null;

private class Pointeur
{
    public Point StartPointL1 { get; set; }
    public Point EndPointL1 { get; set; }
    public Point StartPointL2 { get; set; }
    public Point EndPointL2 { get; set; }
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
    Pointeur newPointer = new Pointeur();
    newPointer.StartPointL1 = PointToScreen(new Point(pictureBox1.Location.X, pictureBox1.Location.Y + e.Y));
    newPointer.EndPointL1 = PointToScreen(new Point(pictureBox1.Location.X + pictureBox1.Width, pictureBox1.Location.Y + e.Y));
    newPointer.StartPointL2 = PointToScreen(new Point(pictureBox1.Location.X + e.X, pictureBox1.Location.Y));
    newPointer.EndPointL2 = PointToScreen(new Point(pictureBox1.Location.X + e.X, pictureBox1.Location.Y + pictureBox1.Height));

    if (previousPointer != null)
    {
        if (newPointer.StartPointL1.Y != previousPointer.StartPointL1.Y)
        {
            ControlPaint.DrawReversibleLine(previousPointer.StartPointL1, previousPointer.EndPointL1, Color.Red);
            ControlPaint.DrawReversibleLine(newPointer.StartPointL1, newPointer.EndPointL1, Color.Red);

            previousPointer.StartPointL1 = newPointer.StartPointL1;
            previousPointer.EndPointL1 = newPointer.EndPointL1;
        }

        if(newPointer.StartPointL2.X != previousPointer.StartPointL2.X)
        {
            ControlPaint.DrawReversibleLine(previousPointer.StartPointL2, previousPointer.EndPointL2, Color.Red);
            ControlPaint.DrawReversibleLine(newPointer.StartPointL2, newPointer.EndPointL2, Color.Red);

            previousPointer.StartPointL2 = newPointer.StartPointL2;
            previousPointer.EndPointL2 = newPointer.EndPointL2;
        }
    }
    else
    {
        ControlPaint.DrawReversibleLine(newPointer.StartPointL1, newPointer.EndPointL1, Color.Red);
        ControlPaint.DrawReversibleLine(newPointer.StartPointL2, newPointer.EndPointL2, Color.Red);

        previousPointer = newPointer;
    }
}


Par contre, il faudra optimiser le code... Il fonctionnel mais bien bien lent... :(

Shao.
0
BunoCS Messages postés 15477 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 30 mai 2024 103
24 nov. 2010 à 16:01
Pourquoi ne pas ré-afficher l'image, puis la nouvelle position du réticule?

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Rejoignez mon réseau professionnel sur Viadeo
0
Shaolyne Messages postés 155 Date d'inscription jeudi 12 mai 2005 Statut Membre Dernière intervention 8 mars 2011 1
24 nov. 2010 à 16:08
Selon la méthode, ça va flashouiller :)
En faisant un Invalidate, l'image va être re-dessinée et là, c'est le drame...
Une autre solution consiste a prendre l'image de base, dessiner le réticule et afficher la nouvelle image dans le pictureBox à chaque mouvement... Cependant, la taille de l'image risque de poser problème...

Shao.
0
Rejoignez-nous