Autor Tema: Control de Usuario Tipo Ventana con efecto Modal...  (Leído 10309 veces)

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

AxioUK

  • Megabyte
  • ***
  • Mensajes: 108
  • Reputación: +17/-1
  • Modulos GSL
    • Ver Perfil
Control de Usuario Tipo Ventana con efecto Modal...
« en: Marzo 08, 2014, 01:22:57 am »
POST ACTUALIZADO

Estimados
   Tomando el usercontrol del maestro LeandroA, los posteriores retoques del amigo ENTER, un poco de aliños de por ahí y hartas ganas mías he tratado de hacer un control tipo ventana, al que quiero agregarle ahora un efecto tipo modal que oscurezca un poco el fondo de la ventana contenedora (como en la imagen), burdamente he conseguido el efecto que quiero, pero me he topado con 3 detalles que escapan a mis conocimientos:

1.- Las esquinas no son redondeadas (se ven las puntas blancas)
2.- Cuando la aplicación pierde el foco, se desactiva el efecto Modal.
3.- Si hago click en la ventana Bloqeuada, el UC se vá al fondo, bloqueandose tambien...

Agradecería mucho la ayuda de quien quiera colaborar a mejorar este UC y principalmente a corregir los 3 detalles mencionados.

Agradecido de antemano

--------------------------------------------------------------------------------------
08/03/2014: Corregido!

---------------------------------------------------------------------------------------
08/03/2014: Corregido!

---------------------------------------------------------------------------------------------------------------------------------
10/03/2014: Corregido!

---------------------------------------------------------------------------------------------------------------------------------
12/03/2014: Corregido!

---------------------------------------------------------------------------------------------------------------------------------
22/03/2014:
Estos son los fuentes de la ultima revisión más o menos estable del Control...
Se ha aplicado el efecto Modal mediante el código de coco (picturebox por código), por lo que ya no se requiere la inclusión de los form adicionales para generar el efecto modal. El control ya es completamente funcional como Contenedor sin usar el efecto Modal, por lo que he incluido una versión simple llamada ucPanelBox la cual puede ser utilizada solamente incluyendo los archivos ucPanelbox.ctl y ucPanelbox.ctx..

He corregido/modificado algunos detalles durante el efecto Modal:
- Al cerrar desde el botón del PanelBox se cierra el control y se termina el efecto Modal.
- Es posible habilitar la "movilidad" del PanelBox durante el efecto Modal. (Panelbox1.Movible=True)

Detalles por Corregir:
- al habilitar la movilidad en estado Modal se puede ver una copia del control en la zona cubierta
- En Forms sin Titlebar da error al cerrar el control con el efecto Modal (Corregido! Gracias coco)
- En entornos MDI/Child:
             - No aplicable el efecto modal en el MDI
             - En algunos Child no se dibuja completo o se produce un error al cerrarlo o se cubre el form pero no se aplica la transparencia.
 (Lo probe en un MDI con 4 Child y todos estos errores se produjeron unicamente en el Form2, eliminé ese Form, creé uno nuevo, le di el mismo nombre Form2 y se repitieron los errores ¿!?)

Para quien quiera cooperar con las correcciones, bienvenido y agradecido.

Link de Descarga:

https://mega.co.nz/#!uIRlxLJa!oyinBEKSFQFX3iPcB0NFBc10_mANB_Ki3LM3KLWCeLU



Cordiales Saludos
« última modificación: Marzo 24, 2014, 09:52:19 am por AxioUK »

_____________________________
Sé un poco de todo y mucho de nada... ;)

Bazooka

  • Terabyte
  • *****
  • Mensajes: 951
  • Reputación: +31/-20
  • El pibe Bazooka
    • Ver Perfil
    • Desof sistemas
Re:Control de Usuario Tipo Ventana con efecto Modal...
« Respuesta #1 en: Marzo 08, 2014, 06:29:38 pm »
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

AxioUK

  • Megabyte
  • ***
  • Mensajes: 108
  • Reputación: +17/-1
  • Modulos GSL
    • Ver Perfil
Re:Control de Usuario Tipo Ventana con efecto Modal...
« Respuesta #2 en: Marzo 08, 2014, 07:43:25 pm »
De hecho ya me sirvió, de ahí tomé el código para oscurecer el formulario, mi problemas es que la ventana no es un form, es un usercontrol, por lo que hice lo siguiente:
Aplico un form con la transparencia para bloquear el formulario principal, luego uso otro form al que le doy el tamaño del usercontrol y lo centro respecto al principal, a este form muevo el control con SetParent, lo hago de esta forma pues si solo muevo el usercontrol al form transparente, el usercontrol se transparenta tambien.
Ahora solo debo solucionar el hecho de que no me aplica el redondeo en las esquinas del form transparente ni en el contenedor del usercontrol, y el hecho de que si lo aplico como MODAL, se pierde el efecto de sombreado.

