huynhkimtien
Thành viên chính thức
- Tham gia
- 6/3/07
- Bài viết
- 51
- Được thích
- 49
- Giới tính
- Nam
- Nghề nghiệp
- Kế toán
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
Private Const GWL_EXSTYLE = (-20)
Private Const WS_EX_LAYERED = &H80000
Private Const LWA_ALPHA = &H2&
Public hWnd As Long
Private Sub Transparent(bytOpacity As Byte)
'bytOpacity : có giá trị từ 0-255
bytOpacity = 192 ' variable keeping opacity setting
hWnd = FindWindow("ThunderDFrame", Me.Caption)
Call SetWindowLong(Me.hWnd, GWL_EXSTYLE, GetWindowLong(Me.hWnd, GWL_EXSTYLE) Or WS_EX_LAYERED)
Call SetLayeredWindowAttributes(Me.hWnd, 0, bytOpacity, LWA_ALPHA)
End Sub
Bạn hãy đặt đoạn code này vào module của form bạn cần làm trong suốt.
Mã: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 Private Const GWL_EXSTYLE = (-20) Private Const WS_EX_LAYERED = &H80000 Private Const LWA_ALPHA = &H2& Public hWnd As Long [php] Private Sub Transparent(bytOpacity As Byte) 'bytOpacity : có giá trị từ 0-255 bytOpacity = 192 ' variable keeping opacity setting hWnd = FindWindow("ThunderDFrame", Me.Caption) Call SetWindowLong(Me.hWnd, GWL_EXSTYLE, GetWindowLong(Me.hWnd, GWL_EXSTYLE) Or WS_EX_LAYERED) Call SetLayeredWindowAttributes(Me.hWnd, 0, bytOpacity, LWA_ALPHA) End Sub Sau đó bạn có thể tạo một nút lệnh, và gọi thủ tục [B]Transparent[/B] và truyền giá trị từ 0 đến 255 xem sao. Chúc bạn thành công. Lê Văn Duyệt[/quote] Mạn phép bác, em sửa lại code cho đúng, chứ để như thế mà lại dặt trong Module thì không chạy được [php] Public Sub Transparent(bytOpacity As Byte, FrmCaption as string) hWnd = FindWindow("ThunderDFrame", FrmCaption) Call SetWindowLong(hWnd, GWL_EXSTYLE, GetWindowLong(hWnd, GWL_EXSTYLE) Or WS_EX_LAYERED) Call SetLayeredWindowAttributes(hWnd, 0, bytOpacity, LWA_ALPHA) End Sub [/php]
Đoạn code trên nếu dùng một mình thì chạy tốt nhưng nếu chèn vào file "Lam Form trong suot.xls" ở trên của em thì nó không có tác dụng. Em muốn form của mình lúc nào cũng ở trong vùng Desktop của Excel (như có trong file). Bác nào có cao kiến giải thích dùm em và chèn đoạn code của bác Duyệt vào có tác dụng được không ạ?
Cảm ơn các bác!
OK, có gì đâu bạn nó chạy bình thường đó thôi.
Chương trình chạy bình thường, nhưng khi cho giá trị từ 0-225 thì không thấy có gì thay đổi cả. Độ trong suốt của form vẫn như ban đầu. Bạn có thể xem lại hộ mình được không?
Dim Res As Long
Dim ChildHWnd As Long
Dim ErrNum As Long
ParentHWnd = ExcelDeskHWnd
ChildHWnd = UserFormHWnd
Res = SetParent(hWndChild:=ChildHWnd, hWndNewParent:=ParentHWnd)
SetForegroundWindow UserFormHWnd
Me.Repaint
Sau bạn không làm thêm một UF nữa để điều chỉnh lại cho thích hợp nhỉ! khi kéo thả đến có là làm cho UF tàn hình luôn không còn thấy nút của thanh trượt khó sử dụng lém! thêm UF phụ để điều khiểu thì dể dàng hơn.Một cách điều chỉnh khác.
Trong Sub DisplayLabels có dư 1 đoạn code hình như của 1 sub khác thì phải, đã bị xoá 1 End Sub và 1 Sub ...()
Đó là đoạn này:
Xoá đi hoặc đánh dấu thì OK.PHP:Dim Res As Long Dim ChildHWnd As Long Dim ErrNum As Long ParentHWnd = ExcelDeskHWnd ChildHWnd = UserFormHWnd Res = SetParent(hWndChild:=ChildHWnd, hWndNewParent:=ParentHWnd) SetForegroundWindow UserFormHWnd Me.Repaint
Để hiểu rõ câu hỏi của bạn thật khó. Ngay từ những bài đầu mình không hiểu được "trong vùng Desktop của Excel". Bạn có thể nói rõ hơn được không. Bạn có nguồn tài liệu nào nói như vậy không?
Xưa nay, mình hiểu Destop là cửa sổ chính của Window chứ không phải trong bất cứ phần mềm nào khác.