• Tidak ada hasil yang ditemukan

Spesifikasi: Ukuran: 14x21 cm Tebal: 158 hlm Harga: Rp Terbit pertama: April 2005 Sinopsis singkat:

N/A
N/A
Protected

Academic year: 2021

Membagikan "Spesifikasi: Ukuran: 14x21 cm Tebal: 158 hlm Harga: Rp Terbit pertama: April 2005 Sinopsis singkat:"

Copied!
17
0
0

Teks penuh

(1)

Spesifikasi:

Ukuran: 14x21 cm

Tebal: 158 hlm

Harga: Rp 24.800

Terbit pertama: April 2005

Sinopsis singkat:

Dengan memperkenalkan metode-metode pembuatan kontrol ActiveX melalui contoh-contoh

program, buku ini akan memandu Anda hingga mampu membuat kontrol ActiveX secara

profesional. Sekalipun kontrol-kontrol ActiveX yang ditampilkan dalam buku ini bertujuan

memandu penggunanya untuk membuat kontrol ActiveX, sebenarnya kontrol ActiveX di

dalam buku ini dapat digunakan untuk membangun suatu aplikasi yang menarik dan penuh

animasi, contohnya kontrol ActiveX Picturebox Slideshow yang mampu menampilkan

animasi slideshow. Anda juga diajak membuat kontrol ActiveX Form Asimetris yang

memungkinkan Anda memiliki form yang bentuknya beraneka ragam dan dapat diganti-ganti

sesuai dengan selera. Bersama buku ini Anda juga akan dilatih untuk mengembangkan daya

pikir Anda untuk membuat kontrol ActiveX 3 dimensi dan menarik, seperti tombol gambar,

label 3 dimensi ataupun kontrol pendukung form sehingga anda mampu membuat aplikasi

yang indah dan menawan.

Buku ini adalah buku yang tepat untuk dijadikan pegangan untuk mulai berkelana di dunia

ActiveX Visual Basic, bahkan bagi Anda yang baru saja berkenalan dengan dunia

(2)

BAB 8

KONTROL ACTIVEX FORM

Jenis kontrol terakhir yang kita bahas adalah kontrol form, yaitu

kontrol-kontrol yang berfungsi mengubah tampilan form, antara

lain form untuk mengubah bentuk form, memberi warna pada

form, dan kontrol untuk memberi skin seperti halnya program

WinAmp yang dapat diganti-ganti skin-nya. Selamat

mempe-lajarinya dan semoga yang diberikan dalam buku ini bermanfaat.

8.1 Form Berbentuk Elips

Langkah awal yang akan penulis tunjukkan dari manipulasi form

menggunakan kontrol ActiveX adalah membuat form menjadi

berbentuk elips. Di sini kita akan menggunakan 4 fungsi dari API

Windows, yaitu:

CreateEllipticRgn untuk membentuk objek baru berbentuk

elips/bulat.

SetWindowRgn untuk mengubah bentuk form sesuai objek

yang telah kita bentuk sebelumnya.

DeleteObject untuk menghapus objek yang telah kita bentuk

dari fungsi pertama.

CreateRectRgn untuk membentuk objek sesuai bentuk form

semula.

(3)

Cara penulisan CreateEllipticRgn dan CreateRectRgn adalah

sebagai berikut:

Variabel (bertype long) = CreateEllipticRgn(x1, y1, x2, y2)

Variabel (bertype long) = CreateRectRgn(x1, y1, x2, y2)

Keterangan:

x1

= koordinat x pojok kiri atas lingkaran

y1

= koordinat y pojok kiri atas lingkaran

x2

= koordinat x pojok kanan bawah lingkaran

y2

= koordinat y pojok kanan bawah lingkaran

Cara penulisan SetWindowRgn adalah sebagai berikut:

SetWindowRgn(handle, variabel, True)

Handle di sini maksudnya adalah handle dari form ataupun

kontrol lainnya yang akan diubah atau disesuaikan bentuknya

(untuk form yaitu Form.hwnd).

Sintaks untuk DeleteObject adalah:

