|
Anda pasti pernah menggunakan kontrol TextBox di Visual Basic. Property Appearance pada kontrol TextBox memiliki dua kemungkinan yaitu 3D dan Flat. Secara default property ini akan di set ke 3D. Melalui tulisan ini kita akan mencoba membuat kontrol TextBox Anda menjadi flat seperti tampilan TextBox pada aplikasi MS Office atau Windows XP. OK, sebelum kita lanjutkan, simak dulu pesan-pesan berikut ini.
Tulisan ini bersifat terbuka dan Anda bisa menyebarluaskan atau mengutip dengan bebas seluruh atau secuil dari tulisan ini dengan catatan Anda harus menyebutkan sumber aslinya. Anda bisa memberikan kritik atau saran melalui
sony-ak@sony-ak.com. Penulis tidak bertanggung jawab atas segala akibat yang ditimbulkan oleh tulisan ini dan semata-mata tulisan ini hanya demi kepentingan pendidikan.
Code untuk pembuatan flat TextBox-nya penulis ambil dari source code aplikasi EliteSpy+ buatan Andrea Batina. Model flat default yang disediakan oleh kontrol TextBox penulis rasa kurang "enak" dilihat karena tampilannya tidak seperti style "flat"-nya pada MS Office atau Windows XP. Anda bisa lihat perbandingannya seperti di bawah:

Nah, sekarang kita akan membuat flat pada TextBox menjadi seperti gambar TextBox yang kedua seperti pada gambar di atas. Penulis menggunakan Visual Basic 6.0 dalam demo ini. Langkah-langkah -nya adalah sebagai berikut:
Buka Visual Basic Anda dan buat project baru (Standard EXE).
Letakkan sebuah sebuah kontrol Button dan TextBox pada form.
Tambahkan sebuah module pada project. Ini nantinya akan berisi berbagai deklarasi Windows API.
Tuliskan code di bawah ini pada bagian module tadi.
Option Explicit
Public Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Const GWL_STYLE = (-16)
Public Const GWL_EXSTYLE = (-20)
Public Const WS_EX_CLIENTEDGE = &H200&
Public Const WS_EX_STATICEDGE = &H20000
Public Const WS_BORDER = &H800000
Public Const WS_CAPTION = &HC00000
Public Const WS_CHILD = &H40000000
Public Const WS_CLIPCHILDREN = &H2000000
Public Const WS_CLIPSIBLINGS = &H4000000
Public Const WS_DLGFRAME = &H400000
Public Const WS_GROUP = &H20000
Public Const WS_HSCROLL = &H100000
Public Const WS_MAXIMIZEBOX = &H10000
Public Const WS_MINIMIZEBOX = &H20000
Public Const WS_SYSMENU = &H80000
Public Const WS_POPUP = &H80000000
Public Const WS_POPUPWINDOW = (WS_POPUP Or WS_BORDER Or WS_SYSMENU)
Public Const WS_TABSTOP = &H10000
Public Const WS_THICKFRAME = &H40000
Public Const WS_SIZEBOX = WS_THICKFRAME
Public Const WS_VISIBLE = &H10000000
Public Const WS_VSCROLL = &H200000
Public Const WM_CLOSE = &H10
Public Const SWP_FRAMECHANGED = &H20
Public Const SWP_NOACTIVATE = &H10
Public Const SWP_NOZORDER = &H4
Public Const SWP_NOSIZE = &H1
Public Const SWP_NOMOVE = &H2
Public Sub RemoveBorder(lhWnd As Long)
Dim lStyle As Long
'Get window style
lStyle = GetWindowLong(lhWnd, GWL_STYLE)
'Setup window styles
lStyle = lStyle And Not (WS_BORDER Or WS_DLGFRAME Or WS_CAPTION Or WS_BORDER Or WS_SIZEBOX Or WS_THICKFRAME)
'Set window style
SetWindowLong lhWnd, GWL_STYLE, lStyle
'Update window
SetWindowPos lhWnd, 0, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_NOZORDER Or SWP_FRAMECHANGED Or SWP_NOSIZE Or SWP_NOMOVE
End Sub
Public Sub MakeFlat(lhWnd As Long)
Dim lStyle As Long
'Get window style
lStyle = GetWindowLong(lhWnd, GWL_EXSTYLE)
'Setup window styles
lStyle = lStyle And Not WS_EX_CLIENTEDGE Or WS_EX_STATICEDGE
'Set window style
SetWindowLong lhWnd, GWL_EXSTYLE, lStyle
RemoveBorder lhWnd
End Sub
Tulis code di bawah pada bagian deklarasi umum di Form1
Option Explicit
Private Sub Command1_Click()
MakeFlat Text1.hwnd
End Sub
Jalankan project Anda dengan menekan F5. Kemudian tekan tombol Command1 dan secara otomatis kontrol di sebelahnya akan menjadi flat.
OK, proses perubahan menjadi flat di atas dilakukan dengan cara memanggil prosedur MakeFlat yang kalau kita lihat di dalamnya berisi pemanggilan ke beberapa fungsi-fungsi Windows API seperti GetWindowLong, SetWindowLong dan SetWindowPos. Prosedur MakeFlat sendiri mempunyai sebuat paramater yaitu window handle dari kontrol yang akan diubah tampilannya menjadi flat. Nah Anda bisa coba apply prosedur ini ke kontrol lain selain TextBox. Penulis sudah mencoba meng-apply prrosedur MakeFlat ini ke kontrol Button dan ListBox dan hasilnya kontrol-kontrol tersebut mempunyai efek flat yang menarik. Anda bisa melihat contohnya seperti gambar di bawah ini:

Sekian dulu tulisan kali ini dan semoga berguna bagi pembaca semua. Jika ada komentar, kritik atau saran silakan saja kirim melalui
sony-ak@sony-ak.com.
Terakhir penulis tidak lupa untuk mengucapkan terimakasih kepada pihak-pihak berikut:
- Andrea Batina, your EliteSpy+ source code is very great !! Thanks for share it around the world.
- Esa Ivani, thanks for your support and love. I miss you tonight !!
Source code dari project ini bisa Anda download di sini.
Mission completed on 23:40 PM.
| Send
your comments or suggestions |
|
|
|