Forzar salida del get con ACTION

Post Reply
User avatar
Andrés González
Posts: 625
Joined: Thu Jan 19, 2006 10:45 am
Location: Mallorca

Forzar salida del get con ACTION

Post by Andrés González »

Hola de nuevo, estoy probando la clausula ACTION del get y me preguntaba si hay forma de forzar la salida del campo una vez se ha ejecutado el ACTION. Con VALID va estupendo cuando pulso intro en el campo que tiene el foco me hace la comprobación del campo me lo actualiza si cambio los datos y me pasa al get siguiente. Si lo hago con el botón que activa el ACTION me hace lo mismo pero no me pasa al get siguiente, me actualiza el campo pero con el cursor le tengo que volver a pulsar intro de nuevo para que ejecute valid y pase a la linea siguiente. Los dos procesos tanto la clausula VALID como ACTION ejecuta la misma función solo que la VALID pulsas antes un intro y el ACTION solo es una pulsación de ratón. Hay alguna forma de forzar la salida al campo siguiente, lo he intentado mandando un CHR(13) osea un intro pero no funciona, alguno tiene una solución.

Code: Select all


                    
              @ f_px[n] - nInicio + 0.3 , f_py[n] - 2  GET &oGet VAR &v_temp OF      oDlgAlta        ;
                                                                             SIZE    v_long , v_high ;
                                                                             PICTURE &p              ; 
                                                                             VALID   &v_fval         ;
                                                                             ACTION  ( &v_fval, chr(13))    ;
                                                                             UPDATE

 
Saludos

Andrés González desde Mallorca
User avatar
Willi Quintana
Posts: 859
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú
Contact:

Re: Forzar salida del get con ACTION

Post by Willi Quintana »

Prueba asi;

Code: Select all

 f_px[n] - nInicio + 0.3 , f_py[n] - 2 ;
      GET &oGet VAR &v_temp OF      oDlgAlta        ;
             SIZE    v_long , v_high ;
             PICTURE &p              ; 
             VALID   &v_fval         ;
             ACTION  ( &v_fval, chr(13), .t. )    ;   // al final va un .t. 
             UPDATE


 
User avatar
Andrés González
Posts: 625
Joined: Thu Jan 19, 2006 10:45 am
Location: Mallorca

Re: Forzar salida del get con ACTION

Post by Andrés González »

Gracias Willi, ayer ya había hecho esta prueba y no, no funciona. Incluso hice el inverso primero el chr(13) y luego la función, pero no se entera del chr(13). Supongo que debe haber una forma de decirle al get que estoy editando que pierda el foco y pase al siguiente, pero no se me ocurre como. No se como hacer referencia al get que estoy editando. He provado con todo lo que se me ocurre SELF:killfocus(), ::oget:killfocus, y no funciona.
Saludos

Andrés González desde Mallorca
User avatar
Andrés González
Posts: 625
Joined: Thu Jan 19, 2006 10:45 am
Location: Mallorca

Re: Forzar salida del get con ACTION

Post by Andrés González »

Antonio se te ocurre alguna solución para este tema, resulta que esta forzado al mismo get cuando se declara el boton. Se tendría que poder pasar al siguiente Get o a otro determinado. De la manera que esta implementado, cuando pulsas el boton te ejecuta el codeblock y te vuelve el control al mismo get, lo que te obliga a pulsar de nuevo el intro para que se ejecute el valid y poder seguir. oThis:SetFocus() fuerza que siempre se quede con el foco aunque tu antes le digas que vaya a otro get. Debería permitir el desplazamiento del foco o incluso que si el codeblock devuelve .t. deje ir al siguiente objeto. Vamos son ideas !!!

Code: Select all

METHOD CreateButton() CLASS TGet

   local oThis := Self

   if ValType( ::bAction ) == "B" .and. Upper( ::ClassName() ) == "TGET"
      if Empty( ::cBmpName )
         @ 0, ::nWidth - ::nHeight BUTTONBMP ::oBtn OF Self ;
            ACTION ( Eval( oThis:bAction, oThis ), oThis:SetFocus() ) ;
            SIZE ::nHeight - 4, ::nHeight - 4 PIXEL
         if Empty( ::oBtn:hBitmap )
            ::oBtn:SetText( "..." )
         endif
      else
         @ 0, ::nWidth - ::nHeight BUTTONBMP ::oBtn OF Self ;
            ACTION ( Eval( oThis:bAction, oThis ), oThis:SetFocus() ) ;
            SIZE ::nHeight - 4, ::nHeight - 4 PIXEL BITMAP ::cBmpName
      endif
      ::oBtn:lCancel = .T. // so the GET VALID is not fired when the button is focused

      /*
      // We force a WM_NCCALCSIZE msg to be sent to the GET
      SetWindowPos( ::hWnd, 0, 0, 0, 0, 0,;
                    nOr( SWP_NOMOVE, SWP_NOSIZE, SWP_NOZORDER, SWP_FRAMECHANGED ) )
      */
   endif

return nil


 
Saludos