DeleteObject(variabel).

Oleh karena form kita berubah bentuk menjadi elips, kita akan

kehilangan bar caption dari form sehingga akan menyulitkan kita

untuk menggeser form kita yang tidak memiliki bar caption. Oleh

sebab itu supaya dapat menggesernya maka kita menggunakan 2

fungsi API, yaitu SendMessage untuk mengirim pesan tertentu ke

window untuk suatu memanggil proses tertentu dari Windows dan

fungsi kedua, yaitu ReleaseCapture untuk menimbulkan proses

tombol mouse.

Keuntungan penggunaan ActiveX di sini adalah saat perancangan

program setelah ActiveX ini dimasukkan ke dalam form program

kita maka form sudah dapat terlihat berbentuk elips sehingga kita

(4)

dapat mengatur letak kontrol-kontrol yang lain di dalam form kita

tersebut dalam rangka membuat program EXE seperti gambar

berikut ini.

Gambar 8.1 Kontrol form berbentuk ellips

Adapun cara membuat kontrol ini sangat sederhana sekali. Kita

tidak memerlukan kontrol dari toolbox sama sekali. Di ActiveX

Wizard, buatlah Property baru bernama elips dengan jenis data

Boolean bernilai False.

Masukkan kode-kode berikut ini di jendela kode:

1.

Di bagian General, masukkan keempat fungsi API, yaitu:

Private Declare Function CreateEllipticRgn Lib "gdi32" (ByVal X1 As _

Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) _ As Long

Private Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, _

ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As _

Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As _

Long) As Long

Private Declare Function SendMessage Lib "User32" Alias_ "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, _ ByVal wParam As Long, lParam As Any) As Long

(5)

Private Declare Sub ReleaseCapture Lib "User32" ()

Const WM_NCLBUTTONDOWN = &HA1 Const HTCAPTION = 2

2.

Di bagian Get Elips(), tambahkan:

Atur

sehingga kode selengkapnya menjadi:

Public Property Get Elips() As Boolean Elips = m_Elips

Atur End Property

3.

Di bagian UserControl_InitProperties tambahkan juga:

Atur

sehingga kode selengkapnya menjadi:

Private Sub UserControl_InitProperties() m_Elips = m_def_Elips

Atur End Sub

4.

Masukkan prosedur-prosedur berikut:

Private Sub UserControl_MouseMove(Button As Integer, Shift As Integer,_

X As Single, Y As Single) If Button = 1 Then ReleaseCapture

SendMessage Parent.hWnd, WM_NCLBUTTONDOWN, _ HTCAPTION, 0&

End If End Sub

Private Sub UserControl_AmbientChanged(PropertyName As String)

UserControl.BackColor = Ambient.BackColor End Sub

Private Sub UserControl_Show() Atur

End Sub

Sub Atur()

Dim var As Long Parent.ScaleMode = 3 If m_Elips = True Then Parent.BorderStyle = 0

var = CreateEllipticRgn(30, 30, Parent.ScaleWidth, Parent.ScaleHeight)

Else

Parent.BorderStyle = 2

var = CreateRectRgn(0, 0, Parent.Width, Parent.Height)

End If

(6)

DeleteObject (var) End Sub

5.

Silakan kompilasi. Untuk menggerakkannya, tahan mouse

pada kontrol dan pindahkan ke mana saja.

8.2 Form Bumi dan Bulan

Pengembangan teknik selanjutnya dari teknik di atas adalah

membuat kontrol yang menyebabkan form kita berbentuk seperti

tampilan berikut ini:

Gambar 8.2 Kontrol form berbentuk bumi dan bulan

Untuk membuatnya, kita memerlukan satu lagi fungsi API, yaitu

CombineRgn yang berfungsi menggabungkan region-region yang

telah terbentuk sebelumnya berdasarkan pola tertentu. Aturan

penggunaannya adalah sebagai berikut:

CombineRgn(h, r1, r2, pola)

Keterangan:

h

= region hasil penggabungan yang harus sudah ada

sebelumnya (bisa r1 atau r2)

r1

= region pertama untuk digabungkan

