Home, Forum diskusi, Chatting, Download


Latihan 2

Judul : Memanfaatkan Shape, Line, dan Timer untuk membuat Jam Analog

Untuk membuat jam analog beberapa hal yang perlu diketahui adalah :

1. Menghitung Besar sudut 1 jam, 1 menit dan 1 detik, dimana :

1 Lingkaran Jam = 360 derajat, maka

1 jam = 30 derajat (360/12)

1 menit = 6 derajat (360/60)

1 detik = 6 derajat (360/60)

2. Mengkonversi Jam menjadi Sudut, dimana :

Jam 1 = 60 derajat

Jam 2 = 30 derajat

Jam 3 = 0 derajat

Jam 4 = - 30 derajat atau 330 derajat

Jam 5 = - 60 derajat atau 300 derajat

Rumus deret aritmatika adalah (n-1) * b + a, dimana n adalah suku, a adalah nilai awal, b adalah beda, maka berdasarkan deret diatas :

b = -30

a = 60

Sehingga dapat dirumuskan menjadi :

(Jam - 1) * -30 + 60

Rumuskan sendiri untuk yang menit dan detik

(Menit - 1) * -6 + 84

(Detik - 1) * -6 + 84

2. Menghitung koordinat Cartesius (x,y) untuk jarum jam, menit dan detik

Untuk menghitung koordinat Cartesius, kita perlu menguraikan suatu koordinat Polar menjadi komponen X dan Y dengan rumus :

X = R Cos sudut

Y = R Sin sudut

Tanamkan pada Form 1 Shape, 3 Line, dan 1 Timer, sehingga menjadi sebagai berikut :

Aturlah masing-masing properti menjadi :

Kontrol Properti Value
Form1 BorderStyle 1 - Fixed Single
Shape1 Name
BackStyle
BackColor
BorderColor
BorderWidth
Visible
Bingkai
1 - Opaque
Atur sendiri
Atur sendiri
Atur sendiri
False
Line1 Name
Visible
JarumJam
False
Line2 Name
Visible
JarumMenit
False
Line3 Name
Visible
JarumDetik
False
Timer1 Name
Interval
Enable
Timer
1000 (1 detik)
True

Pada General Declaration, deklarasikan variabel-variabel berikut :

Option Explicit
Dim PanjangJJam As Integer      'untuk panjang jarum jam
Dim PanjangJMenit As Integer
Dim PanjangJDetik As Integer
Dim PusatX As Integer           'titik pusat jam
Dim PusatY As Integer

Buatlah Sub sebagai berikut :

Sub HitungSkala, berfungsi membuat diameter Bingkai menjadi cocok pada form, menghitung panjang masing-masing jarum, dan menghitung titik pusat bingkai.

Sub HitungSkala()
Bingkai.Top = 0
Bingkai.Left = 0
Bingkai.Height = Me.ScaleHeight                'Hitung diameter bingkai
Bingkai.Width = Me.ScaleWidth
PanjangJJam = (4 / 10 * Me.ScaleHeight) \ 2    'Hitung panjang jarum Jam (40% dari diameter)
PanjangJMenit = (6 / 10 * Me.ScaleHeight) \ 2  ' 60% dari diameter 
PanjangJDetik = (8 / 10 * Me.ScaleHeight) \ 2  ' 80% dari diameter 
PusatX = Me.ScaleWidth \ 2                     'Hitung titik pusat Bingkai
PusatY = Me.ScaleHeight \ 2
End Sub

Sub AturJarumJam, berfungsi menghitung sudut jarum jam berdasarkan waktu komputer, menghitung koordinat cartesius berdasarkan sudut, dan mengeser JarumJam berdasarkan koordinat.

