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

VB.NET Discussion :

supprimer un rectangle


Sujet :

VB.NET

  1. #1
    Membre actif
    Inscrit en
    Octobre 2010
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 35
    Par défaut supprimer un rectangle
    Bonsoir à tous,

    J'ai dessiner un rectangle dans un pictureBox en utilisant les instruction suivantes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    myRectangle = New Rectangle(x:=XPosition, y:=0, Width:=Ssale * modules(i).larg, Height:=Ssale * modules(i).haut)
                        myGraphics.DrawRectangle(pen:=myPen, rect:=myRectangle)
                        myGraphics.DrawString(modules(i).nom, drawFont, myBrush, myRectangle.X, myRectangle.Y, drawFormat)

    Comment dois je faire pourque ce rectangle presiste un labes de temps(par exemple il reste 10seconde) puis je le supprime?

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2010
    Messages
    291
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 291
    Par défaut
    Bonjour,

    Pour intervalle de temps je crois qu'un timer c'est pas mal, pour supprimer le rectangle cela dépend de la façon dont vous gérez l'affichage ... la solution la plus simple étant de redessiner le même rectangle avec la couleur de fond du picturebox.

  3. #3
    Membre actif
    Inscrit en
    Octobre 2010
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 35
    Par défaut supprimer u rectangle
    Citation Envoyé par Geo2A Voir le message
    Bonjour,

    Pour intervalle de temps je crois qu'un timer c'est pas mal, pour supprimer le rectangle cela dépend de la façon dont vous gérez l'affichage ... la solution la plus simple étant de redessiner le même rectangle avec la couleur de fond du picturebox.
    s'il vous plait y a t-il une autre solution car mon fond d'écran est une grille .
    N'existe pas une instruction sous VB.net qui permettre ça!!

  4. #4
    Membre chevronné Avatar de Jerede
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mai 2010
    Messages : 271
    Par défaut
    Tu peut sauvegarder l'image avant le dessin de ton rectangle puis la restaurer 10secondes plus tard ; si tu ne dessines rien d'autre durant l'intervalle.
    Où se rapprochant de la solution d'au dessus en prenant en compte la contrainte grille, tu peut mémoriser la couleur de chaque pixel composant ton rectangle, avant qu'il soit dessiner. ( .GetPixel et tu stockes les résultats dans un tableau )

  5. #5
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Bonjour,

    Il serait préférable :
    • de créer dynamiquement un Panel,
    • de l'afficher au-dessus de la PictureBox (panel1.BringToFront() )
    • de déclencher un Timer,
    • dans l'evennt Tick du Timer, de supprimer le panel (panel1.Parent=null).

  6. #6
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut supprimer un rectangle
    bonjour nina7
    est ce que c'est toujours sur le projet bestfit,firstfit que tu veux animer les rectangles desssiner?.Il faut me confirmer si oui ou non.
    bon code...

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2010
    Messages
    291
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 291
    Par défaut
    Bonjour,

    s'il vous plait y a t-il une autre solution car mon fond d'écran est une grille .
    N'existe pas une instruction sous VB.net qui permettre ça!!
    Oui il existe une autre solution et même des autres solutions mais elle ne sont pas simples à mettre en œuvre. Je réponds là encore que cela dépend de la façon dont vous gérez l'affichage.
    Sur la gestion de l'affichage, je gère pour ma part une classe Espacepapier qui contient tous les objets à dessiner et une méthode paint (ou dessine), cette méthode est appelée à chaque refresh du picturebox conteneur. Pour effacer un rectangle il suffit donc de le supprimer de la collection d'objet à dessiner et de rafraîchir l'écran.(on peut être encore plus fin en introduisant les régions de clipping pour ne redessiner que la portion de fenêtre invalidée mais bon ...)
    Une autre méthode pour effacer un rectangle (ou tout autre primitive graphique) consiste à dessiner en mode XOR. Malheureusement la GDI+ ne gère pas les opération de raster donc il vous faut passer par les API32 de la GDI ce qui complexifie un peu la chose. L'API permettant de gérer les rasterop est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Declare Function SetROP2 Lib "gdi32" (ByVal hdc As IntPtr, ByVal nDrawMode As Integer) As Integer
    Avec les constantes suivantes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Private Const R2_COPYPEN = 13
        Private Const R2_XORPEN = 7
    et un exemple de tracer de rectangle à partir de coordonnées obtenues via le pointeur de la souris (en fait coordonnées de périphérique), je vous laisse le soin de regarder dans la MSDN à quoi servent les différentes fonctions non documentées dans ce post, il s'agit de fonctions API32.

    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
    Public Sub RectanglePeriph(ByVal P1 As Point, ByVal P2 As Point, ByVal Coul As Integer, Optional ByVal Mode As Integer = 13)
     
            Dim dummy As Integer
            Dim OldMode As Integer
            Dim OldBrush As Integer
            Dim UseBrush As Integer
            Dim ap(3) As POINTAPI
     
     
            ap(0).x = P1.X
            ap(0).y = P1.Y
            ap(1).x = P1.X
            ap(1).y = P2.Y
            ap(2).x = P2.X
            ap(2).y = P2.Y
            ap(3).x = P2.X
            ap(3).y = P1.Y
     
            SetMetrique()
     
            OldMode = SetROP2(mhdc, Mode)
     
     
            UseBrush = CreateSolidBrush(Coul)
            OldBrush = SelectObject(mhdc, UseBrush)
     
     
            dummy = DPtoLP(mhdc, ap(0), 4)
            dummy = Polygon(mhdc, ap(0), 4)
     
     
            dummy = SelectObject(mhdc, OldBrush)
            dummy = DeleteObject(UseBrush)
            dummy = SetROP2(mhdc, OldMode)
     
            ExitMetric()
        End Sub
    NB: ne tenez pas compte des fonctions SetMetric et ExitMetric qui sont de mon crû elles servent en fait à mapper le DC du pictureBox en mode Metrique et à faire la sauvegarde puis restauration du DC.

  8. #8
    Membre actif
    Inscrit en
    Octobre 2010
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 35
    Par défaut toujours sur le projet bestfit,firstfit
    Citation Envoyé par MABROUKI Voir le message
    bonjour nina7
    est ce que c'est toujours sur le projet bestfit,firstfit que tu veux animer les rectangles desssiner?.Il faut me confirmer si oui ou non.
    bon code...

    Bonjour,

    Oui Mr Mabrouki c toujours avec le même projet j'ai été obligé de le suspendre à causes des contrainte, je t'ai envoyé un message privé mais j'ai pas reçu votre réponse

  9. #9
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut
    bonjour MiNa 7

    bah il y a mille et une facon de supprimer un rectangle.
    Le meme traitement est applicable à un ellipse,ou autre figure en passant par un path.

    les 2 plus simples et expedetives etant de redessiner le rectangle :
    -en lui appliquant la methode rectangle.inflate(0,0)
    -ou de le reinitialiser à rectangle.empty.
    Le meme traitement est applicable à un ellipse,ou autre figure en passant par un path.
    Il faut que ajoutes egalement un petit timer dans ton form.

    voici le code pour effacer le "maudit" rectangle" :

    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
     
    Public Class Form1
        'AJOUTE CE CODE ICI DANS TON FORM  ET PAS AILLEURS  
     
        'duree de persistance
        Dim delaiRectangle As Integer = 500
        Dim chrono As Integer
     
        Dim myRectangle As Rectangle = Rectangle.Empty
        Dim isDrawing As Boolean = False
        Public Sub New()
     
            ' Cet appel est requis par le Concepteur Windows Form.
            InitializeComponent()
     
            ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
     
            'AJOUTE CE CODE POUR DEMARRER LE  TIMER  
            Me.Timer1.Interval = 10 '10 millisecondes
            Me.Timer1.Start()
            'chrono demarre
            chrono = 0
        End Sub
        'AJOUTE UN TIMER  SUR TON FORM ET CE CODE DANS L'EVENT TICK
        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
            chrono = chrono + Timer1.Interval
            If chrono < delaiRectangle Then
                isDrawing = True  ' dessin active
     
                Dim w As Integer = 200
                Dim h As Integer = 150
                myRectangle = New Rectangle(50, 50, w, h)
                Me.PictureBox1.Invalidate()
            Else
                isDrawing = False ' dessin annule
                myRectangle = Rectangle.Empty
                Me.PictureBox1.Invalidate()
            End If
     
        End Sub
     
     
        Private Sub PictureBox1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
            Dim myGraphics As Graphics = e.Graphics
            Dim drawFormat As StringFormat = New StringFormat
            drawFormat.Alignment = StringAlignment.Center
            drawFormat.Trimming = StringTrimming.Character
     
            'AJOUTE CE CODE DANS L'EVENT PAINT DE TON PICTUREBOX
            If isDrawing Then
                e.Graphics.FillRectangle(Brushes.Red, myRectangle)
                e.Graphics.DrawRectangle(Pens.Black, myRectangle)
                myGraphics.DrawString("Nina", Me.PictureBox1.Font, Brushes.Black, myRectangle.X, myRectangle.Y, drawFormat)
     
            Else
                'un rectangle vide - neant
                e.Graphics.FillRectangle(Brushes.Red, myRectangle)
                e.Graphics.DrawRectangle(Pens.Black, myRectangle)
                'un string vide - neant
                myGraphics.DrawString("", Me.PictureBox1.Font, Brushes.Black, myRectangle.X, myRectangle.Y, drawFormat)
     
            End If
     
     
        End Sub
     
     
    End Class
    bon code......................

Discussions similaires

  1. supprimer les petits rectangles au moment des sauts de lignes
    Par huître dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/04/2011, 16h52
  2. Réponses: 6
    Dernier message: 30/01/2008, 21h05
  3. Réponses: 9
    Dernier message: 06/11/2007, 12h36
  4. Supprimer un élément d'un tableau
    Par CaptainChoc dans le forum Langage
    Réponses: 15
    Dernier message: 23/12/2002, 23h14
  5. [VB6] Supprimer un enregistrement dans une ListView ??
    Par Argonz dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/11/2002, 09h37

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