r2

= region kedua untuk digabungkan

pola = mode yang digunakan dalam operasi penggabungan

dan merupakan suatu konstanta, yaitu:

(7)

Konstanta Pola Keterangan (jika r1 menjadi h)

1 RGN_AND Daerah perpotongan antara r1 dan r2

2 RGN_OR Daerah gabungan antara r1 dan r2

3 RGN_XOR Daerah r1 dan r2 yang tidak berpotongan

4 RGN_DIFF Daerah r1 yang tidak berpotongan dengan r2

Untuk lebih jelasnya, lihat ilustrasi berikut ini:

Gambar 8.3 Macam-macam pola proses dalam fungsi CombineRgn

Kembali ke kontrol ActiveX kita, yaitu kontrol form bumi dan

bulan. Cara membuatnya sama dengan yang sebelumnya, yaitu

kontrol form berbentuk elips, hanya saja Property yang baru

dibentuk bernama bulan bukan elips dan di bagian General, kode

yang ditambahkan adalah:

Private Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long

Prosedur Atur-nya berisi kode sebagai berikut:

Sub Atur()

Dim tengah As Long Dim pinggir1 As Long Dim pinggir2 As Long Dim sat As Long Dim satb As Long

Parent.ScaleMode = 3 If m_bulan = True Then

(8)

r1 = CreateEllipticRgn(80, 20, 160, 100) r2 = CreateEllipticRgn(50, 40, 130, 120) sat = CombineRgn(r1, r1, r2, 4)

satb = CombineRgn(bumi, bumi, r1, 2) Else

Parent.BorderStyle = 2

bumi = CreateRectRgn(0, 0, Parent.Width, Parent.Height) End If

SetWindowRgn Parent.hWnd, bumi, True DeleteObject (bumi)

End sub

Keterangan:

Variabel bumi berguna untuk membentuk object bumi, sedangkan

variabel r1 berguna untuk membentuk object bulan berbentuk

bulat. Varibel r2 akan berfungsi membentuk object berbentuk

bulat pula untuk menghilangkan sebagian region (daerah) object

r1 dengan pola Rgn_Diff sehingga object r1 akan berbentuk sabit

dan hasil perpotongannya dimasukkan kembali ke dalam object

r1. Region r1 tersebut kemudian digabungkan dengan region bumi

menggunakan pola Rgn_Or.

8.3 Form Asimetris

Setelah di atas kita bermain-main dengan form yang simetris, kita

akan mengembangkan teknik kita untuk membuat suatu kontrol

yang dapat membuat form kita berbentuk seperti contoh berikut

ini:

(9)

Dengan kontrol ini, kita dapat membuat form kita diganti-ganti

bentuknya. Fasilitas Properties-nya adalah adanya pilihan untuk

mengganti skin form sewaktu diperlukan.

Prinsipnya, setelah gambar dimasukkan ke dalam kontrol maka

kontrol akan mengambil satu titik di gambar yang akan dijadikan

titik transparan, kemudian berdasarkan data tersebut kontrol akan

mengambil titik-titik bukan transparan dan menggabungkannya

menggunakan fungsi CombineRgn pola Rgn_Or dan membentuk

suatu objek. Selanjutnya bentuk parent (form program EXE kita)

akan disesuaikan dengan bentuk tersebut. Contoh gambar

(sebaiknya tipe BMP) yang dimasukkan adalah sebagai berikut:

Gambar 8.5 Gambar yang dimasukkan ke kontrol form asimetris

Adapun acara membuatnya adalah sebagai berikut:

1.

Masukkan 1 Picturebox ke dalam lembar kerja kita. Properties

yang perlu diubah setting-nya adalah sebagai berikut:

Kontrol Properti Setting

UserControl BackStyle 0-Transparant

ScaleMode 3-Pixel

Picture1 BorderStyle 0-None

Picture (Gambar yang akan dijadikan skin)

(10)

2.

Masukkan kode-kode berikut ini:

Private Declare Function GetPixel Lib "gdi32" (ByVal hDC As Long, _

ByVal X As Long, ByVal Y As Long) As Long

