Cambio a la clase GET

Post Reply
Marcelo Via Giglio
Posts: 1033
Joined: Fri Oct 07, 2005 3:33 pm
Location: Cochabamba - Bolivia

Cambio a la clase GET

Post 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

{|| 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
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Cambio a la clase GET

Post by Antonio Linares »

Marcelo,

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

Antonio Linares
www.fivetechsoft.com
Marcelo Via Giglio
Posts: 1033
Joined: Fri Oct 07, 2005 3:33 pm
Location: Cochabamba - Bolivia

Re: Cambio a la clase GET

Post 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/viewt ... =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
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: Cambio a la clase GET

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

Antonio Linares
www.fivetechsoft.com
Marcelo Via Giglio
Posts: 1033
Joined: Fri Oct 07, 2005 3:33 pm
Location: Cochabamba - Bolivia

Re: Cambio a la clase GET

Post 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
Marcelo Via Giglio
Posts: 1033
Joined: Fri Oct 07, 2005 3:33 pm
Location: Cochabamba - Bolivia

Re: Cambio a la clase GET

Post by Marcelo Via Giglio »

Holas,

esto inicialmente funciona

Code: Select all

#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
_ 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

 Aeval( ::aControls,{|o| IF( o:bInit != NIL , Eval( o:bInit, o ),  NIL ) } )
antes del código

Code: Select all

if ::bInit != nil
      lResult = Eval( ::bInit, Self )
      if ValType( lResult ) == "L" .and. ! lResult
         lFocus = .f.
      endif
   endif
 
Post Reply