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

Windows Forms Discussion :

rectangle de selection sur pictureBox


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de salihovic
    Inscrit en
    Février 2007
    Messages
    255
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 255
    Par défaut rectangle de selection sur pictureBox
    salut
    j'aime dessiner un rectangle de selection sur un PictureBox situé dans un panel
    et j'aime que la selection ne dépasse pas le picture box donc la méthode drowreversibleFrame ne marche pas(sinon avec modification)
    et par la suite je veut que ce rectangle soi persistant jusqu'a le prochain click
    (et bien sure ne disparet pas si une forme vient audessus de celle ci)
    merci pour l'aide
    désolé si je pose la meme question deux fois mais l'autre solution ne marche pas

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 700
    Par défaut
    Salut,

    Hum,

    - Je ne vois pas de question(s) (technique(s))...
    - Tu "aimes" et tu "veuX" : ben si tu veux Mais je te ponderais pas un code entier gratos, et je ne ferais pas ton job...
    - Pitié, en plus de l'orthographe, tu massacres même la grammaire.. (j'ai rien compris si tu préfères..)
    - Si c'est la même question, pourquoi un second post?

  3. #3
    Membre éclairé Avatar de salihovic
    Inscrit en
    Février 2007
    Messages
    255
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 255
    Par défaut
    le second post c'est pour dire que la première solution est insuffisante
    et pour bien éclaircir les choses.
    deuxièmment j'ai dis dans l'ancien post que j'ai réussi a faire la selection(rectangle de selection qui parche très bien)
    mais le problème que la méthode drawreversibleframe utilisé dessine sur l'écran et elle n'est pas délimité par la zone du pic en plus si je passe une autre forme au dessu le rectangle de selection disparait
    voici mon code:
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
     
    using System;
    using System.ComponentModel;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Text;
    using System.Windows.Forms;
    using System.Drawing;
     
    namespace test
    {
        public partial class panelli : Panel
        {
            public panelli()
            {
                InitializeComponent();
            }
          public  bool go = false;
            private bool _selecting = false;
            private Point _selectionStartPoint = Point.Empty;
            private Point _selectionEndPoint = Point.Empty;
            private Rectangle _selectionRect = Rectangle.Empty;
     
            private const FrameStyle SELECTION_STYLE = FrameStyle.Dashed;// FrameStyle.Thick;
     
            protected override void OnMouseDown(MouseEventArgs e)
            {
                base.OnMouseDown(e);
     
                if (e.Button == MouseButtons.Left)
                {
                    this._selecting = true;
                    this._selectionStartPoint = this.PointToScreen(new Point(e.X, e.Y));
                    this._selectionEndPoint = Point.Empty;
                    this._selectionRect = Rectangle.Empty;
                }
            }
     
            protected override void OnMouseMove(MouseEventArgs e)
            {
                base.OnMouseMove(e);
     
                if (this._selecting && go)
                {
                    // efface le rectangle de sléection précédent
                    ControlPaint.DrawReversibleFrame(this._selectionRect, this.BackColor, SELECTION_STYLE);
     
                    // calcul du nouveau rectangle
                    this._selectionEndPoint = this.PointToScreen(new Point(e.X, e.Y));
                    this._selectionRect = new Rectangle(
                        this._selectionStartPoint.X,
                        this._selectionStartPoint.Y,
                        this._selectionEndPoint.X - this._selectionStartPoint.X,
                        this._selectionEndPoint.Y - this._selectionStartPoint.Y
                        );
     
                    // dessin du nouveau rectangle
                    ControlPaint.DrawReversibleFrame(this._selectionRect, this.BackColor, SELECTION_STYLE);
                }
            }
     
            protected override void OnMouseUp(MouseEventArgs e)
            {
                base.OnMouseUp(e);
     
                if (this._selecting)
                {
                    // efface le rectangle de sélection
                    ControlPaint.DrawReversibleFrame(this._selectionRect, Color.BlueViolet, SELECTION_STYLE);
                }
     
                this._selecting = false;
                go = false;
            }
     
     
     
        }
    }
    l'adresse du post : http://www.developpez.net/forums/sho...32#post2891332
    si qualqun a une réponse merci

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Par défaut
    Salut

    ici, tu ne dessines ta selection qu'une seule fois, si la form se refraichit, il ne se dessinera plus. Il faut overrider la methode OnPaint, et si il y a une selection (bool ou test sur la selection contre Rectangle.Empty, comme tu veux), tu redessines cette selection.

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 700
    Par défaut
    Citation Envoyé par SirJulio Voir le message
    tu redessines cette selection.
    Tu peux aussi mettre en cache l'image peinte avec la sélection, et tu ne redessines que le rectangle nécessaire (+ de mémoire, mais + rapide)

  6. #6
    Membre éclairé Avatar de salihovic
    Inscrit en
    Février 2007
    Messages
    255
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 255
    Par défaut
    oui je c que pour rendre le rectangle de selecion persistant il faut overrider la méthode onPaint mais mon grand problème c'est quand la selection passe sur des autres controls aussi la selection dépasse le cadre(le pictureBox)
    est ce qu'il y a une manière simple pour éviter ça???
    ou il faut écrire le code par la main???
    c-a-d : il faut faire un override de onPaint oû on écrit g.drawRectangle()
    puis dans les autres méthodes onmouse move et down et up on manipule les positions en limitant la zone(si la souris sorte de la zone de pictureBox on la fait rentrer)
    je pense que c la seule solution mais j'ai cru que par la classe control paint c plus simple il suffit de donner les rectangles de selection et c tt
    mais pour l'autre méthode il faut bien calculer et quand le rectangle s'inverse!!!

    si quelqun peut m'aider par un simple code

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Recupération des selections sur une DBGrille multi Selection
    Par Andry dans le forum Bases de données
    Réponses: 1
    Dernier message: 26/11/2004, 11h43
  2. [SELECT sur 16 millions de lignes] délai très grand
    Par localhost dans le forum Requêtes
    Réponses: 6
    Dernier message: 22/11/2004, 17h04
  3. insert-select sur 2 base différente
    Par gskoala dans le forum Paradox
    Réponses: 2
    Dernier message: 16/11/2004, 15h11
  4. select sur un champ de type LONG
    Par ppd dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/09/2004, 18h19
  5. select sur plusieurs table, question sur jointure
    Par Schulman dans le forum Langage SQL
    Réponses: 7
    Dernier message: 03/09/2004, 13h54

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