when de los gets

when de los gets

Postby Leonor Gonzalez » Wed Oct 26, 2005 2:54 pm

Hola Amigos: tengo una dialog con muchos gets, cada vez que uno de ellos pierde foco me revisa todas las condiciones when de cada get, esto es normal, es algo de las clases? o me esta pasando algo raro.
Saludos. Gracias.
Leonor Gonzalez
 
Posts: 22
Joined: Fri Oct 14, 2005 12:18 pm

Postby DanielPuente » Thu Oct 27, 2005 12:41 am

Leonor:

La condicion when de tus gets se evaluan todas juntas al activar el dialogo que los contiene, por ejemplo si vos tenes en variables locales las condiciones asociadas a cada get al activarse el dialogo los que no cumplan la condicion when estaran deshabilitados. Una vez que el dialogo esta activado si cambia el valor de la condicion when de algun get le tenes que hacer un :refresh().

Saludos,
Daniel Puente
Mar del Plata, Argentina
danielpuente@speedy.com.ar
puenteda@hotmail.com
DanielPuente
 
Posts: 108
Joined: Sun Oct 09, 2005 6:12 pm
Location: Mar del Plata - Argentina

Postby Leonor Gonzalez » Thu Oct 27, 2005 2:22 pm

Esta bien lo que me explicas, y así esta trabajando, pero lo que me hace es lo siguiente: ejecuta los when de cada get en el activate del dialog, despues por cada get que pierde foco vuelve a ejecutar los when de cada get, en el dialog veo como se refrescan todos los get por cada uno que pierde foco y me puse carteles y veo como pasa por todos los get en lugar de hacer el valid de ese y el when del proximo a tomar foco unicamente, no hay ningun refresh puesto en ningun lugar, evidentemente estoy armando mal el vector que tiene los when guardados. Gracias. Leonor.
Leonor Gonzalez
 
Posts: 22
Joined: Fri Oct 14, 2005 12:18 pm

Postby DanielPuente » Fri Oct 28, 2005 12:55 am

Leonor:

Mostranos el codigo involucrado.

Saludos,
Daniel Puente
Mar del Plata, Argentina
danielpuente@speedy.com.ar
puenteda@hotmail.com
DanielPuente
 
Posts: 108
Joined: Sun Oct 09, 2005 6:12 pm
Location: Mar del Plata - Argentina

Postby Antonio Linares » Fri Oct 28, 2005 5:39 am

Leonor,

Todos los WHEN de los GETs tienen que evaluarse, porque en función del cambio que se haya hecho, podría afectarles.
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42122
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby Leonor Gonzalez » Fri Oct 28, 2005 12:29 pm

Este es el código que estoy utilizando:

// Genero el objeto get, esto esta dentro de un for
ObjGet := TGet():New( (aDefFields[i][1]+1)*GET_CHARPIX_H, aDefFields[i][2]*GET_CHARPIX_W, bBloq,, nWidth*GET_CHARPIX_W, 11.3, cPicture,,,,oFont, .F.,, .T.,, .F.,, .F., .F.,, .F.,,, .F. )
//leo la clausula when para ese get
lcWhen := aDefFields[i][6]
//armo un bloque con la clausula y otra variable
lcWhenBloq := "{||nFormEditPos:= " + STR( i, 3, 0 ) + "," + lcWhen + "}"
// le asigno la evaluacion del bloque al dato bWhen del get
ObjGet:bWhen := &( lcWhenBloq )
// le asigno la lectura del valid al objeto get
ObjGet:bValid := &( aDefFields[i][7] )
Cada vez que un get pierde foco los pasos que realiza son los siguientes:
* pasa por lostfocus de la clase tget
* entra en gotfocus de la clase tget para asignarle el foco al get siguiente
* evalua el valid del get que perdio foco
* realiza todos los when y en las ventanas que tengo mas de 30 get se ve como pasa uno por uno aparte de los mensajes
* le da foco al proximo get
Muchas Gracias. Saludos. Leonor
Leonor Gonzalez
 
Posts: 22
Joined: Fri Oct 14, 2005 12:18 pm

Postby DanielPuente » Fri Oct 28, 2005 12:59 pm

Leonor:

Estuve prestando atencion a un dialogo con whens y asi es, se evaluan todos los when, pero es el comportamiento normal y deseable (ademas ya lo confirmo el propio Antonio). En el codigo no se ve que contiene aDefFields[i][6] como condicion de los when, pero de todas maneras porque no queres que se evaluen todos los when de los gets ?. Sino, si queres controlar vos el momento de habilitar o deshabilitar los gets tendrias que hacerlo vos con :Enable() y :Disable() en cada get en el momento que lo necesites.

