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

  1. #1
    Membre actif Avatar de stolx_10
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juillet 2006
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juillet 2006
    Messages : 374
    Points : 270
    Points
    270
    Par défaut [Windows Form] Dessiner un cadre bord arrondi = OK, répétition du cadre quand la fenetre change = probleme
    Bonjour

    Après avoir parcouru nombre d'exemples, d'explications ...
    J'ai réussi à créer un cadre (rectangle non plein avec bordures visibles) arrondi au chargement de ma fenêtre :

    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
     
            private void dessinerCadre()
            {
                GraphicsPath gp = new GraphicsPath();
                Pen p = new Pen(Color.FromArgb(102, 147, 251), 1);
                Rectangle rt = new Rectangle(10, 70, this.ClientRectangle.Width - 20, 88);
     
                int radius = 15;
     
                gp.AddLine(rt.X + radius, rt.Y, rt.X + rt.Width - (radius * 2), rt.Y);
                gp.AddArc(rt.X + rt.Width - (radius * 2), rt.Y, radius * 2, radius * 2, 270, 90);
                gp.AddLine(rt.X + rt.Width, rt.Y + radius, rt.X + rt.Width, rt.Y + rt.Height - (radius * 2));
                gp.AddArc(rt.X + rt.Width - (radius * 2), rt.Y + rt.Height - (radius * 2), radius * 2, radius * 2, 0, 90);
                gp.AddLine(rt.X + rt.Width - (radius * 2), rt.Y + rt.Height, rt.X + radius, rt.Y + rt.Height);
                gp.AddArc(rt.X, rt.Y + rt.Height - (radius * 2), radius * 2, radius * 2, 90, 90);
                gp.AddLine(rt.X, rt.Y + rt.Height - (radius * 2), rt.X, rt.Y + radius);
                gp.AddArc(rt.X, rt.Y, radius * 2, radius * 2, 180, 90);
                gp.CloseFigure();
     
                System.Drawing.Graphics gr;
                gr = this.CreateGraphics();
     
                gr.DrawPath(p, gp);
            }
    this = Form1.cs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            private void Form1_Paint(object sender, PaintEventArgs e)
            {
                dessinerCadre();
            }
    Le problème est que dès que j'agrandis ma fenêtre, réduis etc etc ... le cadre se redessine sur le précédent et se répète sans disparaître (voir image jointe)

    J'ai lu qu'il fallait utiliser le doublebuffer, mais même avec les explications, ou les exemples, je me retrouve avec une forme avec des gros traits rouges qui barrent toute ma form.

    Quelqu'un peut il m'aider à paramétrer le doublebuffer afin d'éviter le scintillement ?

    Ou supprimer le 1er cadre dessiné avant de dessiner le nouveau ?

    je vous en remercie


    NB : je sais qu'il y a un outil RectangleShape dans le visualBasic PowerPacks, mais je ne préfère pas l'utiliser et rester un maximum avec les outils du Framework 4 (que j'utilise)
    Images attachées Images attachées  

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour stolx_10,

    C'est bien que tu aies dessiné ton cadre seulement lors de l'événement "Paint". Après il faudrait que tu utilises l'objet "Graphics" donné par l'événement "Paint" au lieu de créer ton propre objet "Graphics".

    Essaye ceci :
    Fonction "dessinerCadre" :
    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
    private void dessinerCadre(Graphics gr)
            {
                GraphicsPath gp = new GraphicsPath();
                Pen p = new Pen(Color.FromArgb(102, 147, 251), 1);
                Rectangle rt = new Rectangle(10, 70, this.ClientRectangle.Width - 20, 88);
     
                int radius = 15;
     
                gp.AddLine(rt.X + radius, rt.Y, rt.X + rt.Width - (radius * 2), rt.Y);
                gp.AddArc(rt.X + rt.Width - (radius * 2), rt.Y, radius * 2, radius * 2, 270, 90);
                gp.AddLine(rt.X + rt.Width, rt.Y + radius, rt.X + rt.Width, rt.Y + rt.Height - (radius * 2));
                gp.AddArc(rt.X + rt.Width - (radius * 2), rt.Y + rt.Height - (radius * 2), radius * 2, radius * 2, 0, 90);
                gp.AddLine(rt.X + rt.Width - (radius * 2), rt.Y + rt.Height, rt.X + radius, rt.Y + rt.Height);
                gp.AddArc(rt.X, rt.Y + rt.Height - (radius * 2), radius * 2, radius * 2, 90, 90);
                gp.AddLine(rt.X, rt.Y + rt.Height - (radius * 2), rt.X, rt.Y + radius);
                gp.AddArc(rt.X, rt.Y, radius * 2, radius * 2, 180, 90);
                gp.CloseFigure();
     
                //System.Drawing.Graphics gr;
                //gr = this.CreateGraphics();
     
                gr.DrawPath(p, gp);
            }
    Et pour l'appel dans l'événement Paint :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    private void Form1_Paint(object sender, PaintEventArgs e)
            {
                dessinerCadre(e.Graphics);
            }

  3. #3
    Membre actif Avatar de stolx_10
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juillet 2006
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juillet 2006
    Messages : 374
    Points : 270
    Points
    270
    Par défaut
    Merci

    Effectivement je n'avais pas pensé à utiliser l'ogbjet Graphics de mon évènement paint.

    Y'a du mieux, mais le problème est toujours le même, avec moins de répétitions.
    Images attachées Images attachées  

  4. #4
    Membre actif Avatar de stolx_10
    Homme Profil pro
    Développeur informatique
    Inscrit en
    juillet 2006
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juillet 2006
    Messages : 374
    Points : 270
    Points
    270
    Par défaut
    J'ai trouvé !

    Dans l'évènement _Paint, avant de dessiner mon cadre, j'ai ajouté cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SetStyle(ControlStyles.ResizeRedraw, true);
    Je passe en résolu.

    Merci

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/02/2012, 14h43
  2. Intégration d'un cadre à bord arrondi
    Par -Fly- dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 12/02/2011, 12h41
  3. faire des cadres avec bords arrondis
    Par HF974 dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 27/01/2009, 08h49
  4. Cadre avec bords arrondis extensibles html+css
    Par Sololupa dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 12/05/2008, 23h54

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