IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Tracer dans picture box en suivant la souris


Sujet :

C#

  1. #1
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut Tracer dans picture box en suivant la souris
    Je pensait avec un peu de reflexion resoudre un probleme certainement bien connu.
    Mais ca ne semble pas si simple
    Je fais donc appel a l'experience pour me guider

    J'ai un picture box
    j'aimerais permettre a l'utilisateur de definir un rectangle dans ce pb

    1- je detecte l'event mousedown, je prends un point de reference
    2- A partir de la, l'utilisateur s'il garde le bouton pressé peut deplacer sa souris visualiser le rectangle construit entre le point de reference et sa nouvelle position.
    3- Il lache le bouton et je prends les coordonées du rectangle pour traitement

    Considérant 2 et 3 c'est donc une double condition que je dois gerer : mousemove d'une part et mousedown d'autre part

    en 1 je teste l'event mousedown
    mais comment en 2 je peux lors de l'event mousemove savoir si mouse est aussi down ?
    Et d'une maniere generale avez vous quelques trucs ou astuces sur ce sujet

    Merci beaucoup !
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  2. #2
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    J'ai jamais fais ce genre d'exercice mais tu devrais pouvoir gérer ça en utilisant une variable booléenne...

    Celle-ci passe à true au mouseDown et à false au mouseUp

    dans mouseMove, lorsque ta variable est à true, tu gères ton truc pour dessiner le rectangle.


    Pour les trucs ou astuces sur ce sujet, c'est pas ce qui manque sur le net à mon avis

  3. #3
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut La solution
    Finalement en chipotant j'ai trouvé la methode je la poste donc ca peut servir

    Petit détail : dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     pbDrawRectangle(int X,int Y)
    je trace un caré plutot qu'un rectangle et qu'a cause de ca il y a un petit effet de bord que je n'ai pas éliminé si on passe en coordonée inverse du point d'accrochage (mousedown initial)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
       //**************************************************************************************************
        void pbDrawRectangle(int X,int Y)
        {
          pb_cont.Refresh();
     
          int dX = Math.Abs(X-pRef.X);
          int dY = Math.Abs(Y-pRef.Y);
     
          int Z = Math.Max(dX, dY);
          dX = Z;
          dY = Z;
     
          int rX = pRef.X;
          int rY = pRef.Y;
     
          if (X - pRef.X < 0) rX = X;
          if (Y - pRef.Y < 0) rY = Y; 
     
          Graphics graphics = pb_cont.CreateGraphics();
          graphics.DrawRectangle(Pens.Black, rX, rY, dX, dY);
     
        }
        //**********************************************************************************************
        private void pb_cont_MouseDown(object sender, MouseEventArgs e)
        {
         if (e.Button == MouseButtons.Right)
          {
            pRef.X = e.X;
            pRef.Y = e.Y;
          }
        }
        private void pb_cont_MouseMove(object sender, MouseEventArgs e)
        {
          if (e.Button == MouseButtons.Right)
          {
            pbDrawRectangle(e.X, e.Y);
            return;
          }
        }
        private void pb_cont_MouseUp(object sender, MouseEventArgs e)
        {
          if (e.Button == MouseButtons.Right)
          {
            pbZoom(e.X, e.Y);
            return;
          }
       }
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

Discussions similaires

  1. Winform insérer image dans picture box. Où sont-elles stockées ?
    Par thamesvalley dans le forum Windows Forms
    Réponses: 2
    Dernier message: 09/07/2015, 14h17
  2. Affichage d'image dans picture box
    Par rochdi123 dans le forum ASP.NET
    Réponses: 3
    Dernier message: 12/05/2009, 15h57
  3. affichage graphique dans picture box
    Par zulad dans le forum Windows Forms
    Réponses: 8
    Dernier message: 06/11/2007, 08h44
  4. faire défiler image dans picture box
    Par cd090580 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 13/02/2007, 16h00
  5. dessin losange remplit dans un picture box
    Par scr dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 26/12/2005, 10h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo