In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Scrolling en Browse al estilo Excel

Foro público de Xailer en español
Responder
Avatar de Usuario
Carlos Ortiz
Mensajes: 872
Registrado: Mié Jul 01, 2009 5:44 pm
Ubicación: Argentina - Córdoba
Contactar:

Scrolling en Browse al estilo Excel

Mensaje por Carlos Ortiz »

Buenos días.
Me sumo a una pregunta del año pasado en el foro en Ingles acerca de cómo funciona el componente TDBBrowse.
Cuando usamos el componente browse y moves la rueda del mouse se desplaza entre registros y a veces esto esta trasmitiendo mucha info ni hablar si hay 2 o 3 browsers y tienen sus onchanges respectivos, se que hay una sugerencia con un timer pero pregunto
¿hay alguna forma de que el desplazamiento con la rueda del mouse desplace la grilla de datos para arriba o para abajo pero que no se mueva del registro hasta que el usuario haga clic en alguno? sería un funcionamiento similar a Excel o incluso a la misma ventana del editor de código de Xailer te permite ese efecto (claro es otro tipo de control) pero por ahi viendo que ya existe el metodo mousewheel se pudiera hacer algo sencillo.

Gracias
Avatar de Usuario
Carlos Ortiz
Mensajes: 872
Registrado: Mié Jul 01, 2009 5:44 pm
Ubicación: Argentina - Córdoba
Contactar:

Re: Scrolling en Browse al estilo Excel

Mensaje por Carlos Ortiz »

Le puse un waiton y waitoff en el onchange de la clase y llamativamente dejo de fallar pero claro por cada browse que tiene un detalle me muestra un pantallazo cada vez que me muevo con el scroll del mouse.
Que efecto hace el waiton o enviar un cartel en pantalla que no pueda lograr lo mismo con un refresh o us setfocus???

Código: Seleccionar todo

METHOD WMMouseWheel( nWParam, nLParam ) CLASS TBrowse
   LOCAL nKeys, nDelta, nXPos, nYPos
   STATIC LastOnChange := 0

   IF Len( ::aDisplay ) == 0
      RETURN Nil
   ENDIF

   ::CancelEdit()

   nKeys  := LoWord( nWParam )
   nDelta := HiWord( nWParam )
   nXPos  := LoWord( nLParam )
   nYPos  := HiWord( nLParam )

   IF abs(nDelta) = 120
      IF ::nLen=0 .or. (::nKeyNo=::nLen .and. nDelta<0) .or. (::nKeyNo=1 .and.  nDelta>0)
         //LogDebug("esta en el primero o en el ultimo")
         RETURN NIL
      ENDIF
   ENDIF

   IF abs(nDelta) = 120
      IF nDelta > 0
         IF ::nKeyNo > 5
            ::Skip(-5)
            ::Refresh( .f. )
         ELSE
            ::GoPageUp()
         ENDIF
      ELSEIF nDelta = -120
         IF ::nKeyNo + 5 < ::nLen
            ::Skip(5)
            ::Refresh( .f. )
         ELSE
            ::GoPageDown()
         ENDIF
      ENDIF[code][code]
[/code]
IF ::EventAssigned( "OnChange" )
waiton("Actualizando los datos de los detalles") /// CON ESTO ANDA PERFECTO, SACO EL WAITON Y FALLA
IF lastOnChange <> ::nKeyNo
::OnChange(.t.)
LastOnChange := ::nKeyNo
ENDIF
waitoff()
ENDIF
ENDIF
RETURN Nil
[/code]
Cualquier ayuda será bienvenida, gracias.
Responder