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 :

probleme de scintillement (le retour!)


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 117
    Par défaut probleme de scintillement (le retour!)
    Bonjour,

    je suis de retour avec le problème de scintillement qui persiste.

    j'ai exposé mon problème la semaine dernière mais le message posté a disparu suite aux problèmes du serveur (j'avais aussi posté un message du même type en octobre). c'est pas grave, je vais réexpliquer.

    voilà, j'ai un Panel contenant une image (la carte du monde pour être exact). Dans ce panel, j'ai mis un PictureBox qui s'appelle "carte" pour me permettre de dessiner des courbes toutes simples par dessus la carte du monde. J'ai donc mis comme propriété du picturebox un fond transparent

    Les courbes en question sont en fait plein de petites lignes mises bout à bout, et varient au cours du temps : chacune de ces petites lignes se déplace de quelques pixels. Ce que je fais c'est un rafraichissement des courbes toutes les 5 ou 10 secondes par exemple.

    J'ai testé les réponses qui m'ont été proposées mais cela ne marche pas malheureusement...

    voici les éléments de code dédiés au tracé et au rafraichissement, tels que l'on m'a conseillé de le faire :

    tout d'abord le New :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        Public Sub New()
     
            ' Cet appel est requis par le Concepteur Windows Form.
            InitializeComponent()
     
            ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
            buffer = System.Drawing.BufferedGraphicsManager.Current.Allocate(carte.CreateGraphics, carte.ClientRectangle)
        End Sub
    puis carte_Paint :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Private Sub carte_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles carte.Paint
            InvokePaintBackground(Me.carte, e)
        End Sub
    L'affichage de la courbe qui n'est exécuté que toutes les 5 secondes :
    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
     
        Public buffer As BufferedGraphics
        Sub affichage_courbe()
     
            Dim bsat0, bsat1, i, ils, lsat0, lsat1, lsat2, lsat3 As Integer
            Dim ligne() As String
     
            ' Lecture du fichier contenant les coordonnees
            Dim sr As New StreamReader(dir_out & "\coordonnees")
            ligne = Split(sr.ReadLine)
            lsat0 = Val(ligne(0))
            bsat0 = Val(ligne(1))
     
            For i = 1 To 360
                ligne = Split(sr.ReadLine)
                lsat1 = Val(ligne(0))
                bsat1 = Val(ligne(1))
                lsat2 = lsat0
                lsat3 = lsat1
     
                ' La carte du monde fait 800 x 400 pixels
                If Abs(lsat1 - lsat0) > 400 Then
                    ' Si on est au bord de la carte
                    If lsat1 > lsat0 Then lsat2 += 800 Else lsat3 += 800
                    ils = i
                End If
     
                With buffer.Graphics
                    .DrawLine(Pens.LightBlue, lsat2, bsat0, lsat3, bsat1)
     
                    If ils = i Then
                        lsat2 -= 800
                        lsat3 -= 800
                        .DrawLine(Pens.LightBlue, lsat2, bsat0, lsat3, bsat1)
                        ils = 0
                    End If
     
                    lsat0 = lsat1
                    bsat0 = bsat1
                End With
            Next
            buffer.Render()
     
            sr.Close()
        End Sub
    Le problème c'est que le fond du Picture Box "carte" est devenu opaque (on ne voit plus la carte du monde, ou alors il fait nuit partout sur Terre!!!) et la courbe n'est pas rafraichie : je veux dire par là que le tout premier tracé reste affiché et les suivants se superposent et se décalent petit à petit au cours du temps par rapport à ce premier tracé.

    Encore une fois merci pour votre aide

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    au début de ton dessin, tu peux faire buffer.graphics.clear(couleur) pour appliquer une couleur de fond

    et il faut surement déssiner ta carte en premier, buffer.graphics.drawimage()

    si ta carte est sur un control en dessous, il faut faire me.invokepaintbackground en spécifiant le graphics de ton buffer
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 117
    Par défaut
    merci pour ta réponse

    j'ai essayé ce que tu as proposé mais les symptômes restent les mêmes : le fond du PictureBox qui au début est transparent devient opaque. La courbe est tracée mais pas rafraichie (le tout premier dessin reste affiché)

    est-ce que je m'y prends mal? (cf code donné plus haut)

    merci

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    il faut faire un render sur le graphics donné dans l'event paint, après avoir fait le invokepaintbackround sur le graphics du buffer

    c'est censé marché, t'es pas le premier à demander ca ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 117
    Par défaut
    merci de ton aide, mais je n'arrive pas à me dépatouiller avec ce pb : soit j'ai la carte sans courbe, soit la carte est opaque.

    je pense que je vais créer un projet simplifié contenant le problème de scintillement et je le mettrai en fichier joint (quand j'aurai le temps de le faire!)

    a+

  6. #6
    Membre chevronné
    Avatar de Ogotcha
    Inscrit en
    Juillet 2008
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Juillet 2008
    Messages : 232
    Par défaut
    J'ai un peu le même problème j'ai un picture box qui est en mouvement dans ma form qui elle a une image de fond mais dans mon picture box c'est une image .png avec un fond transparent et donc lors de certain mouvement de cette picturebox j'ai un trait blanc qui apparait mais disparait au prochaine tick de mon timer qui s'occupe de faire bouger ma picturebox.

    Et je ne trouve pas de solution non plus à mon souci
    Mon Blog
    FAQs DotNet
    Fonction utile : Recherche

Discussions similaires

  1. probleme de scintillation
    Par john stedd dans le forum VB.NET
    Réponses: 5
    Dernier message: 02/10/2007, 09h51
  2. [GIF] probleme de scintillement
    Par fantomasmusic dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 08/06/2007, 18h40
  3. RegExp : Problem avec ajout de retour a la ligne
    Par Roming22 dans le forum Linux
    Réponses: 3
    Dernier message: 12/01/2006, 19h44
  4. [Control] Problemes de scintillement sur control perso
    Par Clorish dans le forum Composants VCL
    Réponses: 4
    Dernier message: 07/07/2005, 14h55
  5. Réponses: 8
    Dernier message: 02/04/2004, 17h31

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