Domingo 22 de Diciembre de 2024, 19:09
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
Visual Basic 6.0 e inferiores
(Moderador:
F_Tanori
) »
Transpariencia a los formularios
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Transpariencia a los formularios (Leído 2743 veces)
Jimbenit
Miembro MUY activo
Mensajes: 269
Nacionalidad:
Transpariencia a los formularios
«
en:
Miércoles 10 de Septiembre de 2008, 15:17 »
0
Ya se que muchos saben aplicar la transparencia a los formularios, pero se han preguntado si todos saben?
Bueno, para los que no saben aqui les dejo la oportunidad para que la apliquen a sus proyectos...
Copia el siguiente codigo en un modulo standar:
Código: Text
'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ NOV 6 / 2007
'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
'@@@ @@@@
'@@@ ESTE MODULO SIRVE PARA DAR TRASPARIENCIA A FORMULARIOS @@@@
'@@@ @@@@
'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
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
'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
'@@@@@@@ @@@@@@@@@
'@@@@@@@ AHORA DEBES COLOCAR EN EL FORMULARIO, @@@@@@@@@
'@@@@@@@ EN EL EVENTO "LOAD" LA SIGUIENTE INSTRUCCIÓN : @@@@@@@@@
'@@@@@@@ Call Aplicar_Transparencia(Me.hWnd, 150) @@@@@@@@@
'@@@@@@@ @@@@@@@@@
'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
por ultimo, en el evento Form_load , llama este procedimiento:
Call Aplicar_Transparencia(Me.hWnd, 150)
siendo 150 el nivel de trasparencia, el nivel minimo es 0 (es decir, el formulario es completamente invisible)
el valor maximo es 255 (es decir, el formulario no tiene nada de transparencia.
Espero que les sirva...
saludos.
Tweet
Yo quiero mucho a
Toph
---> Mi Web]http://ingenieriacivil.foroactivo.com[/url]
cpmario
Miembro HIPER activo
Mensajes: 629
Re: Transpariencia a los formularios
«
Respuesta #1 en:
Miércoles 10 de Septiembre de 2008, 16:17 »
0
Me sirve, gracias.
Es muy fácil de implementar en mis proyectos.
Me puedes indicar si funciona en Win98.
Jimbenit
Miembro MUY activo
Mensajes: 269
Nacionalidad:
Re: Transpariencia a los formularios
«
Respuesta #2 en:
Miércoles 10 de Septiembre de 2008, 16:28 »
0
Bien, mira.. la funcion que hace la llamada de la api es original de de win xp, creo que no funcionará (aunque no he hecho la prueba) pero me gustaria que hicieras la prueba...
saludos
Yo quiero mucho a
Toph
---> Mi Web]http://ingenieriacivil.foroactivo.com[/url]
Nebire
Miembro HIPER activo
Mensajes: 670
Re: Transpariencia a los formularios
«
Respuesta #3 en:
Viernes 12 de Septiembre de 2008, 18:02 »
0
Otro código de ejemplo. Pongo el código y doy algunas explicaciones... y las diferencias con le código de nuestro amigo Nilson
Código: Visual Basic
' en un módulo
' declaraciones de API
Private
Declare
Function
GetWindowLong Lib
"user32.dll"
Alias
"GetWindowLongA"
(
ByVal
hwnd
As
Long
,
ByVal
nIndex
As
Long
)
As
Long
Public
Declare
Function
SetWindowLong Lib
"user32.dll"
Alias
"SetWindowLongA"
(
ByVal
hwnd
As
Long
,
ByVal
nIndex
As
Long
,
ByVal
dwNewLong
As
Long
)
As
Long
Public
Declare
Function
SetLayeredWindowAttributes Lib
"user32.dll"
(
ByVal
hwnd
As
Long
,
ByVal
crKey
As
Long
,
ByVal
bAlpha
As
Byte
,
ByVal
dwFlags
As
Long
)
As
Long
' función que realiza
Public
Sub
SetTransparencia(elHwnd
As
Long
, elColor
As
OLE_COLOR)
Const G_E = &HFFEC
Const W_E = &H80000
Const LW_KEY = &H1
SetWindowLong elHwnd, G_E, GetWindowLong(elHwnd, G_E)
Or
W_E
SetLayeredWindowAttributes elHwnd, elColor, 0, LW_KEY
End
Sub
' en el formulario
' pongamos el backcolor del formulario en un color que raramente vayamos a usar, por ejemplo un color rosa.
' y colocamos un picture de ejemplo, Probad a cambiar el color de fondo del picture, vereis que sólo se hará transparente las partes que coincidan con el color que declaramos....
Private
Sub
Form_Load()
Call
SetTransparencia(Me.hwnd, Me.BackColor)
Call
SetTransparencia(picture1.hwnd, Me.BackColor)
end
sub
El código indicado por Nilson, establece transparencia por nivel, el que yo expongo, lo hace por color, quien decide que sea uno o lo otro es la constante que Nilson llama 'LWA_ALPHA' y yo 'LW_KEY', que es el parámetro dwFlags. Cuando el valor es 2 se aplica transparencia por grados y para ello se usa el parámetro bAlpha en cambio si usamos el valor 1 entonces la transparencia se realiza en base a un color, es decir todas las áreas que coincidan con ese color se harán transparente, lo cual es ideal para hacer formularios 'recortados', el color se pasa en el parámetro 'crKey'. Como se menciona en el código salvo que lo tengamos pensado explícitamente así, el color debe ser uno que no acostumbremos a usar nunca, para evitar que por descuido un objeto de nuestro formulario haya 'desaparecido'.
Si en dwFlags marcamos 2 para indicar tansparencia por grados y establecemos un color, crKey (el color) se ignora y no produce ningún error, del mismo modo si en dwFlags indicamos el valor 1, bAlpha (el grado de transparencia) igualmente se ignora, sea el valor que sea el que se ponga.
«Ma non troppo»
----> ModoVacaciones = False<----
Jimbenit
Miembro MUY activo
Mensajes: 269
Nacionalidad:
Re: Transpariencia a los formularios
«
Respuesta #4 en:
Viernes 12 de Septiembre de 2008, 18:37 »
0
...Buen aporte Nebire...
Saludos.
Yo quiero mucho a
Toph
---> Mi Web]http://ingenieriacivil.foroactivo.com[/url]
acek
Miembro activo
Mensajes: 58
Nacionalidad:
Re: Transpariencia a los formularios
«
Respuesta #5 en:
Martes 23 de Septiembre de 2008, 21:24 »
0
huy huy, son unos astros, mis respetos yo estube buscando esto hace mucho tiempo XD por fin podre terminar mi desarrollo pendiente.... mil gracias ^^
http://twitter.com/aceherdz
http://xavijava.blogspot.com/
Si Lo que crei que era mi realidad es una mentira;
y las mentiras Son Mi Realidad . a Que Put@s Juego?
>>>>AceK<<<<
JAVA!!!!!!
COBOL
PHP!!!!!!!!
http://www.tupokemon.com/adopcion/index.php?sumarExperiencia=164964
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
Visual Basic 6.0 e inferiores
(Moderador:
F_Tanori
) »
Transpariencia a los formularios