Thiết kế UserForm bài số 10: Transparent UserForm Làm trong suốt UserForm

giaiphapvba

Administrator
Thành viên BQT
Bài học thiết kế số 01
Bài học thiết kế số 02
Bài học thiết kế số 03 .
Bài học thiết kế số 04 .
Bài học thiết kế số 05 .
Bài học thiết kế số 06 .
Bài học thiết kế số 07 .
Bài học thiết kế số 08 .
Bài học thiết kế số 09 .
==============================
Một vài trường hợp chúng ta muốn UserForm trong suốt để có thể nhìn được data ở phía sau. Trong trường hợp đó, chúng ta phải xử lý thế nào?
Bạn cần đăng nhập để thấy đính kèm


1. Code trên Module:
Mã:
#If VBA7 Then
    Private Declare PtrSafe Function FindWindow _
        Lib "user32" Alias "FindWindowA" _
    (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare PtrSafe Function GetWindowLong _
        Lib "user32" Alias "GetWindowLongA" _
    (ByVal hWnd As Long, ByVal nIndex As Long) As Long
    Private Declare PtrSafe Function SetWindowLong _
        Lib "user32" Alias "SetWindowLongA" _
    (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Private Declare PtrSafe Function SetLayeredWindowAttributes _
        Lib "user32" _
        (ByVal hWnd As Long, ByVal crey As Byte, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
#Else
    Private Declare Function FindWindow _
        Lib "user32" Alias "FindWindowA" _
        (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Function GetWindowLong _
        Lib "user32" Alias "GetWindowLongA" _
        (ByVal hWnd As Long, ByVal nIndex As Long) As Long
    Private Declare Function SetWindowLong _
        Lib "user32" Alias "SetWindowLongA" _
        (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Private Declare Function SetLayeredWindowAttributes _
        Lib "user32" _
        (ByVal hWnd As Long, ByVal crey As Byte, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
#End If

Private Const GWL_EXSTYLE = (-20)
Private Const WS_EX_LAYERED = &H80000
Private Const LWA_ALPHA = &H2&

Public hWnd As Long

Sub MakeTransparent(frm As Object, TransparentValue As Integer)

    Dim bytOpacity As Byte

'Control the opacity setting.
    bytOpacity = TransparentValue

    hWnd = FindWindow("ThunderDFrame", frm.Caption)
    Call SetWindowLong(hWnd, GWL_EXSTYLE, GetWindowLong(hWnd, GWL_EXSTYLE) Or WS_EX_LAYERED)
    Call SetLayeredWindowAttributes(hWnd, 0, bytOpacity, LWA_ALPHA)

End Sub
2. Code trên UserForm:
Mã:
Private Sub UserForm_Initialize()
    'Make the form transparent.
    MakeTransparent Me, 200
End Sub
-Giá trị nhỏ nhất là 0
-Giá trị lớn nhất là 255.
Bạn có thể lựa chọn giá trị bất kỳ trong khoảng từ 165 tới 200.

Code trên đã phải sử dụng các hàm API. Tạm thời chúng ta chưa cần lý giải, copy và sử dụng vào chương trình của chúng ta là được.
Link file demo:

Nguồn tham khảo:
 
Top