Andrés González desde Mallorca
User avatar
Daniel Garcia-Gil
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita
Contact:

Re: Forzar salida del get con ACTION

Post by Daniel Garcia-Gil »

Saludos Andres...

Prueba hacer esto....

Code: Select all

   @ nX, nY GET oGet VAR nVar picture "999.999" ;
   ACTION( If( oGet:lValid, ( Mi_Accion(), PostMessage( oGet:hWnd, WM_KEYDOWN, 13 ) ), )  ) ;
   VALID( nVar > 100 )
our best documentation is the source code
Isla de Margarita Venezuela.
danielgarciagil@gmail.com
http://tdolphin.blogspot.com/
https://www.dropbox.com/referrals/NTI5N ... rc=global9
User avatar
ADBLANCO
Posts: 299
Joined: Mon Oct 22, 2007 3:03 pm
Location: Valencia - Venezuela

Re: Forzar salida del get con ACTION

Post by ADBLANCO »

sustituye el chr(13) por __Keyboard(CHR(13))
Saludos

Angel, Valencia, Venezuela

xH .997 - FW 7.9 - BCC55 - WorkShop - MySql
User avatar
Willi Quintana
Posts: 859
Joined: Sun Oct 09, 2005 10:41 pm
Location: Cusco - Perú
Contact:

Re: Forzar salida del get con ACTION

Post by Willi Quintana »

Prueba con ON CHANGE (.....) en vez de ACTION,,
Salu2
User avatar
Andrés González
Posts: 625
Joined: Thu Jan 19, 2006 10:45 am
Location: Mallorca

Re: Forzar salida del get con ACTION

Post by Andrés González »

Gracias a todos, unos comentarios y os digo como lo he solucionado.

ADBLANCO: Ya habíamos deducido que el chr(13) no hacia nada ya que no ejecuta ninguna acción lo que aporta es un carácter, pero si empleo el __keyboard() lo que me hace es quedarse el get sin el cursor y no me pasa al siguiente get.

Daniel Garcia: Perfecto, me ha ido de maravilla pero he tenido que hacer una pequeña variante. Nunca había empleado esta función. Mil gracias.

Willi: Gracias ya no hizo falta, ya que el aporte de Daniel lo solucionó de forma elegante.

Finalmente ha quedado funcionando de la siguiente manera:

Code: Select all


  @ f_px[n] - nInicio + 0.3 , f_py[n] - 2  GET &oGet VAR &v_temp OF  oDlgAlta ;
                                                            SIZE    v_long , v_high ;
                                                            PICTURE &p               ;
                                                            VALID   &v_fval          ;
                                                            ACTION  ( &v_fval, PostMessage( ::hWnd, WM_KEYDOWN, 13 ) ) ;
                                                            UPDATE

 

Questión: Si se decide desde ACTION mandar el foco a otro get, como comenté anteriormente, se podría hacer? Por ejemplo cuando tu seleccionas un dato de una lista que actualiza tu get, te puede interesar que en función de dato seleccionado te pueda dirigir a otro get para rellenar datos. De esta manera solo hemos conseguido pasar al get siguiente.
Saludos

Andrés González desde Mallorca
User avatar
acuellar
Posts: 1312
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Forzar salida del get con ACTION

Post by acuellar »

Hola a todos

Yo en esto del Get y BITMAP cuando llama la función donde muestra el Browse para seleccionar, cuando se pulsa doble click,
sale error

Para solucionarlo he tenido que ponerle una pausa

oBrw:bLDblClick:={ || ( MsgRun(""),lOk:=.T.,oDlg:End() ) }

Cuando finaliza el Dialogo

VALID ( iif( lOk, ( oGet:VarPUT(CN_RUC),oGet:Refresh() ), ), .T. )

Quizas alguien ha tenido el problema, y me pueda dar una ayuda

Saludos

Adhemar
Saludos,

Adhemar C.
antolin
Posts: 475
Joined: Thu May 10, 2007 8:30 pm
Location: Sevilla

Re: Forzar salida del get con ACTION

Post by antolin »

Andrés, prueba a sustituir PostMessage( ::hWnd, WM_KEYDOWN, 13 ) por: PostMessage( oCtrl:hWnd, WM_SETFOCUS )

Si no funciona prueba con: PostMessage( oCtrl:hWnd, FM_CHANGEFOCUS )

En _, oCtrl sería el control que quieres que tome el foco.
Peaaaaaso de foro...
User avatar
Andrés González
Posts: 625
Joined: Thu Jan 19, 2006 10:45 am
Location: Mallorca

Re: Forzar salida del get con ACTION

Post by Andrés González »

Antolín, gracias pero tal cual lo he puesto me funciona perfectamente. ::hWhn hace referencia al handle que estas editando en ese momento y lo que hace es mandarle el intro una vez ejecutado el codeblock para que pase al siguente, pero claro, igual si lo ejecuto tal como lo pones tu, puedo ir a otro get determinado. Tengo que revisar esta función pues veo que da mucho juego. Mil gracias.
Saludos

Andrés González desde Mallorca
Post Reply