Felicitaciones por su espacio

Como sincronizo el movimiento de las filas de una datawindow cuando realizo el movimiento del scroll vertical con el mouse o bien clickeando las flechas del scroll hacia arriba o hacia abajo.

1 respuesta

Respuesta
1
Las barras de scroll tanto la vertical como la horizontal funcionan automáticamente y permite el desplazo en las direcciones que estas indican.
Sin embargo, el caso del datawindow es un poco especial, pues existe un concepto de posicionamiento por tupla el cual se divide en 2
*- un apuntador o puntero
*- un posicionador
No necesariamente uno va de la mano con el otro, la manera de hacer una coordinación de estos dos conceptos, es por medio programático, simplemente indicar el siguiente script en el evento ROWFOCUSCHANGED
(PERSONALMENTE ASI LO UTILIZO)
IF (THIS.RowCount() > 0) THEN
xDummy = THIS.SelectRow(0, FALSE)
IF (currentrow > 0) THEN
xDummy = THIS.SelectRow(currentrow, TRUE)
END IF
END IF
EXPLICANDO:
THIS = al objeto en que esta posicionado
Currentrow = un parámetro de referencia que posse el evento y que indica cual es la tupla que tiene el foco.
Por ultimo la función SelectRow( )
Esta posee 2 parámetros de referencia el primero es la linea, la cual puede ser 0 indicando que se refiere a todo el datawindow, y el otro es de tipo boolean el cual indica si enciende o apaga el indicador de selección, false es apagado y true encendido.
Esto hace funcionar lo que imagino necesitas.
Otra alternativa:
Existe una manera de señalar visualmente la intentar del apuntador para saber donde esta situado el cursor.
SetRowFocusIndicator(<indicador>)
Este enciende un indicador gráfico en la fila del datawindow según la intentar del apuntador.
Creo que no me supe explicar, por lo tanto voy a ser un poco más gráfico:
La idea es que tengo una dw, la cual presenta varias filas, si me muevo con las flechas del teclado, el focus sobre el registro actual se mueve en el mismo sentido que las flechas colocando el current del registro actual en la ultima fila que he seleccionado.
Lo que necesito es hacer lo mismo, solo que moviendo el scroll vertical o las flechas del scroll por medio del mouse, y que el focus del current registro se cambie en el mismo sentido que lo hago con el mouse sobre el scroll vertical.
Creo entender lo que intentas hacer, aun no he tenido la necesidad de hacer este proceso pero, existen 2 eventos en el datawindow que supuestamente deben controlar estas acciones:
Scrollhorizontal
Scrollvertical
Los he estado probando y no funcionan tal y como lo dice la ayuda de pb. (¿No se si falta algo por definir?), aun así la única solución que se me ocurre es esconder las reglas vertical u horizontal, o las 2 al mismo tiempo y añadir estas con objetos individuales
VScrollBar
HScrollBar
Y programaticamente poder manejar el datawindow con estos 2 objetos adicionales simulando que pertenecen a la ventana, (aunque esto parece inventar el agua azucarada), esta solución te da la ventaja de poder controlar más afondo los movimientos del datawindow
Esta solución es un poco arriesgada porque hay que programar las mismas acciones que hacen las barras automáticas del datawindow, y cuanquiera que no funcione adecuadamente puede provocarte fuertes dolores de cabeza, aunque todo depende de la dependencia de este proceso.
Echale un vistazo a la ayuda incluida en pb de los objetos que te propongo (personalmente ya los use y si funcionan bien)
Echale ganas y adelante.
Espero que esto pueda ser de utilidad para resolver tu problema
saludos
agdsys
En el evento scrollvertical del dw, coloque el siguiente script
string PrimerReg
long Reg
//
PrimerReg = dw_1.Object.DataWindow.FirstRowOnPage
Reg = long( PrimerReg )
dw_1.setrow( Reg )
Funciona para registros de pantalla completas y es lo que buscaba. Muchas gracias por el interés prestado.
Me da mucho gusto, yo lo probé pero no me respondió nada este evento, estoy trabajando con la version 8.01 no se si eso tenga que ver o algo más me falto, sin embargo permíteme hacerte ver que los eventos que maneja pb son disparados en momentos que a lo mejor no son deseados, por lo que te propongo que encierres tu script en un if evaluando el rowcount() sea mayor a 0 por si las moscas, créeme que a veces puedes contar con sorpresas.
De nuevo me alegro por ti

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas