Tampilkan postingan dengan label Window Region. Tampilkan semua postingan
Tampilkan postingan dengan label Window Region. Tampilkan semua postingan

Senin, 09 April 2012

Membuat Grafiti di VB 6 berbentuk bendera


Source code lengkap bisa didownload di http://www.ziddu.com/download/19099090/Flag.zip.html

Melanjutkan belajar tentang API Programming .
Kali ini saya akan membuat grafiti dari VB dengan model yang lain.Sebenarnya ini adalah tugas sewaktu kuliah, daripada tergeletak lemas di gudang  laptop tanpa daya. Maka saya beberkan rahasia saya, hehehe...

Soal : buatlah model seperti berikut di VB 6.0



Berikut source code utamanya



 'bendera luar
    a0 = CreateRectRgn(0, 100, 999, 500)
    a1 = CreateEllipticRgn(-30, 60, 450, 200)
    a2 = CreateEllipticRgn(430, 5, 1000, 170)
    
    nKoor = 3
    segi_a3(1).x = 450
    segi_a3(1).y = 60
    segi_a3(2).x = 420
    segi_a3(2).y = 94
    segi_a3(3).x = 470
    segi_a3(3).y = 130
    ' Creates region to fill with color.
    a3 = CreatePolygonRgn(segi_a3(1), nKoor, ALTERNATE)
    a4 = CreateEllipticRgn(-30, 440, 453, 580)
    a5 = CreateEllipticRgn(450, 430, 1000, 575)
  'lubang dalam sebelah kiri
    a6 = CreateEllipticRgn(-30, 130, 440, 230)
    a7 = CreateEllipticRgn(-30, 170, 440, 270)
    a8 = CreateEllipticRgn(-30, 350, 440, 450)
    a9 = CreateEllipticRgn(-30, 390, 440, 490)
    a10 = CreateRectRgn(0, 100, 80, 420)
    b1 = CreateRectRgn(80, 150, 130, 380)
'lubang dalam sebelah kanan
    b2 = CreateEllipticRgn(420, 100, 970, 270)
    b3 = CreateEllipticRgn(420, 60, 970, 230)
    b4 = CreateEllipticRgn(420, 310, 970, 490)
    b5 = CreateEllipticRgn(420, 260, 900, 450)
    b6 = CreateRectRgn(900, 150, 1000, 500)
    b7 = CreateRectRgn(850, 220, 900, 450)
    
    
    'variasi
    b8 = CreateRectRgn(940, 180, 960, 490)
    kotak_a = CreateRectRgn(60, 100, 170, 120)
    kotak_b = CreateRectRgn(780, 510, 880, 530)
    circle_a = CreateEllipticRgn(200, 80, 240, 120)
    circle_b = CreateEllipticRgn(700, 510, 740, 550)
    elips_a = CreateEllipticRgn(270, 90, 330, 110)
    elips_b = CreateEllipticRgn(560, 520, 680, 540)
    
    'bintang
    ns3a = 3
    bintang1(1).x = 275
    bintang1(1).y = 290
    bintang1(2).x = 200
    bintang1(2).y = 240
    bintang1(3).x = 350
    bintang1(3).y = 240
    segi3a = CreatePolygonRgn(bintang1(1), ns3a, ALTERNATE)


    nBtg = 3
    bintang2(1).x = 270
    bintang2(1).y = 200
    bintang2(2).x = 220
    bintang2(2).y = 320
    bintang2(3).x = 320
    bintang2(3).y = 320
    btg2 = CreatePolygonRgn(bintang2(1), ns3a, ALTERNATE)
  nBtg3 = 3
    bintang3(1).x = 220
    bintang3(1).y = 320
    bintang3(2).x = 320
    bintang3(2).y = 320
    bintang3(3).x = 270
    bintang3(3).y = 290
    btg3 = CreatePolygonRgn(bintang3(1), nBtg3, ALTERNATE)
    
    'Yin & Yang
    yinyang = CreateEllipticRgn(600, 300, 700, 400)
    yin = CreateEllipticRgn(630, 340, 680, 410)
    yin1 = CreateRectRgn(580, 300, 645, 400)
    yang = CreateEllipticRgn(630, 300, 680, 350)
    
    'penghalus lengkungan
    npl = 3
    pl(1).x = 415
    pl(1).y = 195
    pl(2).x = 430
    pl(2).y = 195
    pl(3).x = 440
    pl(3).y = 215
    p_l = CreatePolygonRgn(pl(1), npl, ALTERNATE)
npel = 3
    pel(1).x = 424
    pel(1).y = 382
    pel(2).x = 428
    pel(2).y = 375
    pel(3).x = 440
    pel(3).y = 392
    pe_l = CreatePolygonRgn(pel(1), npel, ALTERNATE)
npele = 3
    pele(1).x = 420
    pele(1).y = 420
    pele(2).x = 428
    pele(2).y = 400
    pele(3).x = 440
    pele(3).y = 433
    pe_le = CreatePolygonRgn(pele(1), npele, ALTERNATE)
CombineRgn a0, a0, a1, 2
    
    CombineRgn a0, a0, a3, 4
    
    CombineRgn a0, a0, a5, 2
    CombineRgn a0, a0, a6, 4
    CombineRgn a0, a0, a7, 2
    CombineRgn a0, a0, a8, 4
    CombineRgn a0, a0, a9, 2
    
    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 a0, a0, b2, 4
    CombineRgn a0, a0, b3, 2
    CombineRgn a0, a0, a2, 4
    CombineRgn a0, a0, b6, 2
    CombineRgn a0, a0, b7, 4
    CombineRgn a0, a0, b8, 4
    CombineRgn a0, a0, kotak_a, 4
    CombineRgn a0, a0, kotak_b, 4
    CombineRgn a0, a0, circle_a, 4
    CombineRgn a0, a0, circle_b, 4
    CombineRgn a0, a0, elips_a, 4
    CombineRgn a0, a0, elips_b, 4
    CombineRgn a0, a0, segi3a, 4
    CombineRgn a0, a0, btg2, 4
    CombineRgn a0, a0, btg3, 2
    CombineRgn a0, a0, yinyang, 4
    CombineRgn a0, a0, yin, 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


Caranya, buat form kotak seperti biasa. Lalu dipotong dengan bentuk oval di kanan atas dan kiri bawah supaya terlihat melengkung ke dalam.
Kemudian tambahkan oval di kiri atas dan kanan bawah agar terlihat melengkung ke luar.
Selanjutnya terserah kreasi Anda, masak harus saya jelaskan detail. 
Coba dulu doong...baru tanya kalau kurang jelas. Bikin kotaknya? Bikin bintang? Bikin tanda koma besar??
Disambung lain kali ya..

Kamis, 05 April 2012

Control ActiveX Form / Windows Region


Artikel ini bisa didownload di scribd.com dengan link http://adf.ly/72BoE

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.

PENGENALAN WINDOWS REGION
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, 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 bentuk default dari windows. Dengan API region ini kita bisa menciptakan style form yang berbeda.
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:
CombineRgn
CreateEllipticRgn
CreateEllipticRgnIndirect
CreatePolygonRgn
CreatePolyPolygonRgn
CreateRectRgn
CreateRectRgnIndirect
CreateRoundRectRgn
OffsetRgn
PathToRegion
PtlnRegion
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.
Cara penulisan CreateEllipticRgn dan CreateRectRgn :
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 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.













Gambar 1. Form Berbentuk Ellips

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 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





Ilustrasi combine