none
[Ayuda] ¿Cómo usar este efecto?

    Pregunta

  • Hola amigos,

    Estoy mirando este código de fuente donde quiero que al abrir el formulario parezca como un slider cada vez que lo abro.

    http://burnignorance.com/vb-net-tricks/net-produce-special-effects-when-loading-or-closing-windows/

    No consigo reproducir el efecto. Tengo que cambiar algo?

    Gracias

    viernes, 10 de febrero de 2017 14:45

Respuestas

  • "Symantecc" escribió:

    > Estoy mirando este código de fuente donde quiero que al abrir el formulario
    > parezca como un slider cada vez que lo abro.
    >
    > http://burnignorance.com/vb-net-tricks/net-produce-special-effects-when-loading-or-closing-windows/
    >
    > No consigo reproducir el efecto. Tengo que cambiar algo?

    Hola:

    De acuerdo al código fuente de Visual Basic .net que aparece en la dirección que has indicado, tan solo te tienes que limitar a realizar un "copia/pega" del mismo en el formulario donde desees producir el efecto especial. ¡Ni tan siquiera es necesario importar el espacio de nombres Microsoft.Win32!

    ¡Eso sí! Si por casualidad tienes activada la instrucción Option Strict, que es lo recomendable, tienes que modificar el tipo de dato del primer parámetro de la función API AnimateWindow, ya que el valor que le tienes que especificar es el de la propiedad Handle del formulario, la cual está definida con el tipo de dato System.IntPtr:

    Public Class Form1 ' Net – Produce Special effects when loading or closing Windows
    ' http://burnignorance.com/vb-net-tricks/net-produce-special-effects-when-loading-or-closing-windows/

    Private Const AW_HOR_POSITIVE = 1 Private Const AW_HOR_NEGATIVE = 2 Private Const AW_VER_POSITIVE = 4 Private Const AW_VER_NEGATIVE = 8 Private Const AW_HIDE = 65536 Private Const AW_ACTIVATE = 131072 Private Const AW_SLIDE = 262144 Private Const AW_BLEND = 524288 Private Declare Function AnimateWindow Lib "user32" ( hwnd As IntPtr, dwtime As Integer, dwflags As Integer) As Boolean Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load AnimateWindow(Me.Handle, 5000, AW_BLEND Or AW_ACTIVATE) End Sub End Class

    Al parámetro dwtime le he especificado el valor 5.000 milisegundos (5 segundos) para que te dé tiempo de observar el efecto que hayas indicado en el parámetro dwflags, que es una combinación de los valores constantes declarados en el formulario.

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.




    viernes, 10 de febrero de 2017 16:36
    Moderador
  • "Symantecc" escribió:

    > Estas pruebas lo estoy ejecutando con formularios MDI

    Entiendo que esto lo tendrías que haber dicho desde un primer momento.

    Tanto si es o no un formulario MDI, insisto en que yo, al menos, no puedo decir que "no se reproduce o se visualiza ningún efecto" mediante la llamada a la función AnimateWindow de la API de Windows que aparece en el enlace que indicaste en tu pregunta inicial.

    Ahora bien, si te refieres a que no se ve el efecto cuando deseas mostrar un formulario secundario o hijo que pertenece a un formulario MDI, ahí si te doy la razón, ya que en éste caso la función AnimateWindows fallará si se le ha especificado el valor  AW_BLEND, tal y como se describe en la ayuda de la función comentada a la cual te remito para más información al respecto.

    Si deseas mostrar un deslizamiento (slide) al mostrar los formularios hijos, podrías llamar a la función API de alguna de las siguientes maneras:

        ' Deslizamento vertical
        AnimateWindow(Me.Handle, 1000, AW_VER_POSITIVE Or AW_VER_NEGATIVE)
    
        ' Deslizamiento horizontal
        AnimateWindow(Me.Handle, 1000, AW_HOR_POSITIVE Or AW_HOR_NEGATIVE)
    
        ' Deslizamiento diagonal
        AnimateWindow(Me.Handle, 1000, AW_HOR_POSITIVE Or AW_HOR_NEGATIVE Or AW_VER_POSITIVE Or AW_VER_NEGATIVE)
    


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.



    lunes, 13 de febrero de 2017 16:30
    Moderador

