Dalam membuat atau mengembangkan sebuah aplikasi dengan menggunakan Macro VBA, kebutuhan untuk membuat sebuah frame menjadi transparansi kadang dibutuhkan.
Meskipun kontrol bawaan VBA memiliki keterbatasan dalam hal transparansi, misalnya disini contohnya Frame yang tidak memiliki setting properti untuk mengatur transparent.
Tetapi dengan menggunakan Windows API memungkinkan kita untuk membuat sebuah Frame menjadi Transfarent.
Yang terlihat seperti dibawah ini
Pada Materi kali ini, saya akan menjelaskan bagaimana menggunakan Windows API dalam VBA untuk membuat frame control dengan tingkat transparansi yang dapat disesuaikan.
Alt + F11
.Berikut adalah script untuk membuat frame transparan menggunakan Windows API:
Penjalasan script dibawah ini saya jelaskan pada video dibawah
#If Win64 And VBA7 Then Private Declare PtrSafe Function SetLayeredWindowAttributes Lib "user32.dll" ( _ ByVal hwnd As Long, _ ByVal crKey As Long, _ ByVal bAlpha As Byte, _ ByVal dwFlags As Long) As Long Private Declare PtrSafe Function GetFocus Lib "user32.dll" () As Long Private Declare PtrSafe Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" ( _ ByVal hwnd As Long, _ ByVal nIndex As Long, _ ByVal dwNewLong As Long) As Long Private Declare PtrSafe Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" ( _ ByVal hwnd As Long, _ ByVal nIndex As Long) As Long #Else Private Declare Function SetLayeredWindowAttributes Lib "user32.dll" ( _ ByVal hwnd As Long, _ ByVal crKey As Long, _ ByVal bAlpha As Byte, _ ByVal dwFlags As Long) As Long Private Declare Function GetFocus Lib "user32.dll" () As Long Privae Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" ( _ ByVal hwnd As Long, _ ByVal nIndex As Long, _ ByVal dwNewLong As Long) As Long Private Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" ( _ ByVal hwnd As Long, _ ByVal nIndex As Long) As Long #End If Private Const GWL_EXSTYLE As Long = -20 Private Const WS_EX_LAYERED As Long = &H80000 Private Const LWA_COLORKEY As Long = &H1 Sub BuatTrans(frm As Control) Dim hwnd As Long frm.SetFocus hwnd = GetFocus SetWindowLong hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) Or WS_EX_LAYERED frm.BackColor = RGB(240, 240, 240) SetLayeredWindowAttributes hwnd, RGB(240, 240, 240), 0, LWA_COLORKEY End Sub
Simpan script diatas pada standard module,
Untuk menggunakan dan membuat Frame menjadi transparent, bisa dilakukan dengan cara memanggil Sub BuatTrans
misalnya pada Userform_initialize
Private Sub UserForm_Initialize() BuatTrans Frame1 End Sub
Untuk penjelasan yang lebih detail, kamu bisa tonton tutorial dibawah ini.