![]() |
![]() |
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 SubPrivate 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 SubPrivate 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 SubPrivate 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 SubPrivate Sub Form_Resize() Call HitungSkala 'Hitung skala ketika terjadi perubahan ukuran Form End SubMelakukan koding pada Event Timer
Private Sub Timer_Timer() Call AturJarum 'Atur jarum jam setiap detik End Sub
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 SubPrivate 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