Todas las respuestas

  • "Symantecc" escribió:

    > Estoy mirando este código de fuente donde quiero que al abrir el formulario
    > parezca como un slider cada vez que lo abro.
    >
    > http://burnignorance.com/vb-net-tricks/net-produce-special-effects-when-loading-or-closing-windows/
    >
    > No consigo reproducir el efecto. Tengo que cambiar algo?

    Hola:

    De acuerdo al código fuente de Visual Basic .net que aparece en la dirección que has indicado, tan solo te tienes que limitar a realizar un "copia/pega" del mismo en el formulario donde desees producir el efecto especial. ¡Ni tan siquiera es necesario importar el espacio de nombres Microsoft.Win32!

    ¡Eso sí! Si por casualidad tienes activada la instrucción Option Strict, que es lo recomendable, tienes que modificar el tipo de dato del primer parámetro de la función API AnimateWindow, ya que el valor que le tienes que especificar es el de la propiedad Handle del formulario, la cual está definida con el tipo de dato System.IntPtr:

    Public Class Form1 ' Net – Produce Special effects when loading or closing Windows
    ' http://burnignorance.com/vb-net-tricks/net-produce-special-effects-when-loading-or-closing-windows/

    Private Const AW_HOR_POSITIVE = 1 Private Const AW_HOR_NEGATIVE = 2 Private Const AW_VER_POSITIVE = 4 Private Const AW_VER_NEGATIVE = 8 Private Const AW_HIDE = 65536 Private Const AW_ACTIVATE = 131072 Private Const AW_SLIDE = 262144 Private Const AW_BLEND = 524288 Private Declare Function AnimateWindow Lib "user32" ( hwnd As IntPtr, dwtime As Integer, dwflags As Integer) As Boolean Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load AnimateWindow(Me.Handle, 5000, AW_BLEND Or AW_ACTIVATE) End Sub End Class

    Al parámetro dwtime le he especificado el valor 5.000 milisegundos (5 segundos) para que te dé tiempo de observar el efecto que hayas indicado en el parámetro dwflags, que es una combinación de los valores constantes declarados en el formulario.

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.




    viernes, 10 de febrero de 2017 16:36
    Moderador
  • Gracias por responder Enrique.

    Estoy probando como me has indicado pero no se reproduce o se visualiza ningún efecto.

    viernes, 10 de febrero de 2017 17:27
  • Hola Symantecc:

     En google docs existe una librería llamada Transition que te permite generar efectos de movimientos en formularios windows, cuenta con este efecto que deseas mas otros muy interesantes, deja de romperte la cabeza y utiliza esto.

    Aquí la documentación:

    ot-net-transitions - CodingWithTransitions.wiki

     Espero te sea de utilidad.


    Saludos desde Monterrey, Nuevo León, México!!!

    viernes, 10 de febrero de 2017 17:36
  • "Symantecc" escribió:

    > Estoy probando como me has indicado pero no se reproduce o se visualiza ningún efecto.

    Pues siento mucho no poder decir lo mismo.


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    viernes, 10 de febrero de 2017 18:46
    Moderador
  • Estas pruebas lo estoy ejecutando con formularios MDI
    domingo, 12 de febrero de 2017 12:49
  • "Symantecc" escribió:

    > Estas pruebas lo estoy ejecutando con formularios MDI

    Entiendo que esto lo tendrías que haber dicho desde un primer momento.

    Tanto si es o no un formulario MDI, insisto en que yo, al menos, no puedo decir que "no se reproduce o se visualiza ningún efecto" mediante la llamada a la función AnimateWindow de la API de Windows que aparece en el enlace que indicaste en tu pregunta inicial.

    Ahora bien, si te refieres a que no se ve el efecto cuando deseas mostrar un formulario secundario o hijo que pertenece a un formulario MDI, ahí si te doy la razón, ya que en éste caso la función AnimateWindows fallará si se le ha especificado el valor  AW_BLEND, tal y como se describe en la ayuda de la función comentada a la cual te remito para más información al respecto.

    Si deseas mostrar un deslizamiento (slide) al mostrar los formularios hijos, podrías llamar a la función API de alguna de las siguientes maneras:

        ' Deslizamento vertical
        AnimateWindow(Me.Handle, 1000, AW_VER_POSITIVE Or AW_VER_NEGATIVE)
    
        ' Deslizamiento horizontal
        AnimateWindow(Me.Handle, 1000, AW_HOR_POSITIVE Or AW_HOR_NEGATIVE)
    
        ' Deslizamiento diagonal
        AnimateWindow(Me.Handle, 1000, AW_HOR_POSITIVE Or AW_HOR_NEGATIVE Or AW_VER_POSITIVE Or AW_VER_NEGATIVE)
    


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.



    lunes, 13 de febrero de 2017 16:30
    Moderador
  • la linea:

            AnimateWindow(Handle, 3000, &H80000 Or &H20000)

    debe ser la primera dentro del evento Form1_Load, de otro modo no veras ningún efecto

    Saludos

    lunes, 13 de febrero de 2017 19:41
  • "gasgdl2" escribió:

    > la linea:
    >
    >    AnimateWindow(Handle, 3000, &H80000 Or &H20000)
    >
    > debe ser la primera dentro del evento Form1_Load, de otro modo no veras ningún efecto

    Hola:

    ¿Esa llamada funciona en el evento Load de un formulario MDI secundario? Es decir, ¿la función AnimateWindows devolverá el valor True o False?

     
       Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    
            Dim bln As Boolean = AnimateWindow(Handle, 3000, &H80000 Or &H20000)
            MessageBox.Show(bln.ToString()
             
        End Sub

    Se comprende que Form2 se ha mostrado ejecutando desde el formulario MDI lo siguiente:

     
    Public Class FormMDI
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            Dim frm As New Form2()
            frm.MdiParent = Me
            frm.Show()
    
        End Sub
    
    End Class

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.


    martes, 14 de febrero de 2017 20:10
    Moderador