Windows Region
Di Susun Oleh: Nieko W Akhmad Shohib Alfiyan Chandra Adi K 0834015002 0834015008 0834015014 0834015021
JURUSAN TEKNIK INFORMATIKA FAKULTAS TEKNIK INDUSTRI UNIVERSITAS PEMBANGUNAN NASIONAL VETERAN JATIM 2010
Dalam bab ini akan membahas masalah Control Activex pada form, dimana nanti dijelaskan mengenai jenis-jenis manipulasi form, cara penerapannya pada form, beserta contoh program sehingga tampilan form bisa menarik.
1.1 Sejarah
Region adalah wilayah/daerah pada form dalam Windows. Manipulasi region pada Visual Basic ini menggunakan Library Gdi32.dll, didalam library Gdi32.dll, menyediakan API untuk memanipulasi region seperti: membuat region kotak, elips, polygon,
Tujuan
dsb.
Selain
membuat
region,
Library
ini
juga
bisa
untuk
menggabungkan antara region yang satu dengan yang lain. Manipulasi form ini pada dasarnya bertujuan membentuk form selain Setelah mempelajari bab ini, mahasiswa diharapkan mampu: Memahami tentang Control Activex Form. Mengetahui macam-macam Control Activex Form. Mengimplementasikan Control Activex terhadap form yang dibuat. Mampu membuat program yang dependencies terhadapt runtime tersebut. 1.2 Windows Form Region API manipulation region terbagi menjadi beberapa function untuk memanipulasi sebuah form yang mana setiap fungsi memiliki fungsi yang berbeda, jenis-jenisnya yaitu: bentuk default dari windows. Dengan API region ini kita bisa menciptakan style form yang berbeda.
CombineRgn CreateEllipticRgn CreateEllipticRgnIndirect CreatePolygonRgn CreatePolyPolygonRgn CreateRectRgn CreateRectRgnIndirect CreateRoundRectRgn OffsetRgn PathToRegion PtlnRegion
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 : 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
Pembahasan pertama dalam manipulasi form ini kita akan 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.
maka form sudah dapat terlihat berbentuk elips sehingga kita dapat mengatur letak kontrol-kontrol yang lain di dalam form kita tersebut dalam rangka membuat program EXE seperti gambar berikut ini. 1.3 Combine Region Pengembangan teknik selanjutnya dari teknik di atas adalah membuat kontrol yang menyebabkan form kita berbentuk seperti tampilan berikut ini: Untuk membuatnya, kita memerlukan satu lagi fungsi API, yaitu CombineRgn yang berfungsi menggabungkan region-region yang telah terbentuk sebelumnya berdasarkan pola tertentu. Aturan penggunaannya
Gambar 1. Form Berbentuk Ellips
adalah sebagai berikut: CombineRgn(h, r1, r2, pola) (italic) 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. Macam-macam pola proses dalam fungsi CombineRgn
3. http://id.wikipedia.org/w/index.php?title=Window_region,
Oktober 2010, 14.40 pm
09
1.
Buatlah manipulasion region menggunakan Visual Basic 6 dengan region sesuai dengan gambar dibawah ini,
REFERENSI
Berikut
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 CreateEllipticRgn Lib "gdi32" Private Type COORD ByVal Y1 As Long, ByVal X2 As (ByVal X1 As Long, x As ByVal Long, Long Y2 As Long) As Long y As Long Private Declare Function CreateRectRgn Lib "gdi32" End Type As Long, ByVal Y1 As Long, ByVal X2 As (ByVal X1 Private ByValPOINTAPI Long, Type Y2 As Long) As Long x As Long Private Declare Function CreateRoundRectRgn Lib y As Long "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal End Type X2 As Long, ByVal Y2 As Long, ByVal X3 As Long, Private Sub Form_DblClick() ByVal Y3 As Long) As Long 'Untuk menutup form1 CreatePolygonRgn Private Declare Functionketika didobel klik Lib End "gdi32" (lpPoint As Any, ByVal nCount As Long, ByVal End Sub nPolyFillMode As Long) As Long Private Sub Form_Load() CreatePolyPolygonRgn Lib Private Declare Function 'bendera luar "gdi32" (lpPoint As POINTAPI, lpPolyCounts As Long, a0 = CreateRectRgn(0, 100, 999, 500) ByVal nCount As Long, ByVal nPolyFillMode As Long) a1 = CreateEllipticRgn(-30, 60, 450, 200) As Long a2 = CreateEllipticRgn(430, 5, 1000, 170) Private Declare Function SetWindowRgn Lib "user32" (ByVal hwnd As Long, ByVal hRgn As Long, ByVal nKoor = 3 bRedraw As Boolean) As Long segi_a3(1).x = 450 Private Declare Sub ReleaseCapture Lib "user32" () segi_a3(1).y = 60 segi_a3(2).x = 420 Const ALTERNATE = 1 ' ALTERNATE and WINDING are segi_a3(2).y = 94 Const WINDING = 2 ' constants for FillMode. segi_a3(3).x To 3) Dim segi_a3(1= 470 As COORD, nKoor As Long, a3 As segi_a3(3).y = 130 Long ' Creates region to fill with color. Dim bintang1(1 To 3) As COORD, ns3a As Long, a3 = As Long segi3aCreatePolygonRgn(segi_a3(1), nKoor, ALTERNATE) Dim bintang2(1 To 3) As COORD, nBtg As Long, btg2 a4 = CreateEllipticRgn(-30, 440, 453, 580) As Long a5 bintang3(1 To 3) As COORD, 1000, 575) Dim = CreateEllipticRgn(450, 430,nBtg3 As Long, btg3 'lubang dalam sebelah kiri As Long a6 pl(1 To 3) As COORD, npl As 440, p_l As Dim = CreateEllipticRgn(-30, 130,Long, 230) Long a7 pel(1 To 3) As COORD, npel As Long, pe_l Dim = CreateEllipticRgn(-30, 170, 440, 270) As a8 = Long CreateEllipticRgn(-30, 350, 440, 450) a9 pele(1 To 3) As COORD, npele As 490) Dim = CreateEllipticRgn(-30, 390, 440,Long, pe_le As a10 = CreateRectRgn(0, 100, 80, 420) b1 = CreateRectRgn(80, 150, 130, 380)
'lubang b2 = b3 = b4 = b5 = b6 = b7 =
dalamnBtg3 = 3 sebelah kanan CreateEllipticRgn(420, 100, 970, 270) bintang3(1).x = 220 CreateEllipticRgn(420, 60, 970, 230) bintang3(1).y = 320 CreateEllipticRgn(420, 310, 970, 490) bintang3(2).x = 320 CreateEllipticRgn(420, 260, 900, 450) bintang3(2).y = 320 CreateRectRgn(900, 150, 1000, 500) bintang3(3).x = 270 CreateRectRgn(850, 220, 900, 450) bintang3(3).y = 290 btg3 = CreatePolygonRgn(bintang3(1), nBtg3, ALTERNATE)
'variasi b8 = CreateRectRgn(940, 180, 960, 490) 'Yin & Yang kotak_a = CreateRectRgn(60, 100, 170, 120) 300, 700, 400) yinyang = CreateEllipticRgn(600, kotak_b = CreateRectRgn(780, 510, 880, 340, 680, 410) yin = CreateEllipticRgn(630, 530) circle_a = CreateEllipticRgn(200, 80, 240, 120) yin1 = CreateRectRgn(580, 300, 645, 400) circle_b = CreateEllipticRgn(700, 510, 740, 300, 680, 350) yang = CreateEllipticRgn(630, 550) elips_a = CreateEllipticRgn(270, 90, 330, 110) elips_b = CreateEllipticRgn(560, 520, 680, 540) 'penghalus lengkungan npl = 3 'bintang pl(1).x = 415 ns3a = 3 pl(1).y = 195 bintang1(1).x = 275 430 pl(2).x = bintang1(1).y = 290 195 pl(2).y = bintang1(2).x = 200 440 pl(3).x = bintang1(2).y = 240 215 pl(3).y = bintang1(3).x = = CreatePolygonRgn(pl(1), npl, ALTERNATE) p_l 350 bintang1(3).y = 240 npel = 3 segi3a = CreatePolygonRgn(bintang1(1), ns3a, pel(1).x = 424 ALTERNATE) pel(1).y = 382
pel(2).x = 428 nBtg = 3 pel(2).y = 375 bintang2(1).x = 270 = 440 pel(3).x bintang2(1).y = 200 = 392 pel(3).y bintang2(2).x = 220 pe_l = CreatePolygonRgn(pel(1), npel, ALTERNATE) bintang2(2).y = = 3 npele 320 bintang2(3).x = 320 = 420 pele(1).x bintang2(3).y = 320 = 420 pele(1).y btg2 = CreatePolygonRgn(bintang2(1), ns3a, pele(2).x = 428 ALTERNATE) pele(2).y = 400 pele(3).x = 440 pele(3).y = 433
CombineRgn a0, a0, a1, 2 CombineRgn a0, a0, a3, 4 CombineRgn CombineRgn CombineRgn CombineRgn CombineRgn a0, a0, a0, a0, a0, a0, a0, a0, a0, a0, a5, a6, a7, a8, a9, 2 4 2 4 2
CombineRgn a0, a0, yin1, 2 CombineRgn a0, a0, yang, 4 CombineRgn a0, a0, p_l, 4 CombineRgn a0, a0, pe_l, 2 CombineRgn a0, a0, pe_le, 4 SetWindowRgn Me.hwnd, a0, True End Sub
CombineRgn a0, a0, a100, 2 CombineRgn a0, a0, a10, 2 CombineRgn a0, a0, a4, 4 CombineRgn a0, a0, b1, 4 CombineRgn a0, a0, b4, 4 CombineRgn a0, a0, b5, 2 CombineRgn CombineRgn CombineRgn CombineRgn CombineRgn CombineRgn CombineRgn CombineRgn CombineRgn CombineRgn CombineRgn CombineRgn CombineRgn CombineRgn CombineRgn CombineRgn CombineRgn a0, a0, a0, a0, a0, a0, a0, a0, a0, a0, a0, a0, a0, a0, a0, a0, a0, a0, a0, a0, a0, a0, a0, a0, a0, a0, a0, a0, a0, a0, a0, a0, a0, a0, b2, 4 b3, 2 a2, 4 b6, 2 b7, 4 b8, 4 kotak_a, 4 kotak_b, 4 circle_a, 4 circle_b, 4 elips_a, 4 elips_b, 4 segi3a, 4 btg2, 4 btg3, 2 yinyang, 4 yin, 2