Private Declare Function SetWindowRgn Lib "user32" (ByVal hwnd _

As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long

Private Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As _

Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) _ As Long

Private Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn _

As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, _ ByVal nCombineMode As Long) As Long

Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As _

Long) As Long

Private Declare Function SendMessage Lib "User32" Alias_ "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, _ ByVal wParam As Long, lParam As Any) As Long

Private Declare Sub ReleaseCapture Lib "User32" () Const WM_NCLBUTTONDOWN = &HA1

Const HTCAPTION = 2

Public Property Get Picture() As Picture Set Picture = Picture1.Picture Atur

End Property

Public Property Set Picture(ByVal New_Picture As Picture) Set Picture1.Picture = New_Picture

PropertyChanged "Picture" Atur

End Property

Private Sub UserControl_ReadProperties(PropBag As PropertyBag)

Set Picture = PropBag.ReadProperty("Picture", Nothing) Atur

End Sub

Private Sub UserControl_WriteProperties(PropBag As PropertyBag)

Call PropBag.WriteProperty("Picture", Picture, Nothing) Atur

End Sub

Private Sub UserControl_MouseMove(Button As Integer, Shift As Integer,_

X As Single, Y As Single) If Button = 1 Then ReleaseCapture

SendMessage Parent.hWnd, WM_NCLBUTTONDOWN, _ HTCAPTION, 0&

End If End Sub

Sub Atur()

(11)

Parent.Width = Picture1.Width * 15 Parent.Height = Picture1.Height * 15 Parent.BorderStyle = 0

WindowRegion = MakeRegion(Picture1)

SetWindowRgn Parent.hwnd, WindowRegion, True Parent.Refresh

Parent.Picture = Picture1.Picture Parent.Refresh

Parent.Move 0, 0 End Sub

Private Function MakeRegion(Bentuk As PictureBox) As Long Dim X As Long, Y As Long, StartX As Long

Dim Penuh As Long, Garis As Long Dim Transparan As Long

Dim AturReg As Boolean, AturGaris As Boolean Dim hDC As Long

Dim Lebar As Long, Tinggi As Long

‘Thanks to Mr Black Tornado

hDC = Bentuk.hDC

Lebar = Bentuk.ScaleWidth Tinggi = Bentuk.ScaleHeight

AturReg = True: AturGaris = False X = Y = StartX = 0 Transparan = GetPixel(hDC, 0, 0) For Y = 0 To Tinggi - 1 For X = 0 To Lebar - 1

If GetPixel(hDC, X, Y) = Transparan Or X = Lebar Then If AturGaris Then AturGaris = False Garis = CreateRectRgn(StartX, Y, X, Y + 1) If AturReg Then Penuh = Garis AturReg = False Else

CombineRgn Penuh, Penuh, Garis, 2 DeleteObject Garis

End If End If Else

If Not AturGaris Then AturGaris = True StartX = X End If End If Next Next MakeRegion = Penuh End Function

(12)

8.4 Form Gradien

Kita akan membuat kontrol untuk menimbulkan gradiasi warna

pada form, tentu saja dengan banyak pilihan warna, tidak seperti

label gradien yang hanya mempunyai 3 pilihan warna. Tampilan

form setelah diberi kontrol tersebut adalah seperti gambar berikut

ini:

Gambar 8.6 Kontrol form gradien

Pada gambar tersebut terlihat bahwa kontrol ini pun mampu

membuat gradiasi warna secara diagonal. Adapun cara

membuatnya adalah sebagai berikut:

1.

Ubah properti Usercontrol, yaitu agar Autoredraw bernilai True

dan Backstyle bernilai 0 (Transparan).

2.

Jalankan ActiveX Control Interface Wizard:

Buat 3 Properties baru di bagian Create Custom Interface

Members, yaitu awal, akhir dan jenis.

Di bagian Set Attributes, atur agar awal bertipe data

OLE_Color dengan nilai Default VbRed, akhir bertipe data

OLE_Color dengan nilai Default VbBlue dan jenis bertipe

data variant.

