• Miércoles 8 de Mayo de 2024, 20:43

Autor Tema:  Transpariencia a los formularios  (Leído 2615 veces)

Jimbenit

  • Miembro MUY activo
  • ***
  • Mensajes: 269
  • Nacionalidad: co
    • Ver Perfil
    • http://ingenieriacivil.foroactivo.com
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
  1. '@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@   NOV 6 / 2007
  2. '@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  3. '@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  4. '@@@                                                         @@@@
  5. '@@@ ESTE MODULO SIRVE PARA DAR TRASPARIENCIA A FORMULARIOS  @@@@
  6. '@@@                                                         @@@@
  7. '@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  8. '@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  9. '@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  10.  
  11. Option Explicit
  12.  
  13. 'Declaración del Api SetLayeredWindowAttributes que establece _
  14.  la transparencia al form
  15.  
  16. Private Declare Function SetLayeredWindowAttributes Lib "user32" _
  17.                 (ByVal hWnd As Long, _
  18.                  ByVal crKey As Long, _
  19.                  ByVal bAlpha As Byte, _
  20.                  ByVal dwFlags As Long) As Long
  21.  
  22.  
  23. 'Recupera el estilo de la ventana
  24. Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
  25.                 (ByVal hWnd As Long, _
  26.                  ByVal nIndex As Long) As Long
  27.  
  28.  
  29. 'Declaración del Api SetWindowLong necesaria para aplicar un estilo _
  30.  al form antes de usar el Api SetLayeredWindowAttributes
  31.  
  32. Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
  33.                (ByVal hWnd As Long, _
  34.                 ByVal nIndex As Long, _
  35.                 ByVal dwNewLong As Long) As Long
  36.  
  37.  
  38. Private Const GWL_EXSTYLE = (-20)
  39. Private Const LWA_ALPHA = &H2
  40. Private Const WS_EX_LAYERED = &H80000
  41. 'Función para saber si formulario ya es transparente. _
  42.  Se le pasa el Hwnd del formulario en cuestión
  43.  
  44. Public Function Is_Transparent(ByVal hWnd As Long) As Boolean
  45. On Error Resume Next
  46.  
  47. Dim Msg As Long
  48.  
  49.     Msg = GetWindowLong(hWnd, GWL_EXSTYLE)
  50.        
  51.        If (Msg And WS_EX_LAYERED) = WS_EX_LAYERED Then
  52.           Is_Transparent = True
  53.        Else
  54.           Is_Transparent = False
  55.        End If
  56.  
  57.     If Err Then
  58.        Is_Transparent = False
  59.     End If
  60.  
  61. End Function
  62.  
  63. 'Función que aplica la transparencia, se le pasa el hwnd del form y un valor de 0 a 255
  64. Public Function Aplicar_Transparencia(ByVal hWnd As Long, _
  65.                                       Valor As Integer) As Long
  66.  
  67. Dim Msg As Long
  68.  
  69. On Error Resume Next
  70.  
  71. If Valor < 0 Or Valor > 255 Then
  72.    Aplicar_Transparencia = 1
  73. Else
  74.    Msg = GetWindowLong(hWnd, GWL_EXSTYLE)
  75.    Msg = Msg Or WS_EX_LAYERED
  76.    
  77.    SetWindowLong hWnd, GWL_EXSTYLE, Msg
  78.    
  79.    'Establece la transparencia
  80.    SetLayeredWindowAttributes hWnd, 0, Valor, LWA_ALPHA
  81.  
  82.    Aplicar_Transparencia = 0
  83.  
  84. End If
  85.  
  86.  
  87. If Err Then
  88.    Aplicar_Transparencia = 2
  89. End If
  90.  
  91. End Function
  92.  
  93.  
  94. '@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  95. '@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  96. '@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  97. '@@@@@@@                                                @@@@@@@@@
  98. '@@@@@@@      AHORA DEBES COLOCAR EN EL FORMULARIO,     @@@@@@@@@
  99. '@@@@@@@ EN EL EVENTO "LOAD" LA SIGUIENTE INSTRUCCIÓN : @@@@@@@@@
  100. '@@@@@@@     Call Aplicar_Transparencia(Me.hWnd, 150)   @@@@@@@@@
  101. '@@@@@@@                                                @@@@@@@@@
  102. '@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  103. '@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  104. '@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  105. '@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
  106.  
  107.  



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.


Yo quiero mucho a Toph ---> Mi Web]http://ingenieriacivil.foroactivo.com[/url]

cpmario

  • Miembro HIPER activo
  • ****
  • Mensajes: 629
    • Ver Perfil
    • http://www.cpimario.com
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.
 :good:

Jimbenit

  • Miembro MUY activo
  • ***
  • Mensajes: 269
  • Nacionalidad: co
    • Ver Perfil
    • http://ingenieriacivil.foroactivo.com
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
    • Ver Perfil
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
  1.  
  2. ' en un módulo
  3.  
  4. '  declaraciones de API
  5. Private Declare Function GetWindowLong Lib "user32.dll" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
  6. Public Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
  7. 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
  8.  
  9. ' función que realiza
  10. Public Sub SetTransparencia(elHwnd As Long, elColor As OLE_COLOR)
  11.     Const G_E = &HFFEC
  12.     Const W_E = &H80000
  13.     Const LW_KEY = &H1
  14.     SetWindowLong elHwnd, G_E, GetWindowLong(elHwnd, G_E) Or W_E
  15.     SetLayeredWindowAttributes elHwnd, elColor, 0, LW_KEY
  16. End Sub
  17.  
  18.  
  19. ' en el formulario
  20.  
  21. '  pongamos el backcolor del formulario en un color que raramente vayamos a usar, por ejemplo un color rosa.
  22. '   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....
  23. Private Sub Form_Load()
  24.         Call SetTransparencia(Me.hwnd, Me.BackColor)
  25.         Call SetTransparencia(picture1.hwnd, Me.BackColor)
  26. end sub
  27.  
  28.  

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: co
    • Ver Perfil
    • http://ingenieriacivil.foroactivo.com
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: co
    • Ver Perfil
Re: Transpariencia a los formularios
« Respuesta #5 en: Martes 23 de Septiembre de 2008, 21:24 »
0
:beer:  :beer:  huy huy, son unos astros, mis respetos yo estube buscando esto hace mucho tiempo XD por fin podre terminar mi desarrollo pendiente.... mil gracias ^^  :good:
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