168 Teknik Profesional Photoshop CS - Baca buku sambil ... fileBuku ini ada lah buku yang tepat...

17
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 pemrograman Visual Basic.

Transcript of 168 Teknik Profesional Photoshop CS - Baca buku sambil ... fileBuku ini ada lah buku yang tepat...

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

pemrograman Visual Basic.

121

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.

122

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

123

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

124

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 SetWindowRgn Parent.hWnd, var, True

125

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:

126

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 bumi = CreateEllipticRgn(80, 100, 260, 280)

127

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:

Gambar 8.4 Kontrol form asimetris

128

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)

ScaleMode 3-Pixel

129

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() Dim WindowRegion As Long

130

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

3. Kompilasi dan beri nama sesuai kehendak kita.

131

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.

3. Di jendela kode, ubah semua kata Variant menjadi arah.

132

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

133

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)

134

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" Const m_def_Bergerak = False

135

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 Sub pewaktu()

136

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.