En el link esta todo el código, si algun alma caritativa puede revisarlo, se agradece...

_____________________________
Sé un poco de todo y mucho de nada... ;)

LeandroA

  • Administrador
  • Petabyte
  • *****
  • Mensajes: 1128
  • Reputación: +151/-8
    • Ver Perfil
Re:Control de Usuario Tipo Ventana con efecto Modal...
« Respuesta #3 en: Marzo 10, 2014, 01:39:48 am »
Hola AxioUK, para facilitarte un poco las cosas, lo mejor seria utilizar un picturebox para tapar todo lo de el formulario (pero solo el área cliente no los bordes) y utilizar la función que puso coco en su código DrawAlphaSelection, en definitiva es el mismo método que el de el pero aplicando un poco el método manual, y luego sobre ese picture box le pones usercontrol PanelBox , de esta forma te ahorras usas formularios y muchos dolores de cabeza que te pueden traerte al cerrar la ventana principal. inclusive podes manejar todo desde elmismo usercontrol (me refiero a que podes poner el picture creándolo por código al igual que hiso coco)

otra opción ya practicamente terminada es utilizar el mismo código de coco, pero en el formulario modal pones el PanelBox, y para darle el redondeo a la ventana podes utilizar esta apis


Código: [Seleccionar]
Private Declare Function GetWindowRgn Lib "user32.dll" (ByVal hWnd As Long, ByVal hRgn As Long) As Long
Private Declare Function SetWindowRgn Lib "user32.dll" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
Private Declare Function CreateRectRgn Lib "gdi32.dll" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long


y por ultimo si aun asi queres hacerlo como lo estabas haciendo , esta algo asi deveria quedar la función:



agrega esta api
Código: (vb) [Seleccionar]
Private Declare Function GetWindowRgn Lib "user32.dll" (ByVal hWnd As Long, ByVal hRgn As Long) As Long

Código: (Vb) [Seleccionar]
Public Sub SetModal(isTransparent As Boolean, nForm As Object)
    Dim Ret As Long, Region As Long
    Dim lLeft As Long, lTop As Long
    Dim lWidth As Long, lHeight As Long
   
    lLeft = nForm.Left
    lTop = nForm.Top
    lWidth = nForm.Width
    lHeight = nForm.Height
   
    If isTransparent = True Then
      frmTapa.Move lLeft, lTop, lWidth, lHeight
      frmTapa.Show , nForm
     
      Region = CreateRoundRectRgn(0&, 0&, 0&, 0&, 0&, 0&)
      Call GetWindowRgn(nForm.hWnd, Region)
      Call SetWindowRgn(frmTapa.hWnd, Region, True)
     
      Call SetClarity(frmTapa.hWnd, m_Clarity)
     
   
      frmBase.Move lLeft + ((frmTapa.Width / 2) - (UserControl.Width / 2)), lTop + ((frmTapa.Height / 2) - (UserControl.Height / 2)), UserControl.Width, UserControl.Height
      SetParent UserControl.hWnd, frmBase.hWnd
      Extender.Move 0, 0
     
      m_Moveable = False
      PropertyChanged "Moveable"
      PicM.Enabled = False
   
      Region = CreateRoundRectRgn(0&, 0&, 0&, 0&, 0&, 0&)
      Call GetWindowRgn(UserControl.hWnd, Region)
      Call SetWindowRgn(frmBase.hWnd, Region, True)
   
      frmBase.Show vbModal, frmTapa
   
    Else
    'ver no lo mire
      SetParent UserControl.hWnd, nForm.hWnd
      PicM.Enabled = True
      Unload frmBase
      Unload frmTapa
    End If
End Sub

LeandroA

  • Administrador
  • Petabyte
  • *****
  • Mensajes: 1128
  • Reputación: +151/-8
    • Ver Perfil
Re:Control de Usuario Tipo Ventana con efecto Modal...
« Respuesta #4 en: Marzo 10, 2014, 01:41:45 am »
perdón, pensé que ya habían mencionado el código de Coco, este es el link
http://leandroascierto.com/foro/index.php?topic=2490.0

La segunda opcion que te di creo que es la que mejor te va a dar resultado.
« última modificación: Marzo 10, 2014, 01:43:58 am por LeandroA »

AxioUK

  • Megabyte
  • ***
  • Mensajes: 108
  • Reputación: +17/-1
  • Modulos GSL
    • Ver Perfil
