Visual Basic Foro

Programación => Visual Basic 6 => Mensaje iniciado por: YAcosta en Noviembre 23, 2011, 11:00:17 pm

Título: Hacer scroll o arrastre tipo movil
Publicado por: YAcosta en Noviembre 23, 2011, 11:00:17 pm
Esta inquietud la tiene (tuvo en el futuro) mi amigo eligioalmuedo y la verdad yo tambien tengo la misma inquietud y por ello y con su permiso republico su post aquí:

"Buenas. ¿Alguien ha intentado emular el deslizamiento que se hacen ahora en casi todos los dispositivos moviles?. Me refiero concretamente al arrastre que se hace en los listados y que crea un efecto similar a arrastre real de una lista sobre rodamientos. (Espero sepais de que os hablo)

¿Que algoritmo se usa para el calculo de la posicion, velocidad y frenado?"
Título: Re:Hacer scroll o arrastre tipo movil
Publicado por: 79137913 en Noviembre 24, 2011, 08:43:58 am
HOLA!!!

Te puedo ayudar, en el MouseDown se guarda Top y Timer o GetTickCount como prefieras.
Luego en MouseUp Se Guarda NewTop y Timer o GetTickCount como prefieras.

Luego se toma el intervalo de tiempo y el segmento de altura.

Se divide para que de DeltaTop/DecimaDeSegundo.

(delta = modificacion)

Se hace un bucle que scrollea al principio en la velocidad y luego se le resta una constante por cada giro(vuelta del bucle) a la velocidad (DeltaTop +/- const) / DecimaDeSegundo. Hasta que llegue a 0 DeltaTop.

Nota si delta Top es negativo habra que sumar en vez de restar la constante.

GRACIAS POR LEER!!!
Título: Re:Hacer scroll o arrastre tipo movil
Publicado por: raul338 en Noviembre 24, 2011, 09:49:11 am
Mira, si lo que buscas es que se pueda hacer tipo como si pasaras el dedo hacia arriba, con el mouse es incomodo x'D

Puedes buscar "smooth scroll" o deslizamiento suave (firefox y chrome lo tienen integrado, aunque lo tenian desactivado por defecto, opera lo tenia activado)

Si ves el código fuente de jQuery (o tambien scrip.taculo.us) tiene funciones que son para "deslizar" la pantalla, podrías darle un vistazo y traspasar ese código :P
Título: Re:Hacer scroll o arrastre tipo movil
Publicado por: eligioalmuedo en Noviembre 24, 2011, 03:24:56 pm
HOLA!!!

Te puedo ayudar, en el MouseDown se guarda Top y Timer o GetTickCount como prefieras.
Luego en MouseUp Se Guarda NewTop y Timer o GetTickCount como prefieras.

Luego se toma el intervalo de tiempo y el segmento de altura.

Se divide para que de DeltaTop/DecimaDeSegundo.

(delta = modificacion)

Se hace un bucle que scrollea al principio en la velocidad y luego se le resta una constante por cada giro(vuelta del bucle) a la velocidad (DeltaTop +/- const) / DecimaDeSegundo. Hasta que llegue a 0 DeltaTop.

Nota si delta Top es negativo habra que sumar en vez de restar la constante.

GRACIAS POR LEER!!!
Gracias por el apunte, pero no es lo que busco, ya que ese calculo genera una delta constante, que produce una deceleracion constante hasta llegar a cero, no produciendose el efecto de frenado del que hablo, si no de uno contante y "lineal".  Hablando matematicamente la deceleracion es parabolica y no lineal. Hay reside su complejidad. Pero vuelvo a repetirte que gracias.

Juntando Mensajes

He activado el deslizamiento suave y desactivado el automatico (esta en el apartado "avanzado"), pero no veo que produzca cambios ningunos en el deslizamiento. Igual solo sirve en pantallas tactiles. No se.....

En cuanto al codigo jQuery lo buscare y lo mirare a ver que hay. Muchas gracias.
Título: Re:Hacer scroll o arrastre tipo movil
Publicado por: 79137913 en Noviembre 24, 2011, 08:28:43 pm
HOLA!!!

El calculo no genera un Delta Top Constante, lo que hace es hacer un deltaTop = X y lo divide por decima de segundo para obtener asi la aceleracion inicial...

En cuanto a la desaceleracion, la desaceleracion es constante siempre y cuando el rozamiento no cambie, por ende es constante. Si vos lo que queres hacer es que cuanto mas lento vaya mas desacelere, que no seria adecuado a la fisica, le restas una variable a la velocidad, quedando la formula final asi:

