Problemas con Valid, MsgRun y button

Post Reply
User avatar
fgondi
Posts: 636
Joined: Fri Oct 07, 2005 6:58 am
Location: Palencia, España
Contact:

Problemas con Valid, MsgRun y button

Post 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
Un saludo
Fernando González Diez
ALSIS GHE Sistemas Informáticos
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Fernando,

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

Antonio Linares
www.fivetechsoft.com
Ruben D. Fernandez
Posts: 189
Joined: Sun Jul 08, 2007 1:46 am
Location: Uruguay

Post by Ruben D. Fernandez »

Fernando:

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

Saludos.

Ruben Fernandez
User avatar
fgondi
Posts: 636
Joined: Fri Oct 07, 2005 6:58 am
Location: Palencia, España
Contact:

Post 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
Un saludo
Fernando González Diez
ALSIS GHE Sistemas Informáticos
User avatar
ADBLANCO
Posts: 299
Joined: Mon Oct 22, 2007 3:03 pm
Location: Valencia - Venezuela

Post by ADBLANCO »

Y, es necesario que sea en el valid ? , no te sirve en 'ON CHANGE'
User avatar
fgondi
Posts: 636
Joined: Fri Oct 07, 2005 6:58 am
Location: Palencia, España
Contact:

Post 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.
Un saludo
Fernando González Diez
ALSIS GHE Sistemas Informáticos
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post 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 ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
fgondi
Posts: 636
Joined: Fri Oct 07, 2005 6:58 am
Location: Palencia, España
Contact:

Post 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.
Un saludo
Fernando González Diez
ALSIS GHE Sistemas Informáticos
User avatar
fgondi
Posts: 636
Joined: Fri Oct 07, 2005 6:58 am
Location: Palencia, España
Contact:

Post 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.
Un saludo
Fernando González Diez
ALSIS GHE Sistemas Informáticos
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post 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. 
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
fgondi
Posts: 636
Joined: Fri Oct 07, 2005 6:58 am
Location: Palencia, España
Contact:

Post by fgondi »

Antonio,

Funciona perfectamente.

Muchas gracias por la respuesta.
Un saludo
Fernando González Diez
ALSIS GHE Sistemas Informáticos
Post Reply