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
15277
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
26 juillet 2022
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
15277
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
26 juillet 2022
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
15277
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
26 juillet 2022
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