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 :
puis carte_Paint :
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
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 Private Sub carte_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles carte.Paint InvokePaintBackground(Me.carte, e) 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é.
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
Encore une fois merci pour votre aide
Partager