Re:Control de Usuario Tipo Ventana con efecto Modal...
« Respuesta #5 en: Marzo 10, 2014, 06:04:30 pm »
Estimado LeandroA, realmente eres un maestro, codigo implementado probado y funcionando de maravilla!
Revisaré con tranquilidad el Codigo de coco para ver si puedo implementarlo en ves de los formularios.

De momento llegando a casa subiré los fuentes y el OCX final para quienes quieran utilizar este control que varias horas de sueño me costó...

Muchas Gracias LeandroA y ENTER, estarán en los créditos! jejejeje....

Saludos a todos

_____________________________
Sé un poco de todo y mucho de nada... ;)

AxioUK

  • Megabyte
  • ***
  • Mensajes: 108
  • Reputación: +17/-1
  • Modulos GSL
    • Ver Perfil
Re:Control de Usuario Tipo Ventana con efecto Modal...
« Respuesta #6 en: Marzo 13, 2014, 11:22:20 pm »
Estimado LeandroA, tratando de implementar el código de coco, en lo que a mostrar la ventana y cubrir el Form con el PictureBox creado mediante código, todo OK; mi drama actual está en que no consigo identificar adecuadamente el pictureBox para removerlo por código una vez cierre la Ventanita (PanelBox), la verdad eso escapa a mis conocimientos.

una manita?

_____________________________
Sé un poco de todo y mucho de nada... ;)

ssccaann43

  • Terabyte
  • *****
  • Mensajes: 970
  • Reputación: +97/-58
    • Ver Perfil
    • Sistemas Nuñez, Consultores y Soporte, C.A.
Re:Control de Usuario Tipo Ventana con efecto Modal...
« Respuesta #7 en: Marzo 17, 2014, 09:49:31 am »
Me causa cierta intriga, siendo este foro código abierto para aportar nuestros conocimientos, porque armas un ocx, en vez de compartir el código?
Miguel Núñez.

AxioUK

  • Megabyte
  • ***
  • Mensajes: 108
  • Reputación: +17/-1
  • Modulos GSL
    • Ver Perfil
Re:Control de Usuario Tipo Ventana con efecto Modal...
« Respuesta #8 en: Marzo 17, 2014, 01:29:02 pm »
Estimado ssccaann43:
    si hubieras aportado con algo te habría agradecido enormemente, pero como solo has hecho un comentario basado presuntamente en tu lectura "al vuelo" te informo: en el archivo VA TODO, los fuentes y un OCX, traté de armar un OCX solo por gusto propio, cada quien es libre de usar el código, parte de el, el usercontrol o simplemente incluir el ocx en sus proyectos... justamente como es un foro libre le doy a sus usuarios la LIBERTAD de escoger cualquier alternativa....

Cordiales Saludos

Estimado LeandroA, realmente eres un maestro, codigo implementado probado y funcionando de maravilla!
Revisaré con tranquilidad el Codigo de coco para ver si puedo implementarlo en ves de los formularios.

De momento llegando a casa subiré los fuentes y el OCX final para quienes quieran utilizar este control que varias horas de sueño me costó...

Muchas Gracias LeandroA y ENTER, estarán en los créditos! jejejeje....

Saludos a todos

---------------------------------------------------------------------------------------------------------------------------------
10/03/2014
Estos son los fuentes del Control terminado (incluye el OCX)...

https://mega.co.nz/#!jB4yAJyD!ljfHsKV1CigaGCT9Jvbc2FZir3lWdY_YMcImuR9-Qvc



---------------------------------------------------------------------------------------------------------------------------------
« última modificación: Marzo 17, 2014, 10:22:33 pm por AxioUK »

_____________________________
Sé un poco de todo y mucho de nada... ;)

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Control de Usuario Tipo Ventana con efecto Modal...
« Respuesta #9 en: Marzo 17, 2014, 02:35:21 pm »
Me causa cierta intriga, siendo este foro código abierto para aportar nuestros conocimientos, porque armas un ocx, en vez de compartir el código?

Si papa ¿que te paso? AxioUK si estuvo compartiendo el código, sino ¿como Lea lo pudo orientar?. Deje el trago!!! jeje
Me encuentras en YAcosta.com

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Control de Usuario Tipo Ventana con efecto Modal...
« Respuesta #10 en: Marzo 17, 2014, 02:45:52 pm »
Por cierto, seria bueno (intentaré yo mas tarde si me da el tiempo) heredarle al PanelBox el evento MouseDown y MouseUp para poder simular el mover el "formulario" (PanelBox), podría ser que en el formulario padre (formulario test) halla un dato que necesitamos y que el PanelBox tapa no permitiéndonos verlo y cerrarlo no seria buena solución, aunque he visto que el cerrar el Panel (Visible = False) no limpia los controles internos lo cual lo resolvería pero en otros casos habría que hacerlo a mano, seria interesante agregarle la propiedad de que al cerrar se limpien los controles o no. Tratare de darme un tiempo para aportar estas modificaciones salvo que algún maestro lo haga antes.