(DeltaTop +/- (const+DeltaTopINI - (DeltaTopINI - DeltaTop)) / DecimaDeSegundo

Con la anterior formula logras el efecto que deseas.

GRACIAS POR LEER!!!
Título: Re:Hacer scroll o arrastre tipo movil
Publicado por: seba123neo en Noviembre 24, 2011, 10:41:06 pm
en firefox, apreta la rueda del mouse y te aparece la flecha, move el mouse arriba y abajo eso queres ?
Título: Re:Hacer scroll o arrastre tipo movil
Publicado por: raul338 en Noviembre 24, 2011, 11:30:24 pm
Capas que el quiere algo como esto :P

[youtube]http://www.youtube.com/watch?v=wDkdE-qUBP0[/youtube]
Título: Re:Hacer scroll o arrastre tipo movil
Publicado por: eligioalmuedo en Noviembre 25, 2011, 04:40:27 am
No Sebas, y un saludo. Lo de Firefox es un scroll suave en funcion a lo separado que dejas el mouse de la doble-flecha que generas al usar el boton central. No es eso de lo que hablo. Lo que trato de emular es el deslizamiento de listados que se hace tactilmente en los moviles de ultima generacion (Android, IOs, etc). Cuando tienes un listado de contactos por ejemplo y pulsas con el dedo el listado y lo "lanzas" hacia abajo, se produce un scroll muy real con desaceleracion. Eso es lo que trato de llevar a codigo, que como bien dice Raul338, esto usado con el mouse es incomo y poco practico, mas aun existiendo la rueda del scroll en los mouse. Pero esto seria para aplicarlo en dispositivos con pantalla tactil, en los cuales lo que prima es la rapidez.

No estoy trabajando en un software tipo restauracion, pero el otro dia desayunando en un bar, cuando me fije en el camarero que estaba en la caja registradora elaborando un arqueo, me sorprendio que para moverse por el listado de movimientos de la caja, pulsaba la pantalla con el dedo un segundo o dos, y salia una barra de deslizamiento con unas dimensiones enormes pero comodas para que fuera pulsada por el dedo. Una vez pulsado con el dedo en esta barra de deslizamiento tipo Vscroll de VB, subia y bajaba el dedo para moverse por el listado, que a poco que fuese muy extenso, le da poca presicion. Fue cuando me pregunté porque un software dedicado a la restauracion y con pantalla tactil, no tenia esta implementacion tan util que vemos a diario en los moviles.

He tomado a la ligera la ecuacion de 79137913, y creo que es lo que busco. Una vez calculada la aceleracion inicial, solo tengo que calcular que contante de rozamiento "k" quiero aplicar para dar el efecto de frenado suave que busco. En cuanto tenga algo en codigo lo posteo para que podamos probarlo y mejorarlo, y si luego algun gurú de este foro es capaz de crear un dll o ocx o control de usuario para poder implementarlo sobre objetos pues mejor.
A todos gracias.
Título: Re:Hacer scroll o arrastre tipo movil
Publicado por: raul338 en Noviembre 25, 2011, 05:18:12 am
Raul338, esto usado con el mouse es incomo y poco practico, mas aun existiendo la rueda del scroll en los mouse. Pero esto seria para aplicarlo en dispositivos con pantalla tactil, en los cuales lo que prima es la rapidez.

Exacto, yo sabia que era para algo tactil :P Aun asi, estaria bueno crear un framework (un conjunto de clases) para que podamos hacer aplicaciones tactiles. Tal vez con la API de Windows 8/7 se pueda hacer :)
Título: Re:Hacer scroll o arrastre tipo movil
Publicado por: eligioalmuedo en Noviembre 25, 2011, 07:24:23 am
Bueno. Tengo algo hecho muy por encima, pero para ver el efecto es mas que sobrado. Solo hay que picar en el command1 y lanzarlo a derecha o izquierda. Si el lanzamiento es debil podeis ver el efecto de frenado. A ver como lo veis.

