Aplicar transparencia a un formulario

Iniciado por ANTRAX, Julio 27, 2010, 04:37:57 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Julio 27, 2010, 04:37:57 PM Ultima modificación: Mayo 12, 2014, 03:27:10 PM por Expermicid
Muestra de como utilizar la función del API SetLayeredWindowAttributes que permite aplicar transparencia a un formulario.

Este ejemplo tiene una función propia llamada Aplicar_Transparencia, donde se le pasa como parámetro el hwnd del formulario al que le queremos aplicar un grado para hacerlo transparente, y en el segundo parámetro se le pasa un valor de tipo Byte que indica el valor o grado de transparencia a aplicar.

Nota: La función Api SetLayeredWindowAttributes, se encuentra en plataformas Windows 2000 en adelante, por lo tanto no funcionará en plataformas anteriores, como Windows 98 o Windows ME

Código: vb
Option Explicit

'Declaración del Api SetLayeredWindowAttributes que establece _
la transparencia al form

Private Declare Function SetLayeredWindowAttributes Lib "user32" _
(ByVal hWnd As Long, _
ByVal crKey As Long, _
ByVal bAlpha As Byte, _
ByVal dwFlags As Long) As Long


'Recupera el estilo de la ventana
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
(ByVal hWnd As Long, _
ByVal nIndex As Long) As Long


'Declaración del Api SetWindowLong necesaria para aplicar un estilo _
al form antes de usar el Api SetLayeredWindowAttributes

Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
(ByVal hWnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long


Private Const GWL_EXSTYLE = (-20)
Private Const LWA_ALPHA = &H2
Private Const WS_EX_LAYERED = &H80000
'Función para saber si formulario ya es transparente. _
Se le pasa el Hwnd del formulario en cuestión

Public Function Is_Transparent(ByVal hWnd As Long) As Boolean
On Error Resume Next

Dim Msg As Long

Msg = GetWindowLong(hWnd, GWL_EXSTYLE)

If (Msg And WS_EX_LAYERED) = WS_EX_LAYERED Then
Is_Transparent = True
Else
Is_Transparent = False
End If

If Err Then
Is_Transparent = False
End If

End Function

'Función que aplica la transparencia, se le pasa el hwnd del form y un valor de 0 a 255
Public Function Aplicar_Transparencia(ByVal hWnd As Long, _
Valor As Integer) As Long

Dim Msg As Long

On Error Resume Next

If Valor < 0 Or Valor > 255 Then
Aplicar_Transparencia = 1
Else
Msg = GetWindowLong(hWnd, GWL_EXSTYLE)
Msg = Msg Or WS_EX_LAYERED

SetWindowLong hWnd, GWL_EXSTYLE, Msg

'Establece la transparencia
SetLayeredWindowAttributes hWnd, 0, Valor, LWA_ALPHA

Aplicar_Transparencia = 0

End If


If Err Then
Aplicar_Transparencia = 2
End If

End Function