Saludos
Me encuentras en YAcosta.com

E N T E R

  • Petabyte
  • ******
  • Mensajes: 1062
  • Reputación: +57/-13
  • www.enterpy.com
    • Ver Perfil
    • www.enterpy.com
Re:Control de Usuario Tipo Ventana con efecto Modal...
« Respuesta #11 en: Marzo 17, 2014, 03:27:15 pm »
Quedo muy bueno el control.

Gracias por compartir.
CIBER GOOGLE - CONCEPCIÓN PARAGUAY
www.enterpy.com
Primera regla de la programacion, para que vas a hacerlo complicado si lo puedes hacer sencillo

ssccaann43

  • Terabyte
  • *****
  • Mensajes: 970
  • Reputación: +97/-58
    • Ver Perfil
    • Sistemas Nuñez, Consultores y Soporte, C.A.
Re:Control de Usuario Tipo Ventana con efecto Modal...
« Respuesta #12 en: Marzo 17, 2014, 04:08:52 pm »
Perdona, no lo baje porque solo vi lo del ocx. Pero gran aporte.
Miguel Núñez.

AxioUK

  • Megabyte
  • ***
  • Mensajes: 108
  • Reputación: +17/-1
  • Modulos GSL
    • Ver Perfil
Re:Control de Usuario Tipo Ventana con efecto Modal...
« Respuesta #13 en: Marzo 17, 2014, 05:59:49 pm »
Por cierto, seria bueno (intentaré yo mas tarde si me da el tiempo) heredarle al PanelBox el evento MouseDown y MouseUp para poder simular el mover el "formulario" (PanelBox), podría ser que en el formulario padre (formulario test) halla un dato que necesitamos y que el PanelBox tapa no permitiéndonos verlo y cerrarlo no seria buena solución, aunque he visto que el cerrar el Panel (Visible = False) no limpia los controles internos lo cual lo resolvería pero en otros casos habría que hacerlo a mano, seria interesante agregarle la propiedad de que al cerrar se limpien los controles o no. Tratare de darme un tiempo para aportar estas modificaciones salvo que algún maestro lo haga antes.

Saludos

Estimado Yacosta, Si aplicas el control sin el SetModal, este te queda "movible"... la Idea de implementar el estilo Modal era para "cubrir" el formulario Padre al mostrar la ventanita, y este se puede activar solo por código. Mientras trato de implementar el código de Coco para mostrar el Modal sin usar los formularios Tapa y Base, es necesario incluir el usercontrol y los 2 formulario frmTapa y frmbase para que funcione bien el estilo Modal, si solo se usará como contenedor no son necesarios los formularios....

Es buena idea lo de limpiar los controles al cerrar el Panelbox, la verdad no se me había ocurrido, más tarde subiré los fuentes del control con el código de Coco (está algo "sucio el código" por falta de tiempo y revisión), de momento estoy entrampado con poder quitar el picturebox transparente que cubre el formulario padre.... haber si me pueden dar una manito...

Saludos y gracias a Todos
--------------------------------------------------------------------------------------------------------------
Estos son los fuentes con el código de coco:
 favor ver si alguen puede sacarme del entrampe...

https://mega.co.nz/#!CNAwlZoZ!r7dVZWk75wtOaQB88DWdTOJm-F19R7Mrxaxp1Rkf0Pk

Gracias!
--------------------------------------------------------------------------------------------------------------
PD: sccaann43, por favor disculpa si fuí algo brusco con mi respuesta...  es que soy un apasionado jejejeje!
--------------------------------------------------------------------------------------------------------------

He incluido en los Fuentes del Post Inicial una versión simple del PanelBox, llamada ucPanelBox, para quienes quieran usar solamente la ventanita sin el efecto Modal, tiene todas las caracteristicas básicas para modificar su apariencia y el hecho de poder hacerla Movible o Estática... eso. Saludos a todos y gracias
« última modificación: Marzo 17, 2014, 10:26:52 pm por AxioUK »

_____________________________
Sé un poco de todo y mucho de nada... ;)

k_arlytos

  • Megabyte
  • ***
  • Mensajes: 211
  • Reputación: +2/-4
    • Ver Perfil
Re:Control de Usuario Tipo Ventana con efecto Modal...
« Respuesta #14 en: Marzo 21, 2014, 03:28:50 am »
has probado tu usercontrol compilado?
yo lo compile y no muestra el efecto
"Comentar el código es como limpiar el cuarto de baño; nadie quiere hacerlo, pero el resultado es siempre una experiencia más agradable para uno mismo y sus invitados"