Private Sub AturJarumJam()
Dim JamSekarang As Single
Dim SudutJam As Integer
Dim x, y
JamSekarang = (Now - Int(Now)) * 24          'Ambil waktu dengan membuang bagian tanggal
SudutJam = (JamSekarang - 1) * -30 + 60      'Hitung sudut jam
x = PanjangJJam * Cos(SudutJam * 3.14 / 180) 'Hitung koordinat Cartesius
y = PanjangJJam * Sin(SudutJam * 3.14 / 180)
JarumJam.X1 = PusatX                         'Atur jarum jam
JarumJam.Y1 = PusatY
JarumJam.X2 = PusatX + x
JarumJam.Y2 = PusatY - y
End Sub
Private Sub AturJarumMenit()
Dim WaktuSekarang As Single
Dim MenitSekarang As Integer
Dim SudutMenit As Integer
Dim x, y
WaktuSekarang = (Now - Int(Now)) * 24
MenitSekarang = (WaktuSekarang - Int(WaktuSekarang)) * 60
SudutMenit = (MenitSekarang - 1) * -6 + 84
x = PanjangJMenit * Cos(SudutMenit * 3.14 / 180)
y = PanjangJMenit * Sin(SudutMenit * 3.14 / 180)
JarumMenit.X1 = PusatX
JarumMenit.Y1 = PusatY
JarumMenit.X2 = PusatX + x
JarumMenit.Y2 = PusatY - y
End Sub
Private Sub AturJarumDetik()
Dim WaktuSekarang As Single
Dim DetikSekarang As Integer
Dim SudutDetik As Integer
Dim x, y
WaktuSekarang = (Now - Int(Now)) * 24 * 60
DetikSekarang = (WaktuSekarang - Int(WaktuSekarang)) * 60
SudutDetik = (DetikSekarang - 1) * -6 + 84
x = PanjangJDetik * Cos(SudutDetik * 3.14 / 180)
y = PanjangJDetik * Sin(SudutDetik * 3.14 / 180)
JarumDetik.X1 = PusatX
JarumDetik.Y1 = PusatY
JarumDetik.X2 = PusatX + x
JarumDetik.Y2 = PusatY - y
End Sub
Private Sub AturJarum()
Call AturJarumJam                'Atur Jarum Jam       
Call AturJarumMenit              'Atur Jarum Menit
Call AturJarumDetik              'Atur Jarun Detik
End Sub

Melakukan koding pada Event Load dan Form Resize

Private Sub Form_Load()
Me.Height = 3000             'Atur tinggi Form
Me.Width = 3000              'Lebar
Call HitungSkala             'Hitung Skala
Me.Visible = True
Bingkai.Visible = True       'Buat jadi Visible
Call AturJarum               'Atur jarum
JarumJam.Visible = True      'Buat jadi Visible
JarumMenit.Visible = True
JarumDetik.Visible = True
End Sub
Private Sub Form_Resize()
Call HitungSkala             'Hitung skala ketika terjadi perubahan ukuran Form 
End Sub

Melakukan koding pada Event Timer

Private Sub Timer_Timer()
Call AturJarum               'Atur jarum jam setiap detik
End Sub

Tips : Membuat Form Berbentuk Bulat

Dengan menggunakan fungsi API, anda dapat membuat form berbentuk Bulat sesuai dengan ukuran Jam Analog Diatas, adapun perubahan yang perlu dilakukan adalah :

Atur properti BorderStyle menjadi 0 - None

Tambahkan sebuah module kedalam project anda dan lakukan koding sebagai berikut :

Public Declare Function CreateEllipticRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Public Declare Function SetWindowRgn Lib "user32" (ByVal hwnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long

Public XP As Single
Public yp As Single

Lakukan perubahan koding pada event Form Load dan Form Resize

Private Sub Form_Load()
XP = Screen.TwipsPerPixelX   'Bagian ini yang ditambahkan
yp = Screen.TwipsPerPixelY
Me.Height = 3000             'Atur tinggi Form
Me.Width = 3000              'Lebar
Call HitungSkala             'Hitung Skala
Me.Visible = True
Bingkai.Visible = True       'Buat jadi Visible
Call AturJarum               'Atur jarum
JarumJam.Visible = True      'Buat jadi Visible
JarumMenit.Visible = True
JarumDetik.Visible = True
End Sub
Private Sub Form_Resize()
Dim mFormRegion As Long
Call HitungSkala
mFormRegion = CreateEllipticRgn(Bingkai.Left, Bingkai.Top, Bingkai.Width / XP, Bingkai.Height / yp)
SetWindowRgn Me.hwnd, mFormRegion, False
End Sub

Dibuat  oleh hendra@indoprog.com
Medan - Sumatera Utara
Indonesia