Autor Tema: Form dentro de Picture y Transparencia  (Leído 2834 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

JBB

  • Bytes
  • *
  • Mensajes: 28
  • Reputación: +3/-0
    • Ver Perfil
Form dentro de Picture y Transparencia
« en: Junio 21, 2014, 05:28:37 pm »
Hola a tod@s
La idea es meter un formulario dentro de un Picture y que el form2 y todos los elementos se queden transparentes.

Meter el formulario dentro del Picture, sin problemas.
Hacer el formulario transparente, sin problemas.

El problema es que el cursor se desplaza de sitio y las ventanas fallan al moverse.

Aquí pongo el código para que se entienda mejor.
Los dos from en posición manual a 0y0

Poner en el form1, un Picture1 y dos botones y pegar este código.
--------------------------------------------------------------------------------------
Option Explicit
'Declaración de SetParent
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long

 'Botón que incrusta el Form2 en el Picture1
Private Sub Command1_Click()
Dim ret As Long
    ret = SetParent(Form2.hwnd, Picture1.hwnd)
    Form2.Show
End Sub

'Botón que restablece el Form2
Private Sub Command2_Click()
    Dim ret As Long
    ret = SetParent(Form2.hwnd, 0)
    Form2.Show
End Sub
--------------------------------------------------------------------------------------
En el form2 poner 2 botones sin código y un Text1.
Lo ejecutamos, pulsamos incrustar y todo esta bien.
Se puede mover la ventana con el form2 dentro del picture, pulsar los botones o poner texto en el Text1 sin problemas.

Y ahora ponemos el código para hacerlo transparente en el form2.
Pegar este 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 SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
Private Const GWL_EXSTYLE = (-20)
Private Const WS_EX_LAYERED = &H80000
Private Const WS_EX_TRANSPARENT = &H20&
Private Const LWA_ALPHA = &H2&

Private Sub Form_Load()
    Dim bTrans As Byte ' The level of transparency (0 - 255)
    bTrans = 200
    SetWindowLong Me.hwnd, GWL_EXSTYLE, WS_EX_LAYERED
    SetLayeredWindowAttributes Me.hwnd, 0, bTrans, LWA_ALPHA
End Sub
--------------------------------------------------------------------------------------

Ahora mover el formulario, poner texto o pulsar los botones.
Todo falla, porque ????

Pulsar restablecer el Form2.
El form2 esta transparente y todo correcto.

Alguna idea, gracias.

LeandroA

  • Administrador
  • Petabyte
  • *****
  • Mensajes: 1128
  • Reputación: +151/-8
    • Ver Perfil
Re:Form dentro de Picture y Transparencia
« Respuesta #1 en: Junio 21, 2014, 08:32:56 pm »
Hola, prácticamente no se puede hacer, ya de por si es raro que te muestre algo, una ventana WS_EX_LAYERED no puede ser hija de otra ventana.
yo  buscaria por otro lado.

Saludos.

JBB

  • Bytes
  • *
  • Mensajes: 28
  • Reputación: +3/-0
    • Ver Perfil
Re:Form dentro de Picture y Transparencia
« Respuesta #2 en: Junio 22, 2014, 03:58:41 am »
Hola Leandro.
Como no puede ser hija, le he puesto a la nieta  ;D  ;D

Aqui dejo el proyecto en vb6 funcionando.
http://www.rednovaplus.es/FlashDock/Ventanas.rar

Esta es la captura del proyecto.
http://www.rednovaplus.es/FlashDock/Captura.jpg

En el form2 he puesto un listbox, un text y un WebBrowser1 con el que podemos navegar por todo el ordenador como si fuese una ventana de windows.

En un botón he puesto el desplazar el form2 y podemos ver que todo sigue funcionando bien.

Mientras el form1 se encuentre en posición 0-0 todo esta bien, pero si lo desplazamos es cuando deja de funcionar ya que el cursor no reconoce los objetos para hacer click.
De manera que si mantenemos el proyecto en posición 0-0 en pantalla, podemos utilizarlo.

Tengo la pantalla del portatil de 1366x768 y una pantalla externa de 1920x1080
Lo que quiero conseguir es poder desplazarlo todo a la pantalla grande.

Alguna idea  :'(
« última modificación: Junio 22, 2014, 10:05:07 am por JBB »