Refrescar controles en folderex [RESUELTO]

Refrescar controles en folderex [RESUELTO]

Postby Ramón J. » Tue Jan 21, 2020 10:27 pm

Hola, foro

Estoy construyendo un folderex con muchos campos y me gustaría saber cómo actualizar los campos una vez grabado. Lo he intentado con ofld:refresh(), pero no actualiza los datos. Un ejemplo sencillo de lo que pretendo hacer es lo siguiente:

#include "FiveWin.ch"

function Main()

local oDlg, oFld, oNombre, cNombre, cApellido, oApellido

REQUEST DBFCDX
RDDSETDEFAULT ( "DBFCDX" )

DEFINE DIALOG oDlg SIZE 400, 300

USE TEST NEW ALIAS "TEST"
go top

cNombre =test->nombre
cApellido=test->apellido

@ 3, 5 FOLDEREX oFld PIXEL ;
PROMPT "&Uno", "&Dos" ;
SIZE 190, 120

@ 1, 1 GET oNombre VAR cNombre OF oFld:aDialogs[ 1 ]

@ 2, 1 GET oApellido VAR cApellido OF oFld:aDialogs[ 1 ]
@ 4, 14 BUTTON "Cambiar" of oFld:aDialogs[ 1 ] ACTION cambia(cNombre,oNombre, cApellido, oApellido, ofld)
@ 7.2, 14 BUTTON "Salir" ACTION oDlg:End()

ACTIVATE DIALOG oDlg CENTERED

return nil

function cambia(cNombre, oNombre, cApellido, oApellido, oFld)

local oDlg2, cNombre2, oNombre2, cApellido2, oApellido2

cNombre2:=cNombre
cApellido2:=cApellido

DEFINE DIALOG oDlg2 SIZE 400, 300


@ 1, 1 GET oNombre2 VAR cNombre2 OF oDlg2 SIZE 60,10
@ 3, 1 GET oApellido2 VAR cApellido2 OF oDlg2 SIZE 60,10
@ 7.2, 10 BUTTON "Cambiar" of oDlg2 ACTION (graba(cNombre, oNombre, cApellido, oApellido,;
cNombre2, oNombre2, cApellido2, oApellido2, ofld), odlg2:end())
@ 7.2, 20 BUTTON "Cancelar" ACTION oDlg2:End()

ACTIVATE DIALOG oDlg2 CENTERED

return nil

Function graba(cNombre, oNombre, cApellido, oApellido,;
cNombre2, oNombre2, cApellido2, oApellido2, ofld)

TEST->nombre:= cNombre2
TEST->apellido:=cApellido2
cNombre:=cNombre2
oNombre:varput(cNombre2)
oNombre:refresh()
cApellido:=cApellido2
oApellido:varput(capellido2)
oApellido:refresh()
ofld:refresh()

Return nil


Un saludo
Last edited by Ramón J. on Thu Jan 23, 2020 5:56 am, edited 1 time in total.
FWH 20.12 BCC7
Ramón J.
 
Posts: 152
Joined: Mon Feb 13, 2006 8:23 pm

Re: Refrescar controles en folderex

Postby karinha » Wed Jan 22, 2020 1:28 pm

https://i.imgur.com/B5GCljM.png


Mira:

Code: Select all  Expand view  RUN

#Include "FiveWin.ch"

ANNOUNCE RDDSYS
REQUEST DBFCDX, DBFFPT

FUNCTION Main()

   LOCAL oDlg, oFld, oNombre, cNombre := SPACE(30), cApellido := SPACE(20), ;
         oApellido

   RDDSETDEFAULT ( "DBFCDX" )

   USE TEST2
   INDEX ON Field->APELLIDO TO TEST2
   SET ORDER TO 01
   USE

   USE TEST2 NEW ALIAS "TEST2"  // en \samples solo para teste p/Ramon.
   GO TOP

   BROWSE()

   cNombre   := test2->nombre
   cApellido := test2->apellido

   DEFINE DIALOG oDlg SIZE 400, 300

   @ 3, 5 FOLDEREX oFld PIXEL ;
      PROMPT "&Uno", "&Dos"   ;
      SIZE 190, 120

   @ 1, 1 GET oNombre VAR cNombre OF oFld:aDialogs[ 1 ]

   @ 2, 1 GET oApellido VAR cApellido OF oFld:aDialogs[ 1 ]

   @ 4, 14 BUTTON "Cambiar" of oFld:aDialogs[ 1 ] ;
      ACTION cambia( cNombre, oNombre, cApellido, oApellido, ofld )

   @ 7.2, 14 BUTTON "Salir" ACTION oDlg:End()

   ACTIVATE DIALOG oDlg CENTERED

RETURN nil

