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 de Antonio Garcia
1
1
Antonio Garcia, clipper todas sus versiones (manejo total) power builder todas...
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