Saludos,
Daniel Puente
Mar del Plata, Argentina
danielpuente@speedy.com.ar
puenteda@hotmail.com
DanielPuente
 
Posts: 108
Joined: Sun Oct 09, 2005 6:12 pm
Location: Mar del Plata - Argentina

Postby Leonor Gonzalez » Fri Oct 28, 2005 5:58 pm

Bien en realidad esto lo encuentro por otro problema relacionado que tengo: cuando un get pierde foco realiza los siguientes pasos:
* entra en lostfocus de la clase tget
* entra en gotfocus de la clase tget para darle foco al proximo get
* realiza la condicion valid del get que perdio foco, cuando esa condicion no se cumple hace que pierda foco el get proximo y le vuelve a colocar el foco al que esta validando. Para hacer que pierda foco el get siguiente verifica tambien la condicion valid del mismo cuando el proximo get no es obligatorio esta todo bien, pero si el proximo get es obligatorio entra en un blucle y no puede salir de el.
Como puedo solucionar ese problema.
Mil Gracias por el tiempo que me estan dedicando. Saludos. Leonor
Leonor Gonzalez
 
Posts: 22
Joined: Fri Oct 14, 2005 12:18 pm

Postby DanielPuente » Fri Oct 28, 2005 7:09 pm

Leonor:

A que te referis con "entra en un blucle y no puede salir de el", cuando un get no cumple el valid pasa lo que vos decis, el foco 'rebota' y vuelve al get que no cumple el valid y no podes ir al siguiente hasta que no se cumpla, salvo que tengas especificado por ejemplo la tecla VK_UP para devolver .T. en el valid y en ese caso x ejemplo volver al get anterior.

Saludos,
Daniel Puente
Mar del Plata, Argentina
danielpuente@speedy.com.ar
puenteda@hotmail.com
DanielPuente
 
Posts: 108
Joined: Sun Oct 09, 2005 6:12 pm
Location: Mar del Plata - Argentina

Postby Leonor Gonzalez » Fri Oct 28, 2005 8:47 pm

Te explico puntualmente un caso en el que me entra en un bucle y no sale de el. Vamos a suponer que tengo 4 get trabajando en una ventana:

Codigo: primer get con valid verificando que no exista en la tabla y mensaje de codigo existente
Nombre: segundo get con valid que no sea vacio y mensaje tiene que ingresar un dato si o si
Direccion: tercer get no importa con que
Localidad: cuarto get no importa con que

Toma foco codigo, ingreso un codigo existente presiono enter, entra en lostfocus de clase tget, entra en gotfocus de clase tget pasando el foco al segundo get, valida el primer get como existe efectivamente rebota y quiere volver el foco al primer get, entonces entra en lostfocus el segundo get lo valida y como es vacio me muestra simultaneamente los dos msginfo y no para hasta que aborto el programa. Yo tengo una funcion armada que revisa cuando el último get pierde foco guarda todos los gets en la tabla correspondiente, esa funcion esta asignada al dato bLostFocus de cada get pero previamente conte los gets activos en la ventana y lo primero que pregunto es si es el último get lo hace sino sigue. Si en el valid del segundo get no hay ninguna condicion el foco rebota al primer get y queda ahi hasta que coloco un codigo inexistente como corresponde, el problema se presenta cuando el valid del get siguiente tiene una condicion obligatoria. Nuevamente Mil Gracias. Saludos. Leonor.
Leonor Gonzalez
 
Posts: 22
Joined: Fri Oct 14, 2005 12:18 pm

Postby DanielPuente » Fri Oct 28, 2005 9:39 pm

Leonor:

Eso no deberia pasar, el valid del segundo get no deberia actuar si no se cumple el del primero. El problema debe estar en el codigo que debes tener asignado a algun :bGotFocus o :bLostFocus que debe hacer que se refresquen los dos gets y actuen ambos valids.

Para no hacerla tan larga por aca hace lo siguiente, mandame un prg reducido ilustrativo del problema que yo pueda compilar, probar y corregir a mi correo.

Saludos,
Daniel Puente
Mar del Plata, Argentina
danielpuente@speedy.com.ar
puenteda@hotmail.com
DanielPuente
 
Posts: 108
Joined: Sun Oct 09, 2005 6:12 pm
Location: Mar del Plata - Argentina


Return to FiveWin para CA-Clipper

Who is online

Users browsing this forum: No registered users and 8 guests