FUNCTION cambia( cNombre, oNombre, cApellido, oApellido, oFld )

   LOCAL oDlg2, cNombre2, oNombre2, cApellido2, oApellido2

   cNombre2   := cNombre
   cApellido2 := cApellido

   DEFINE DIALOG oDlg2 SIZE 400, 300

   @ 1, 1 GET oNombre2 VAR cNombre2 OF oDlg2 SIZE 60, 10

   @ 3, 1 GET oApellido2 VAR cApellido2 OF oDlg2 SIZE 60, 10

   @ 7.2, 10 BUTTON "Cambiar" of oDlg2 ;
      ACTION ( graba( cNombre, oNombre, cApellido, oApellido, cNombre2, ;
                      oNombre2, cApellido2, oApellido2, ofld ), odlg2:end() )

   @ 7.2, 20 BUTTON "Cancelar" ACTION oDlg2:End()

   ACTIVATE DIALOG oDlg2 CENTERED

RETURN nil

FUNCTION graba( cNombre, oNombre, cApellido, oApellido, cNombre2, oNombre2, ;
                cApellido2, oApellido2, ofld )

   TEST2->nombre   := cNombre2
   TEST2->apellido := cApellido2

   cNombre := cNombre2

   oNombre:varput( cNombre2 )
   oNombre:refresh()

   cApellido := cApellido2
   oApellido:varput( cApellido2 )
   oApellido:refresh()

   ofld:refresh()

RETURN nil
 


Saludos y buén trabajo.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7831
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Refrescar controles en folderex

Postby Ramón J. » Wed Jan 22, 2020 2:06 pm

Muchas gracias, João. Ahora funciona.

Una pregunta:

Si los controles get son de lectura, cómo se actualizarían? Siguiendo tu código sería así, pero no funciona:

Code: Select all  Expand view  RUN

#Include "FiveWin.ch"

ANNOUNCE RDDSYS
REQUEST DBFCDX, DBFFPT

FUNCTION Main()

   LOCAL oDlg, oFld, oNombre, cNombre := SPACE(30), cApellido := SPACE(20), ;
         oApellido

   RDDSETDEFAULT ( "DBFCDX" )

   USE TEST2
   INDEX ON Field->APELLIDO TO TEST2
   SET ORDER TO 01
   USE

   USE TEST2 NEW ALIAS "TEST2"  // en \samples solo para teste p/Ramon.
   GO TOP

   BROWSE()

   cNombre   := test2->nombre
   cApellido := test2->apellido

   DEFINE DIALOG oDlg SIZE 400, 300

   @ 3, 5 FOLDEREX oFld PIXEL ;
      PROMPT "&Uno", "&Dos"   ;
      SIZE 190, 120

   @ 1, 1 GET oNombre VAR cNombre OF oFld:aDialogs[ 1 ] READONLY UPDATE // <--------- con READONLY no actualiza

   @ 2, 1 GET oApellido VAR cApellido OF oFld:aDialogs[ 1 ] READONLY UPDATE //<--------- con READONLY no actualiza

   @ 4, 14 BUTTON "Cambiar" of oFld:aDialogs[ 1 ] ;
      ACTION cambia( cNombre, oNombre, cApellido, oApellido, ofld )

   @ 7.2, 14 BUTTON "Salir" ACTION oDlg:End()

   ACTIVATE DIALOG oDlg CENTERED

RETURN nil

FUNCTION cambia( cNombre, oNombre, cApellido, oApellido, oFld )

   LOCAL oDlg2, cNombre2, oNombre2, cApellido2, oApellido2

   cNombre2   := cNombre
   cApellido2 := cApellido

   DEFINE DIALOG oDlg2 SIZE 400, 300

   @ 1, 1 GET oNombre2 VAR cNombre2 OF oDlg2 SIZE 60, 10

   @ 3, 1 GET oApellido2 VAR cApellido2 OF oDlg2 SIZE 60, 10

   @ 7.2, 10 BUTTON "Cambiar" of oDlg2 ;
      ACTION ( graba( cNombre, oNombre, cApellido, oApellido, cNombre2, ;
                      oNombre2, cApellido2, oApellido2, ofld ), odlg2:end() )

   @ 7.2, 20 BUTTON "Cancelar" ACTION oDlg2:End()

   ACTIVATE DIALOG oDlg2 CENTERED

RETURN nil

FUNCTION graba( cNombre, oNombre, cApellido, oApellido, cNombre2, oNombre2, ;
                cApellido2, oApellido2, ofld )

   TEST2->nombre   := cNombre2
   TEST2->apellido := cApellido2

   cNombre := cNombre2

   oNombre:varput( cNombre2 )
   oNombre:refresh()

   cApellido := cApellido2
   oApellido:varput( cApellido2 )
   oApellido:refresh()

   ofld:refresh()

RETURN nil
 


