comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

Aplicar transparencia a un formulario

  • 0 Respuestas
  • 1414 Vistas

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

Conectado ANTRAX

  • *
  • Administrator
  • Mensajes: 5380
  • Actividad:
    76.67%
  • Reputación 31
  • ANTRAX
    • Ver Perfil
    • Underc0de
    • Email
  • Skype: underc0de.org
  • Twitter: @Underc0de
« en: Julio 27, 2010, 04:37:57 pm »
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: Visual Basic
  1. Option Explicit
  2.  
  3. 'Declaración del Api SetLayeredWindowAttributes que establece _
  4. la transparencia al form
  5.  
  6. Private Declare Function SetLayeredWindowAttributes Lib "user32" _
  7. (ByVal hWnd As Long, _
  8. ByVal crKey As Long, _
  9. ByVal bAlpha As Byte, _
  10. ByVal dwFlags As Long) As Long
  11.  
  12.  
  13. 'Recupera el estilo de la ventana
  14. Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
  15. (ByVal hWnd As Long, _
  16. ByVal nIndex As Long) As Long
  17.  
  18.  
  19. 'Declaración del Api SetWindowLong necesaria para aplicar un estilo _
  20. al form antes de usar el Api SetLayeredWindowAttributes
  21.  
  22. Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
  23. (ByVal hWnd As Long, _
  24. ByVal nIndex As Long, _
  25. ByVal dwNewLong As Long) As Long
  26.  
  27.  
  28. Private Const GWL_EXSTYLE = (-20)
  29. Private Const LWA_ALPHA = &H2
  30. Private Const WS_EX_LAYERED = &H80000
  31. 'Función para saber si formulario ya es transparente. _
  32. Se le pasa el Hwnd del formulario en cuestión
  33.  
  34. Public Function Is_Transparent(ByVal hWnd As Long) As Boolean
  35. On Error Resume Next
  36.  
  37. Dim Msg As Long
  38.  
  39. Msg = GetWindowLong(hWnd, GWL_EXSTYLE)
  40.  
  41. If (Msg And WS_EX_LAYERED) = WS_EX_LAYERED Then
  42. Is_Transparent = True
  43. Else
  44. Is_Transparent = False
  45. End If
  46.  
  47. If Err Then
  48. Is_Transparent = False
  49. End If
  50.  
  51. End Function
  52.  
  53. 'Función que aplica la transparencia, se le pasa el hwnd del form y un valor de 0 a 255
  54. Public Function Aplicar_Transparencia(ByVal hWnd As Long, _
  55. Valor As Integer) As Long
  56.  
  57. Dim Msg As Long
  58.  
  59. On Error Resume Next
  60.  
  61. If Valor < 0 Or Valor > 255 Then
  62. Aplicar_Transparencia = 1
  63. Else
  64. Msg = GetWindowLong(hWnd, GWL_EXSTYLE)
  65. Msg = Msg Or WS_EX_LAYERED
  66.  
  67. SetWindowLong hWnd, GWL_EXSTYLE, Msg
  68.  
  69. 'Establece la transparencia
  70. SetLayeredWindowAttributes hWnd, 0, Valor, LWA_ALPHA
  71.  
  72. Aplicar_Transparencia = 0
  73.  
  74. End If
  75.  
  76.  
  77. If Err Then
  78. Aplicar_Transparencia = 2
  79. End If
  80.  
  81. End Function
« Última modificación: Mayo 12, 2014, 03:27:10 pm por Expermicid »


 

¿Te gustó el post? COMPARTILO!



Llamada de un formulario mediante el nombre como string

Iniciado por ANTRAX

Respuestas: 0
Vistas: 1287
Último mensaje Julio 26, 2010, 04:08:58 pm
por ANTRAX
Como Bloquear el Boton Cerrar del Formulario

Iniciado por ANTRAX

Respuestas: 0
Vistas: 1222
Último mensaje Julio 26, 2010, 12:46:46 pm
por ANTRAX
Formulario transparente con controles visibles

Iniciado por ANTRAX

Respuestas: 0
Vistas: 1442
Último mensaje Julio 26, 2010, 12:05:45 pm
por ANTRAX
Formulario 3D

Iniciado por ANTRAX

Respuestas: 4
Vistas: 2164
Último mensaje Julio 27, 2010, 04:33:00 pm
por ANTRAX