Page 1 of 1

Cambio a la clase GET

PostPosted: Wed Aug 22, 2012 11:24 pm
by Marcelo Via Giglio
Antonio,

cuando se define un GET con un boton interno, cuando se llama la acción se devuelve el foco al get, sería interesante que se pueda modificar este comportamiento, y permitir bajo definición que el foco no regrese de manera automática, en ese caso se puede aumentar una DATA lKeepFocus (por defecto .T.) y modifcar las llamadas a bAction como sigue

Code: Select all  Expand view
{|| Eval( oThis:bAction, oThis ), IF( ::lKeepFocus, oThis:SetFocus(), NIL ) }


espero se tome en cuenta esta pequeña sugerencia que ayudaría muchísimo, además, que no rompería compatibilidad

gracias

Marcelo

Re: Cambio a la clase GET

PostPosted: Thu Aug 23, 2012 9:25 am
by Antonio Linares
Marcelo,

Muy buena sugerencia, incluida para próximo build, gracias! :-)

Re: Cambio a la clase GET

PostPosted: Thu Aug 23, 2012 11:50 am
by Marcelo Via Giglio
Antonio,

muchas gracias por tomar en cuenta la solicitud, muy agradecido.

Abusando y aprovechando el impulto :D sería bueno retomar el tema del ON INIT en cada control http://forums.fivetechsupport.com/viewtopic.php?f=22&t=9676, su utilidad es muy grande ya que hace del código mas sencillo y legible

REDEFINE GET ..... ON INIT ::lKeepFocus := .F.,
REDEFINE BUTTON ..... ON INIT IF( lActivo, ::Enable, ::Disable )
.....


si se llaman los INIT de los controles antes del INIT del DIALOG o WINDOW, pienso que no habrían problemas colaterales, que piensan?

Bueno refresco la idea inicial de Rafa, gracias por tu tiempo

saludos

Marcelo

Re: Cambio a la clase GET

PostPosted: Thu Aug 23, 2012 12:46 pm
by Antonio Linares
Marcelo,

La idea es buena, pero antes de implementarlo en todos los controles, habría que probar en un par de classes (GET y BUTTON tal vez sean las mas usadas) y ver si hay algun efecto colateral o va bien.

Para esto es muy importante las pruebas de todos vosotros, para saber si va bien o no. Sobre todo, que no se rompa la compatibilidad con versiones anteriores

Re: Cambio a la clase GET

PostPosted: Thu Aug 23, 2012 12:50 pm
by Marcelo Via Giglio
Antonio,

gracias por el interés, bueno no se si sirva haré la implementación a mi manera y publico los resultados

saludos

Marcelo

Re: Cambio a la clase GET

PostPosted: Thu Aug 23, 2012 4:40 pm
by Marcelo Via Giglio
Holas,

esto inicialmente funciona

Code: Select all  Expand view
#include "fivewin.ch"

#xcommand @ <nRow>, <nCol> BUTTON [ <oBtn> PROMPT ] <cCaption> ;
             [ SIZE <nWidth>, <nHeight> ] ;
             [ ACTION <uAction> ] ;
             [ <default: DEFAULT> ] ;
             [ <of:OF, WINDOW, DIALOG> <oWnd> ] ;
             [ <help:HELP, HELPID, HELP ID> <nHelpId> ] ;
             [ FONT <oFont> ] ;
             [ <pixel: PIXEL> ] ;
             [ <design: DESIGN> ] ;
             [ MESSAGE <cMsg> ] ;
             [ <update: UPDATE> ] ;
             [ WHEN <WhenFunc> ] ;
             [ VALID <uValid> ] ;
             [ <lCancel: CANCEL> ] ;
             [ ON INIT <uInit> ] ;
      => ;
         [ <oBtn> := ] TButton():New( <nRow>, <nCol>, <cCaption>, <oWnd>,;
            <{uAction}>, <nWidth>, <nHeight>, <nHelpId>, <oFont>, <.default.>,;
            <.pixel.>, <.design.>, <cMsg>, <.update.>, <{WhenFunc}>,;
            <{uValid}>, <.lCancel.>, [{|Self|<uInit>}] )



#command @ <nRow>, <nCol> GET [ <oGet> VAR ] <uVar> ;
            [ <dlg: OF, WINDOW, DIALOG> <oWnd> ] ;
            [ <pict: PICT, PICTURE> <cPict> ] ;
            [ VALID <ValidFunc> ] ;
            [ <color:COLOR,COLORS> <nClrFore> [,<nClrBack>] ] ;
            [ SIZE <nWidth>, <nHeight> ]  ;
            [ FONT <oFont> ] ;
            [ <design: DESIGN> ] ;
            [ CURSOR <oCursor> ] ;
            [ <pixel: PIXEL> ] ;
            [ MESSAGE <cMsg> ] ;
            [ <update: UPDATE> ] ;
            [ WHEN <uWhen> ] ;
            [ <lCenter: CENTER, CENTERED> ] ;
            [ <lRight: RIGHT> ] ;
            [ ON CHANGE <uChange> ] ;
            [ <readonly: READONLY, NO MODIFY> ] ;
            [ <pass: PASSWORD> ] ;
            [ <lNoBorder: NO BORDER, NOBORDER> ] ;
            [ <help:HELPID, HELP ID> <nHelpId> ] ;
            [ ACTION <uAction> ] ;
            [ BITMAP <cBmpName> ] ;
            [ CUEBANNER <cCueText> ] ;
            [ ON INIT <uInit> ] ;
       => ;
          [ <oGet> := ] TGet():New( <nRow>, <nCol>, bSETGET(<uVar>),;
             [<oWnd>], <nWidth>, <nHeight>, <cPict>, <{ValidFunc}>,;
             <nClrFore>, <nClrBack>, <oFont>, <.design.>,;
             <oCursor>, <.pixel.>, <cMsg>, <.update.>, <{uWhen}>,;
             <.lCenter.>, <.lRight.>,;
             [\{|nKey, nFlags, Self| <uChange>\}], <.readonly.>,;
             <.pass.>, [<.lNoBorder.>], <nHelpId>,,,,,, [\{|self| <uAction> \}], <cBmpName>, <"uVar">,;
             [<cCueText>], [{|Self|<uInit>}] )
//----------------------------------------------------------------------------//

function Main()
   LOCAL  oDlg, b, d := Date(), g


   DEFINE DIALOG oDlg FROM 10,10 TO 30,30

   @ 1,2 BUTTON "UNO" OF oDlg ACTION ( b:enable(), g:show() )
   @ 3,2 BUTTON b PROMPT "DOS" OF oDlg ON INIT ::disable()
   @ 6,2 GET g VAR d OF oDlg PICTURE '@d' ON INIT ::hide()

   ACTIVATE DIALOG oDlg

return NIL


los cambios que se deben realizar son:

en los fuentes tget.prg y button.prg, en los metodos new, añadir un parametro al final binit, luego dentro el cuerpo de cada
metodo new añadir ::binit = binit

en la clase dialog en el metodo Initiate añadir la línea

Code: Select all  Expand view
Aeval( ::aControls,{|o| IF( o:bInit != NIL , Eval( o:bInit, o ),  NIL ) } )


antes del código

Code: Select all  Expand view
if ::bInit != nil
      lResult = Eval( ::bInit, Self )
      if ValType( lResult ) == "L" .and. ! lResult
         lFocus = .f.
      endif
   endif