Un saludo
FWH 20.12 BCC7
Ramón J.
 
Posts: 152
Joined: Mon Feb 13, 2006 8:23 pm

Re: Refrescar controles en folderex

Postby karinha » Wed Jan 22, 2020 2:18 pm

READONLY = SOLO LECTURA, SOLO PUEDES LEER LA ESCRITURA. NO SE PUEDE MODIFICAR. NO ENTENDÍ LA PREGUNTA.

Saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7831
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Refrescar controles en folderex

Postby Ramón J. » Wed Jan 22, 2020 2:51 pm

Perdona, João, que no me haya explicado bien.

MIra;

En el folder pongo un get de sólo lectura
@ 1, 1 GET oNombre VAR cNombre OF oFld:aDialogs[ 1 ] READONLY UPDATE

Y quiero cambiar el valor mediante:

@ 4, 14 BUTTON "Cambiar" of oFld:aDialogs[ 1 ] ;
ACTION cambia( cNombre, oNombre, cApellido, oApellido, ofld )

Después se graba con la función:

graba( cNombre, oNombre, cApellido, oApellido, cNombre2, oNombre2, ;
cApellido2, oApellido2, ofld )

TEST2->nombre := cNombre2
TEST2->apellido := cApellido2

cNombre := cNombre2

oNombre:varput( cNombre2 )
oNombre:refresh()

cApellido := cApellido2
oApellido:varput( cApellido2 )
oApellido:refresh()

ofld:refresh()

Lo que quiero decir es que, después de grabar la modificación, no se actualizan los datos del
@ 1, 1 GET oNombre VAR cNombre OF oFld:aDialogs[ 1 ] READONLY UPDATE

Un saludo
FWH 20.12 BCC7
Ramón J.
 
Posts: 152
Joined: Mon Feb 13, 2006 8:23 pm

Re: Refrescar controles en folderex

Postby karinha » Wed Jan 22, 2020 3:47 pm

Use WHEN( lCondicion )

Saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7831
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Refrescar controles en folderex

Postby Ramón J. » Wed Jan 22, 2020 4:25 pm

Perdona, João, que abuse de tu paciencia

En el ejemplo que has mandado, dónde iria esa función?

Un saludo
FWH 20.12 BCC7
Ramón J.
 
Posts: 152
Joined: Mon Feb 13, 2006 8:23 pm

Re: Refrescar controles en folderex

Postby Ramón J. » Wed Jan 22, 2020 4:51 pm

João, lo he resuelto sustituyendo el GET por SAY y funciona el refresco. No es lo que yo quería, ya que estéticamente prefiero el GET.

Code: Select all  Expand view  RUN

#Include "FiveWin.ch"

ANNOUNCE RDDSYS
REQUEST DBFCDX, DBFFPT

FUNCTION Main()

   LOCAL oDlg, oFld, oNombre, cNombre := SPACE(30), cApellido := SPACE(20), ;
         oApellido

   RDDSETDEFAULT ( "DBFCDX" )

   USE TEST2
   INDEX ON Field->APELLIDO TO TEST2
   SET ORDER TO 01
   USE

   USE TEST2 NEW ALIAS "TEST2"  // en \samples solo para teste p/Ramon.
   GO TOP

   BROWSE()

   cNombre   := test2->nombre
   cApellido := test2->apellido

   DEFINE DIALOG oDlg SIZE 400, 300

   @ 3, 5 FOLDEREX oFld PIXEL ;
      PROMPT "&Uno", "&Dos"   ;
      SIZE 190, 120

   @ 1, 1 SAY oNombre VAR cNombre OF oFld:aDialogs[ 1 ] SIZE 60,10  //<--- Cambio GET por SAY

   @ 2, 1 SAY oApellido VAR cApellido OF oFld:aDialogs[ 1 ] SIZE 60,10 //<--- Cambio GET por SAY

   @ 4, 14 BUTTON "Cambiar" of oFld:aDialogs[ 1 ] ;
      ACTION cambia( cNombre, oNombre, cApellido, oApellido, ofld )

   @ 7.2, 14 BUTTON "Salir" ACTION oDlg:End()

   ACTIVATE DIALOG oDlg CENTERED

RETURN nil

FUNCTION cambia( cNombre, oNombre, cApellido, oApellido, oFld )

   LOCAL oDlg2, cNombre2, oNombre2, cApellido2, oApellido2

   cNombre2   := cNombre
   cApellido2 := cApellido

   DEFINE DIALOG oDlg2 SIZE 400, 300

   @ 1, 1 GET oNombre2 VAR cNombre2 OF oDlg2 SIZE 60, 10

   @ 3, 1 GET oApellido2 VAR cApellido2 OF oDlg2 SIZE 60, 10

   @ 7.2, 10 BUTTON "Cambiar" of oDlg2 ;
      ACTION ( graba( cNombre, oNombre, cApellido, oApellido, cNombre2, ;
                      oNombre2, cApellido2, oApellido2, ofld ), odlg2:end() )

   @ 7.2, 20 BUTTON "Cancelar" ACTION oDlg2:End()

   ACTIVATE DIALOG oDlg2 CENTERED

