Inicio > Power Builder > agdsys > Felicitaciones por su espacio

Felicitaciones por su espacio

Experto:
Usuario:
Fecha: 21/11/2008
Valoración: (3,00 sobre 5) Categoría: Power Builder
21/11/2008
vmortiz28, usuario preguntando en Power Builder
Usuario
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.
21/11/2008
vmortiz28, experto respondiendo en Power Builder
Experto
las barras de scroll tanto la vertical como la orizontal funcionan automaticamente 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 coordinacion de estos dos conceptos, es por medio programatico, 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 parametro de referencia que posse el evento y que indica cual es la tupla que tiene el foco.

por ultimo la funcion SelectRow( )
esta posee 2 parametros 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 seleccion, false es apagado y true encendido.
esto hace funcionar lo que imagino necesitas.

OTRA ALTERNATIVA:
existe una manera de señalar visualmente la posicion del apuntador para saber donde esta situado el cursor.

SetRowFocusIndicator(<indicador>)
este enciende un indicador grafico en la fila del datawindow segun la posicion del apuntador.


espero esto pueda servirte de algo
saludos
21/11/2008
vmortiz28, usuario preguntando en Power Builder
Usuario
Creo que no me supe explicar, por lo tanto voy a ser un poco mas grafico:
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.
21/11/2008
vmortiz28, experto respondiendo en Power Builder
Experto
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 asi la unica solucion 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 solucion te da la ventaja de poder controlar mas afondo los movimientos del datawindow

esta solucion es un poco arriesgada porque hay que programar las mismas acciones que hacen las barras automaticas del datawindow, y cuanquiera que no funcione adecuadamente puede provocarte fuertes dolores de cabeza, aunque todo depende de la dependencia de este proceso.
hechale un vistazo a la ayuda incluida en pb de los objetos que te propongo (personalmente ya los use y si funcionan bien)
hechale ganas y adelante.

espero que esto pueda ser de utilidad para resolver tu problema
saludos
agdsys
21/11/2008
vmortiz28, usuario preguntando en Power Builder
Usuario
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 interes prestado.
21/11/2008
vmortiz28, experto respondiendo en Power Builder
Experto
me da mucho gusto, yo lo probe pero no me respondio nada este evento, estoy trabajando con la version 8.01 no se si eso tenga que ver o algo mas me falto, sin embargo permiteme 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, creeme que a veces puedes contar con sorpresas.

de nuevo me alegro por ti
saludos
agdsys
21/11/2008
vmortiz28, usuario preguntando en Power Builder
Usuario
Bien. Una respuesta aceptable.
Enlaces patrocinados