miska59
Messages postés6Date d'inscriptiondimanche 12 mars 2017StatutMembreDernière intervention 8 janvier 2022
-
6 janv. 2022 à 13:30
Whismeril
Messages postés18977Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention17 mars 2024
-
8 janv. 2022 à 14:35
Bonjour, j'arrive pas à le rendre Draw Sine Wave Animé.
voici en image :
mon code :
Public Class Wave : Inherits Control
Private _waveSleep As Integer = 50
Public Property WaveSleep As Integer
Get
Return _waveSleep
End Get
Set(ByVal value As Integer)
If value <= 0 Then Return
_waveSleep = value
If timer IsNot Nothing Then
timer.Enabled = False
timer.Interval = value
timer.Enabled = True
End If
End Set
End Property
Private _waveWidth As Integer = 200
Public Property WaveWidth As Integer
Get
Return _waveWidth
End Get
Set(ByVal value As Integer)
_waveWidth = value
LeftX = value * -1
End Set
End Property
Private _waveHeight As Integer = 10
Public Property WaveHeight As Integer
Get
Return _waveHeight
End Get
Set(ByVal value As Integer)
'If value < 6 OrElse value > 20 Then Return
_waveHeight = value
End Set
End Property
Private WithEvents timer As New Timer()
Private LeftX As Integer = 0
Public Sub New()
Me.SetStyle(ControlStyles.OptimizedDoubleBuffer Or ControlStyles.UserPaint, True)
timer.Interval = _waveSleep
AddHandler timer.Tick, AddressOf timer_Tick
AddHandler Me.VisibleChanged, AddressOf Wave_VisibleChanged
End Sub
Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
MyBase.OnPaint(e)
Dim rect As New Rectangle(0, 0, Me.Width, Me.Height)
Dim g As Graphics = e.Graphics
g.SmoothingMode = Drawing2D.SmoothingMode.AntiAlias
g.DrawRectangle(Pens.Black, New Rectangle(rect.X, rect.Y, rect.Width - 1, rect.Height - 1))
Dim points As New List(Of PointF)
Dim _intX As Integer = LeftX
Dim y_offset As Integer = CInt(rect.Height / 2)
points.Add(New Point(_intX, rect.Height))
Dim x_scale As Single = CSng(_waveHeight * Math.PI / (_intX - _waveWidth))
For x As Integer = 0 To rect.Width - 1
Dim y As Single = CSng((y_offset + _waveHeight * Math.Sin(x * x_scale)))
points.Add(New Point(x, y))
Next
g.DrawLines(New Pen(Brushes.Blue), points.ToArray)
End Sub
Private Sub timer_Tick(sender As Object, e As EventArgs)
LeftX -= 10
If LeftX = _waveWidth * -2 Then LeftX = _waveWidth * -1
Me.Refresh()
End Sub
Private Sub Wave_VisibleChanged(sender As Object, e As EventArgs)
timer.Enabled = Me.Visible
End Sub
End Class