(13)

4.

Masukkan kode-kode berikut ini:

Di bagian General:

Enum arah Horizontal Vertikal Diagonal End Enum

Di bagian Get awal, tambahkan kode:

Atur

sehingga kodenya menjadi:

Public Property Get awal() As OLE_COLOR awal = m_Awal

Atur End Property

Di bagian Get akhir, tambahkan kode:

Atur

sehingga kodenya menjadi:

Public Property Get akhir() As OLE_COLOR akhir = m_Akhir

Atur End Property

Di bagian Get jenis, tambahkan kode:

Atur

sehingga kodenya menjadi:

Public Property Get jenis() As arah jenis = m_Jenis

Atur End Property

Di bagian UserControl_InitProperties, tambahkan kode:

Atur

Parent.AutoRedraw = True

sehingga kodenya menjadi:

Private Sub UserControl_InitProperties() m_Awal = m_def_Awal m_Akhir = m_def_Akhir m_Jenis = m_def_Jenis Atur Parent.AutoRedraw = True End Sub

(14)

Di bagian UserControl_ReadProperties dan UserControl_

WriteProperties, tambahkan perintah ini di bagian

ak-hirnya:

Atur

5.

Buat prosedur baru yaitu:

Private Sub UserControl_AmbientChanged(PropertyName As String)

Atur End Sub

Private Sub UserControl_Resize() Atur

End Sub

Private Sub UserControl_Show() Atur

End Sub

Sub Atur()

Dim pembagi As Integer

Dim awal As OLE_COLOR, akhir As OLE_COLOR

Dim ared As Single, agreen As Single, ablue As Single Dim red0 As Integer, green0 As Integer, blue0 As Integer Dim red1 As Integer, green1 As Integer, blue1 As Integer Dim I As Integer

Dim baru As Single

Dim x As Integer, y As Integer awal = m_Awal

akhir = m_Akhir

Parent.Cls

If m_Jenis = Horizontal Then pembagi = Parent.ScaleHeight If m_Jenis = Vertikal Then pembagi = Parent.ScaleWidth If m_Jenis = diagonal Then pembagi =

Sqr(Parent.ScaleHeight ^ 2 _ + Parent.ScaleWidth ^ 2) * 1.4

red0 = awal Mod 256 red1 = akhir Mod 256

ared = (red1 - red0) / pembagi

green0 = (awal And &HFF00FF00) / 256 green1 = (akhir And &HFF00FF00) / 256 agreen = (green1 - green0) / pembagi

blue0 = (awal And &HFFFF0000) / (256 ^ 2) blue1 = (akhir And &HFFFF0000) / (256 ^ 2) ablue = (blue1 - blue0) / pembagi

x = 0 y = 0

For I = 0 To pembagi

baru = RGB(red0 + I * ared, green0 + I * agreen, blue0 + I * ablue)

(15)

If m_Jenis = Horizontal Then Parent.Line (0, I)-(Parent.ScaleWidth,_

I), baru

If m_Jenis = Vertikal Then Parent.Line (I, 0)-(I, Parent.ScaleHeight),_

baru

If m_Jenis = diagonal Then

Parent.Line (0, x)-(y, 0), baru x = x + 1

y = y + 1 End If Next End Sub

Public Sub Refresh() UserControl.Refresh Atur

End Sub

8.5 Form ScreenMate

Pernahkah Anda menemukan program yang form-nya berukuran

kecil dan berpindah-pindah tempatnya secara otomatis di layar

monitar Anda. Terkadang program ini disertai suara dan

terkadang mengganggu pengguna komputer yang tidak tahu cara

mematikan program tersebut karena seringkali program tersebut

tidak mempunyai tampilan di taskbar (Properties Form, yaitu

ShowInTaskbar diset bernilaiFalse). Itulah program ScreenMate.

Adapun cara membuatnya adalah sebagai berikut:

1.

Masukkan 1 timer ke dalam lembar kerja. Properties yang

diubah di dalamnya adalah sebagai berikut:

Kontrol/Usercontrol

Properti

Setting

Usercontrol