RETURN nil

FUNCTION graba( cNombre, oNombre, cApellido, oApellido, cNombre2, oNombre2, ;
                cApellido2, oApellido2, ofld )

   TEST2->nombre   := cNombre2
   TEST2->apellido := cApellido2

   cNombre := cNombre2

   oNombre:varput( cNombre2 )
   oNombre:refresh()

   cApellido := cApellido2
   oApellido:varput( cApellido2 )
   oApellido:refresh()

   ofld:refresh()

RETURN nil
 
 


Muchas gracias
Un saludo
FWH 20.12 BCC7
Ramón J.
 
Posts: 152
Joined: Mon Feb 13, 2006 8:23 pm

Re: Refrescar controles en folderex

Postby karinha » Wed Jan 22, 2020 5:00 pm

Teste ahora. mira se comprende el uso de WHEN( .T. ) // .F.

Code: Select all  Expand view  RUN

// \SAMPLES\RAMON2.PRG

#Include "FiveWin.ch"

ANNOUNCE RDDSYS
REQUEST DBFCDX, DBFFPT

STATIC lCondicion := .T.

FUNCTION Main()

   LOCAL oDlg, oFld, oNombre, cNombre := SPACE(30), cApellido := SPACE(20), ;
         oApellido

   RDDSETDEFAULT ( "DBFCDX" )

   USE TEST2
   INDEX ON Field->APELLIDO TO TEST2
   SET ORDER TO 01
   USE

   USE TEST2 NEW ALIAS "TEST2"  // en \samples solo para teste p/Ramon.
   GO TOP

   BROWSE()

   cNombre   := test2->nombre
   cApellido := test2->apellido

   DEFINE DIALOG oDlg SIZE 400, 300

   @ 3, 5 FOLDEREX oFld PIXEL ;
      PROMPT "&Uno", "&Dos"   ;
      SIZE 190, 120

   @ 1, 1 GET oNombre VAR cNombre OF oFld:aDialogs[ 1 ] WHEN( lCondicion )

   @ 2, 1 GET oApellido VAR cApellido OF oFld:aDialogs[ 1 ] WHEN( lCondicion )

   @ 4, 14 BUTTON "Cambiar" of oFld:aDialogs[ 1 ] ;
      ACTION cambia( cNombre, oNombre, cApellido, oApellido, oFld )

   @ 7.2, 14 BUTTON "Salir" ACTION oDlg:End()

   ACTIVATE DIALOG oDlg CENTERED

RETURN nil

FUNCTION cambia( cNombre, oNombre, cApellido, oApellido, oFld )

   LOCAL oDlg2, cNombre2, oNombre2, cApellido2, oApellido2

   cNombre2   := cNombre
   cApellido2 := cApellido

   DEFINE DIALOG oDlg2 SIZE 400, 300

   @ 1, 1 GET oNombre2 VAR cNombre2 OF oDlg2 SIZE 60, 10

   @ 3, 1 GET oApellido2 VAR cApellido2 OF oDlg2 SIZE 60, 10

   @ 7.2, 10 BUTTON "Cambiar" of oDlg2 ;
      ACTION ( graba( cNombre, oNombre, cApellido, oApellido, cNombre2, ;
                      oNombre2, cApellido2, oApellido2, oFld ), odlg2:end() )

   @ 7.2, 20 BUTTON "Cancelar" ACTION oDlg2:End()

   ACTIVATE DIALOG oDlg2 CENTERED

   lCondicion := .F.

RETURN nil

FUNCTION graba( cNombre, oNombre, cApellido, oApellido, cNombre2, oNombre2, ;
                cApellido2, oApellido2, oFld )

   TEST2->nombre   := cNombre2
   TEST2->apellido := cApellido2

   cNombre := cNombre2

   oNombre:varput( cNombre2 )
   oNombre:refresh()

   cApellido := cApellido2
   oApellido:varput( cApellido2 )
   oApellido:refresh()

   oFld:refresh()

   /*
   IF RAMON_CONDICION

      lCondicion := .F.

      oNobre:Refresh()

   ENDIF
   */


RETURN nil
 
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7831
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Refrescar controles en folderex [RESUELTO]

Postby Ramón J. » Wed Jan 22, 2020 5:15 pm

Ya funciona
Muchas gracias, João
Un saludo
FWH 20.12 BCC7
Ramón J.
 
Posts: 152
Joined: Mon Feb 13, 2006 8:23 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 65 guests