Hola aquí otra forma para hacer skin (mediante apis) para formularios o también
poder hacer que el form sea invisible excepto los controles, lo que hace este código es eliminar toda región
de una ventana cuyo color sea el indicado
La ventaja que veo en hacerlo de esta forma es bastante rápido
a la hora de recortar además se puede ir
cambiando la mascara y este tomara inmediatamente su forma (sin volver a llamar
a la función)
Código:
Option Explicit
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 ReleaseCapture Lib "user32.dll" () As Long
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
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
Const LW_KEY = &H1
Const G_E = (-20)
Const W_E = &H80000
Private Sub Form_Load()
Skin Me, vbRed
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
'para mover el form de cualquier parte
ReleaseCapture
SendMessage hWnd, 161, 2, 0
End Sub
Sub Skin(Frm As Form, Color As Long)
Frm.BackColor = Color
Dim Ret As Long
Ret = GetWindowLong(Frm.hWnd, G_E)
Ret = Ret Or W_E
SetWindowLong Frm.hWnd, G_E, Ret
SetLayeredWindowAttributes Frm.hWnd, Color, 0, LW_KEY
End Sub
Dejo una imagen para que prueven
La guardan en su PC y la ponen como Picture del formulario
Nota: yo en este caso use rojo por comodidad lo cual no es muy conveniente es
mejor usar violetas o colores que no se vallan a utilizar luego, sino también
recortara estos es decir si un Label es rojo pues este se ara transparente también