BackStyle

0-Transparant

Timer

Enabled

True

Interval

1000

2.

Masukkan kode berikut:

Private Declare Function MoveWindow Lib "user32" (ByVal hwnd As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal bRepaint As Long) As Long Const m_def_Kecepatan = "1000"

(16)

Dim m_Kecepatan As String Dim m_Bergerak As Boolean

Public Property Get Kecepatan() As String Kecepatan = m_Kecepatan

Timer1.Interval = m_Kecepatan End Property

Public Property Let Kecepatan(ByVal New_Kecepatan As String) m_Kecepatan = New_Kecepatan

PropertyChanged "Kecepatan" End Property

Public Property Get Bergerak() As Boolean Bergerak = m_Bergerak

pewaktu End Property

Public Property Let Bergerak(ByVal New_Bergerak As Boolean) m_Bergerak = New_Bergerak

PropertyChanged "Bergerak" End Property

Private Sub Timer1_Timer() Atur

End Sub

Private Sub UserControl_InitProperties() m_Kecepatan = m_def_Kecepatan m_Bergerak = m_def_Bergerak pewaktu

End Sub

Private Sub UserControl_ReadProperties(PropBag As PropertyBag) m_Kecepatan = PropBag.ReadProperty("Kecepatan", m_def_Kecepatan) m_Bergerak = PropBag.ReadProperty("Bergerak", m_def_Bergerak) pewaktu End Sub

Private Sub UserControl_WriteProperties(PropBag As PropertyBag)

Call PropBag.WriteProperty("Kecepatan", m_Kecepatan,_ m_def_Kecepatan)

Call PropBag.WriteProperty("Bergerak", m_Bergerak, m_def_Bergerak)

pewaktu Atur End Sub

Sub Atur()

Dim proc As Long

If m_Bergerak = True Then proc = MoveWindow(Parent.hwnd, _

Rnd * Screen.Width / 15, Rnd * Screen.Height / 15, 300, 200, 1)

End Sub

(17)

If m_Bergerak = True Then Timer1.Enabled = True Else Timer1.Enabled = False End If End Sub

Catatan:

Untuk membuat program ScreenMate, sebaiknya di form kita juga

menggunakan kontrol ActiveX Form asimetris. Gambar yang

digunakan misalnya gambar lalat atau serangga lainnya. Jika

perlu, saat run time program kita diberi suara dengungan atau

suara lainnya sehingga ScreenMate terlihat lebih hidup.

Referensi

Dokumen terkait

Ukuran capaian indikator kinerja persentase pegawai yang lulus diklat non yudisial adalah perbandingan antara Sumber Daya Manusia yang mengikuti diklat non

Telah di uraikan di atas bahwa sikap adalah penilaian (bisa berupa pendapat) seseorang terhadap stimulus atau objek (dalam hal ini adalah masalah kesehatan, termasuk

Penambahan bakteri asam laktat yang di- enkapsulasi dengan matriks pati termodifikasi yaitu pati tapioka asam, pati lintnerisasi dan pati nano- kristalin pada

Berdasarkan hasil observasi awal yang penulis lakukan pada tanggal 20 s/d 24 January 2014 dengan guru bidang studi Geografi di SMA Negeri Kecamatan Rantau Utara dan Rantau

Tendon: jaringan ikat fibrosa (tdk elastis) yang tebal dan berwarna putih yg menghubungkan otot rangka dengan tulang. 14/12/2016

Dari beberapa penelitian yang ada, belum ada penelitian yang berusaha untuk meneliti perusahaan yang terdaftar di Bursa Efek Indonesia dengan kategori perusahaan

Cara lain untuk menentukan adanya air dalam gas adalah dengan titik embun ( dew point ) air. Dew point  adalah temperatur dimana uap mengembun jadi cairan.. Spesikasi

= Sugar k liye shuru akhir 3 bar Darood pak, Surah Qadr aur Kausar 3,3 bar Bismillah k sath parh k pani pe dum kr k.. 3 bar km az km rozana pilaye..sugar kuchh din mae normal ho jaye