Tips kali ini kita akan membuat Prosedur Thread untuk membuat Grafik Dynamic Line pada PictureBox dengan menggunakan Visual Basic 2008.Hasilnya seperti gambar di bawah ini:
Ikuti langkah-langkah di bawah ini. Sekarang perhatikan tabel ToolBox yang akan digunakan antaralain:
Rancang/design seperti gambar dibawah ini, lalu Save All dengan nama ThreadGraph.
Setelah itu arahkan kursor Anda pada jendela Solution Explorer , Klik kanan Pada ThreadGraph kemudian Anda pilih Add kemudian pilih Class. Perhatikan gambar di bawah ini.
Setelah itu akan muncul jendela seperti Add New Item. Ganti nama Class1.vb menjadi ThreadGraph. Tekan Add. Perhatikan gambar di bawah ini:
Pada jendela arahkan kursor Anda ke Solution Explorer pada ThreadGraph.vb klik kanan pilih View Code . Ketikkan listing program sebagai berikut:
Public Class ThreadGraph
Public Shared Sub Main()
Application.Run(New Form1)
End Sub
End Class
Arahkan kursor Anda pada Design Form1, Klik kanan pilih View Code. Ketikkan listing program sebagai berikut:
Imports System.Drawing
Imports System.Windows.Forms
Imports System.Math
Imports System.Threading
Public Class Form1
Private m_Ymid As Integer
Private m_Y As Integer
Private Const GRID_STEP As Integer = 40
Private m_GraphThread As Thread
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
m_Ymid = picGraph.ClientSize.Height ’ 2
m_Y = m_Ymid
REM membuat objek grafik
Dim wid As Integer = picGraph.ClientSize.Width
Dim hgt As Integer = picGraph.ClientSize.Height
Dim bm As New Bitmap(wid, hgt)
Dim gr As Graphics = Graphics.FromImage(bm)
REM menggambar/ membentuk pola garis
gr.Clear(Color.Black)
For i As Integer = m_Ymid To picGraph.ClientSize.Height Step GRID_STEP
gr.DrawLine(Pens.GreenYellow, 0, i, wid - 1, i)
Next i
For i As Integer = m_Ymid To 0 Step -GRID_STEP
gr.DrawLine(Pens.GreenYellow, 0, i, wid - 1, i)
Next i
picGraph.Image = bm
End Sub
Private Sub btnGraph_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGraph.Click
If m_GraphThread Is Nothing Then
REM Keadaan fungsi/ prosedur thread. Indikasi ketika di mulai
AddStatus("Starting V. Hutabalian’S Blog"
m_GraphThread = New Thread(AddressOf DrawGraph)
m_GraphThread.Priority = ThreadPriority.BelowNormal
m_GraphThread.IsBackground = True
m_GraphThread.Start()
AddStatus("Dynamic Line Start"
btnGraph.Text = "Stop"
Else
REM fungsi/Prosedur thread pada saat berjalan kemudian berhenti diindikasikan
AddStatus("Stopping V. Hutabalian’S Blog"
m_GraphThread.Abort()
m_GraphThread = Nothing
AddStatus("Dynamic Line stopped"
btnGraph.Text = "Start"
End If
End Sub
Private Sub DrawGraph()
Try
REM ambil nilai random
Dim y As Integer = m_Y
Do
REM ambil nilai random selanjutnya
NewValue()
REM plot nilai random
PlotValue(y, m_Y)
y = m_Y
Loop
Catch ex As Exception
AddStatus("[Thread] " & ex.Message)
End Try
End Sub
Private Delegate Sub PlotValueDelegate(ByVal old_y As Integer, ByVal new_y As Integer
Private Sub PlotValue(ByVal old_y As Integer, ByVal new_y As Integer
REM tampilan grafik garis data random pada prosedur thread
If Me.InvokeRequired Then
REM tampilan plot nilai random lama dan baru
Dim args As Object() = {old_y, new_y}
Dim plot_value_delegate As PlotValueDelegate
plot_value_delegate = AddressOf PlotValue
Me.Invoke(plot_value_delegate, args)
Exit Sub
End If
REM tampilkan bentuk grafik
Dim wid As Integer = picGraph.ClientSize.Width
Dim hgt As Integer = picGraph.ClientSize.Height
Dim bm As New Bitmap(wid, hgt)
Dim gr As Graphics = Graphics.FromImage(bm)
REM geser data nilai random
gr.DrawImage(picGraph.Image, -1, 0)
REM update grafik ditepi sebelah kanan dengan nilai random yang baru
gr.DrawLine(Pens.Black, wid - 1, 0, wid - 1, hgt - 1)
For i As Integer = m_Ymid To picGraph.ClientSize.Height Step GRID_STEP
gr.DrawLine(Pens.GreenYellow, wid - 2, i, wid - 1, i)
Next i
For i As Integer = m_Ymid To 0 Step -GRID_STEP
gr.DrawLine(Pens.GreenYellow, wid - 2, i, wid - 1, i)
Next i
REM Plot pixel grafik garis baru
gr.DrawLine(Pens.LightGreen, wid - 5, old_y, wid - 5, new_y)
REM tampilkan
picGraph.Image = bm
picGraph.Refresh()
gr.Dispose()
End Sub
Private Sub NewValue()
REM berikan jedah waktu setiap pengambilan nilai
Dim stop_time As Date = Now.AddMilliseconds(20)
Do While Now < stop_time
Loop
REM ambil nilai random yang baru
Static rnd As New Random
m_Y += rnd.Next(-4, 5)
If m_Y < 0 Then m_Y = 0
If m_Y >= picGraph.ClientSize.Height - 1 Then m_Y = picGraph.ClientSize.Height - 1
End Sub
REM berikan konfirmasi
Private Delegate Sub AddStatusDelegate(ByVal txt As String
Private Sub AddStatus(ByVal txt As String
If Me.InvokeRequired Then
Dim args As Object() = {txt}
Dim add_status_delegate As AddStatusDelegate
add_status_delegate = AddressOf AddStatus
Me.Invoke(add_status_delegate, args)
Exit Sub
End If
txtStatus.Text &= vbCrLf & txt
txtStatus.Select(txtStatus.Text.Length, 0)
txtStatus.ScrollToCaret()
End Sub
Private Sub tmrUpdateClock_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrUpdateClock.Tick
lblTime.Text = Now.ToString("T"
End Sub
End Class
Setelah itu tekan F5, maka akan muncul tampilan seperti gambar berikut ini.
Tekan Button Start, maka akan tampil seperti gambar di bawah ini.
Tekan Button Stop, maka akan tampil seperti gambar di bawah ini.
Selamat mencoba Guys! Nantikan Tips Aplikasi Cantik Lainnya by Verynandus Hutabalian.
3 komentar:
hi V. Hutabalian
terima kasi buat ilmu na
ada ingin saya tanyakan?
ThreadGraph Dynamic Line ini bisa di buat ke VB 6.0 juga ga?
mohon pencerahan na :)
terimakasi
hi V. Hutabalian
nice info :)
saya pemula di vb dan masi banyak belajar ttg vb
saya mw bertanya, ini threadgraph dynamic line na, bisa di aplikasi kan ke vb 6.0??
mohon pencerahan na :)
Hai Indah.....
Walaupun saya membuat di VB.Net tapi aplikasi ini bisa diterapkan di VB 6.0, tapi mungkin ada perubahan sintaks programnya.. tapi secara garis besar hampir sama ketika kita mengnggunakannya di PlatForn VB 6.0
Posting Komentar