Cambio a la clase GET

Post Reply
Marcelo Via Giglio
Posts: 1079
Joined: Fri Oct 07, 2005 3:33 pm
Location: Cochabamba - Bolivia
Has thanked: 1 time
Been thanked: 1 time

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 | Expand

{|| 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: 42716
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 93 times
Been thanked: 103 times
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: 1079
Joined: Fri Oct 07, 2005 3:33 pm
Location: Cochabamba - Bolivia
Has thanked: 1 time
Been thanked: 1 time

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/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
User avatar
Antonio Linares
Site Admin
Posts: 42716
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 93 times
Been thanked: 103 times
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: 1079
Joined: Fri Oct 07, 2005 3:33 pm
Location: Cochabamba - Bolivia
Has thanked: 1 time
Been thanked: 1 time

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: 1079
Joined: Fri Oct 07, 2005 3:33 pm
Location: Cochabamba - Bolivia
Has thanked: 1 time
Been thanked: 1 time

Re: Cambio a la clase GET

Post by Marcelo Via Giglio »

Holas,

esto inicialmente funciona

Code: Select all | Expand

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

 Aeval( ::aControls,{|o| IF( o:bInit != NIL , Eval( o:bInit, o ),  NIL ) } )


antes del código

Code: Select all | Expand

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