Transparent Frame Control

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.

Langkah-langkah Menggunakan Windows API untuk Membuat Frame Transparan

  • Buka Excel dan masuk ke Editor VBA dengan menekan 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.

List Tutorial
Apa yang sedang kamu cari?

Temukan beberapa kata kunci yang diinginkan.

Search