File name: Deslizador.rar File size: 1.73 KB (http://www.fileserve.com/file/YV9cA56/Deslizador.rar)
Título: Re:Hacer scroll o arrastre tipo movil
Publicado por: Virgil Tracy en Noviembre 25, 2011, 08:03:56 am
En codeproject encontre esto:

Implementing a smoothly animated ListBox
http://www.codeproject.com/KB/list/SmoothListBox.aspx (http://www.codeproject.com/KB/list/SmoothListBox.aspx)

¿Y viste el ListBoxEx de Leandro?, el implementa un scroll con aceleracion
http://leandroascierto.com/blog/listboxex/ (http://leandroascierto.com/blog/listboxex/)

A este control se le puede agregar un freno al scroll, solo hay que cambiar el PicScroll_MouseMove
me quedo algo trucha la implementacion, pero se puede mejorar  ;D

Código: (vb) [Seleccionar]
Private Sub PicScroll_MouseMove(index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)

    Dim PT As POINTAPI
    Dim ScrollVelociti As Long
    Static IsIn As Boolean
   
    If Not IsIn Then
        IsIn = True
        DrawArrow index, True
        Select Case mCount
            Case Is < 20
                ScrollVelociti = 300
            Case Is < 40
                ScrollVelociti = 250
            Case Is < 100
                ScrollVelociti = 100
            Case Else
                ScrollVelociti = 50
        End Select
           
        GetCursorPos PT
   
        Do While WindowFromPoint(PT.X, PT.Y) = PicScroll(index).hWnd
       
            DoEvents
            Sleep ScrollVelociti
            If ScrollVelociti > 1 Then ScrollVelociti = ScrollVelociti - 1
           
            If index = 0 Then
                mScrollPos = mScrollPos - 1
            Else
                mScrollPos = mScrollPos + 1
            End If
               
            Me.Refresh
            GetCursorPos PT
           
        Loop
       
        DrawArrow index
        IsIn = False
       
        BrakeScroll index '<--- aqui freno del scroll
       
    End If
   
End Sub

Private Sub BrakeScroll(index As Integer)
Dim ScrollVelociti As Long

ScrollVelociti = 1

Do While ScrollVelociti < 100

   DoEvents
   Sleep ScrollVelociti
   ScrollVelociti = ScrollVelociti + 4
   
   Debug.Print ScrollVelociti
   
   If index = 0 Then
      mScrollPos = mScrollPos - 1
   Else
      mScrollPos = mScrollPos + 1
   End If
   
   Me.Refresh

Loop

End Sub
Título: Re:Hacer scroll o arrastre tipo movil
Publicado por: 79137913 en Noviembre 25, 2011, 09:03:52 am
HOLA!!!

Me baje el proyecto que hiciste, te salio genial!!!

Me encanto el efecto, FELICITACIONES!

GRACIAS POR LEER!!!
Título: Re:Hacer scroll o arrastre tipo movil
Publicado por: eligioalmuedo en Noviembre 25, 2011, 09:20:50 am
Muchas gracias compañero
Título: Re:Hacer scroll o arrastre tipo movil
Publicado por: raul338 en Noviembre 25, 2011, 10:44:27 am
No lo puedo bajar, ... se me ve mal la pagina.. alguien lo podria subir a otro servidor? Gracias :D
Título: Re:Hacer scroll o arrastre tipo movil
Publicado por: 79137913 en Noviembre 25, 2011, 10:48:32 am
HOLA!!!

http://www.mediafire.com/?i4c7ng3c13o1892

GRACIAS POR LEER!!!
Título: Re:Hacer scroll o arrastre tipo movil
Publicado por: YAcosta en Noviembre 26, 2011, 04:12:06 am
Con el mouse se podría aplicar el algoritmo solo a la rueda de scroll? Al girar mas fuerte que la lista corra mas y vaya frenando.  :(
Título: Re:Hacer scroll o arrastre tipo movil
Publicado por: eligioalmuedo en Noviembre 26, 2011, 08:01:04 am
Seria bastante distinto a como lo he diseñado. Yo lo que he hecho es con los timers, es ir memorizando con una cadencia rapida (5 ms) es la posicion del mouse de tal manera que una vez que se suelta el boton del mouse, hace el calculo de la velocidad de salida en funcion a la distancia entre la posicion memorizada y la posicion cuando sueltas el boton. Por eso a mayor distancia mayor velocidad. El resto es aplicar la velocidad con un frenado suave hasta llegar a cero.

Hacer lo que pides seria interceptando los tikcs del scrollmouse, y guardando la diferencia de tiempos entre ticks, lo cual nos proporciona una medida de tiempo que supongo que tambien se puede aplicar al calculo de la velocidad de inicio.

Vere si puedo hecharle un vistazo (cuando tenga un buen hueco) y lo vemos para aplicarlo tal como dices al scroll. Un saludo.
Título: Re:Hacer scroll o arrastre tipo movil
Publicado por: johncin en Octubre 18, 2013, 01:30:58 am
hola, podrian volver a subir el ejemplo porfavor gracias.