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