Page 1 of 1

Problemas con Valid, MsgRun y button

Posted: Thu Nov 29, 2007 8:58 pm
by fgondi
Hola gente,

En mi sistema tengo definido un valid de un get en el que algunas de las tareas que realiza las hace mostrando un msgrun en pantalla.

El problema viene cuando estando en ese get se intenta pulsar en alguno de los button que tengo definidos en el resto de la ventana.
Como al pulsar en el button el get pierde el foco ejecuta el valid y tras terminar y debido a que muestra varios msgrun ya no recuerda que se había pulsado el botón y ejecuta la acción del mismo.

El probado el mismo procedimiento quitando los msgrun y funciona sin problemas, por lo que esta claro que el problema lo tengo por el msgrun.

Alguien me puede ayudar?
Muchas gracias por vuestra atención

Posted: Thu Nov 29, 2007 9:42 pm
by Antonio Linares
Fernando,

Entonces el problema es que no se ejecuta la acción del botón, si ?

Posted: Thu Nov 29, 2007 9:45 pm
by Ruben D. Fernandez
Fernando:

Intenta colocarle la clausula CANCEL a los botones que
no deben ejecutar el valid del get.

Saludos.

Ruben Fernandez

Posted: Fri Nov 30, 2007 10:17 am
by fgondi
Antonio,

Correcto, el problema es que no ejecuta la acción del botón.
Pero si quito los msgrun, osea hago las validaciones sin mensaje en pantalla, tras terminar si me ejecuta la acción del botón

Ruben,

No me gustaría tener que poner la clausa CANCEL, porque si me interesa que ejecute el valid.

Gracias por vuestras respuestas

Posted: Fri Nov 30, 2007 12:41 pm
by ADBLANCO
Y, es necesario que sea en el valid ? , no te sirve en 'ON CHANGE'

Posted: Fri Nov 30, 2007 3:47 pm
by fgondi
Hola ADBLANCO,

La validación debe hacerla aunque no cambie el contenido del get, por lo no que no puedo usar ON CHANGE

Gracias por tu respuesta.

Posted: Fri Nov 30, 2007 3:50 pm
by Antonio Linares
Fernando,

Y ese Get puede pasarle el foco a otro control que no sea el botón ?

El botón se queda con el foco ?

Posted: Fri Nov 30, 2007 6:39 pm
by fgondi
Antonio,

El get no pas el foco al botón. Hay una serie de get's en cadena y al intro el foco va cambiando de un get a otro, ejecutando el valid del get que abandona y pasando el foco al get nuevo, y eso funciona sin problemas.

En la misma ventana hay un boton que al pulsarlo con el ratón hace una determinada tarea. Pues bien cuando con el ratón pulsan en el boton ejecuta el valid del get donde se encontraba el foco y si este contiene mensajes msgrun, no realiza la tarea del boton. Ejecuta el valid y el foco vuelve al mismo get.
Si el get no contiene mensajes msgrun, ejecuta el valid y posteriormente a tarea enconmendada al action del boton que han pulsado con el ratón.

Gracias por vuestras respuestas, espero haberlo aclarado algo.

Posted: Fri Nov 30, 2007 6:53 pm
by fgondi
Antonio,

Dentro de samples esta el prg dbf01.prg, bien pues para reproducirlo sólo hay que colocar un valid al primer get's que se visualiza:

Code: Select all

      REDEFINE GET oDbf:First ID ID_NAME OF oDlg UPDATE ;
      MESSAGE "Please type here the first name of the customer" ;
      Valid ps_tt()

static func ps_tt()
local i, j := 1
msgrun('hola', 'hola', {|| i:= j +1} )
return .T.
De esta forma al entrar en la ventana el foco está en el primer get. Ahora intentamos pulsar con el ratón en botón "next" y la primera vez que se pulsa el botón no salta de registro.

Posted: Fri Nov 30, 2007 8:33 pm
by Antonio Linares
Fernando,

Prueba así :-)

Code: Select all

static func ps_tt() 
local i, j := 1 
local h := GetFocus()
msgrun('hola', 'hola', {|| i:= j +1} ) 
if GetClassName( h ) == "Button"
   PostMessage( h, FM_CLICK )
endif   
return .T. 

Posted: Mon Dec 03, 2007 7:24 am
by fgondi
Antonio,

Funciona perfectamente.

Muchas gracias por la respuesta.