Page 1 of 1

Problema con radiobutton

Posted: Sat Nov 17, 2018 4:30 pm
by horacio
Amigos,
tengo el siguiente problema, tengo dos radiobuttons un por la positiva y otra por la negativa. Si elijo la positiva se despliega un dialogo. Si selecciono la opción con el mouse todo se desarrolla como se espera pero si la selección la hago desde el teclado la acción se ejecuta dos veces. He estado buscando por aquí pero no encuentro nada sobre este problema. Alguien tiene alguna idea ? Desde ya muchas gracias.

Saludos

Re: Problema con radiobutton

Posted: Mon Nov 19, 2018 8:51 pm
by horacio
+1

Re: Problema con radiobutton

Posted: Tue Nov 20, 2018 8:18 am
by Antonio Linares
Horacio,

Que versión de FWH usas ?

Puedes poner un ejemplo de cómo lo estás haciendo ?

Re: Problema con radiobutton

Posted: Tue Nov 20, 2018 1:01 pm
by horacio
Antonio
uso FWH17.01, Harbour 3.2 y BCC7. Modifiqué testrad.prg que viene en samples para reproducir el error.

Code: Select all

// Radio Buttons management sample

#include "FiveWin.ch"

//----------------------------------------------------------------------------//

function Main()

   local oDlg, oRadMenu, oBrush
   local nOption := 2

   SET _3DLOOK ON

   DEFINE DIALOG oDlg RESOURCE "Radios"

   REDEFINE RADIO oRadMenu VAR nOption ID 110, 120, 130, 140, 150 OF oDlg ;
      ON CHANGE ( If( nOption == 2, PonUnDialogo(), ) )

   REDEFINE BUTTON ID 100 OF oDlg ACTION oRadMenu:GoNext() ;
      WHEN nOption == 3

   REDEFINE BUTTON ID 102 OF oDlg ACTION oRadMenu:GoPrev()

   ACTIVATE DIALOG oDlg CENTERED ;
      ON INIT oRadMenu:aItems[ 1 ]:SetText( "Hello" )

   SET _3DLOOK OFF

return nil

//----------------------------------------------------------------------------//
Function PonUnDialogo()

    Local cFile := cGetFile( "*.prg", "Seleccione un archivo" )
    
    Return 0
    
    


//----------------------------------------------------------------------------//

procedure AppSys  // XBase++ requirement

return

//----------------------------------------------------------------------------//
 


Muchísimas Gracias

Saludos

Re: Problema con radiobutton

Posted: Wed Nov 21, 2018 12:19 pm
by karinha

Code: Select all

// Radio Buttons management sample

#include "FiveWin.ch"

STATIC lAccionRadio := .T.

//----------------------------------------------------------------------------//

function Main()

   local oDlg, oRadMenu, oBrush
   local nOption := 2

   SET _3DLOOK ON

   DEFINE DIALOG oDlg RESOURCE "Radios"

   REDEFINE RADIO oRadMenu VAR nOption ID 110, 120, 130, 140, 150 OF oDlg ;
      ON CHANGE ( Cambia_Radio( oRadMenu, nOption ) ) WHEN( lAccionRadio )

   //   ON CHANGE ( If( nOption == 2, PonUnDialogo(), ) )

   REDEFINE BUTTON ID 100 OF oDlg ACTION oRadMenu:GoNext() ;
      WHEN nOption == 3

   REDEFINE BUTTON ID 102 OF oDlg ACTION oRadMenu:GoPrev()

   // id cancel
   REDEFINE BUTTON ID 103 OF oDlg ACTION ( oDlg:End() ) CANCEL

   ACTIVATE DIALOG oDlg CENTERED ;
      ON INIT oRadMenu:aItems[ 1 ]:SetText( "Hello" )

   SET _3DLOOK OFF

return nil

FUNCTION Cambia_Radio( oRadMenu, nOption )

   
   IF nOption = 2

      lAccionRadio := .F.

      PonUnDialogo()

   ELSE

      lAccionRadio := .T.

      nOption = 3

      oRadMenu:Enable()
      oRadMenu:Refresh()

      RETURN( .F. )

   ENDIF

RETURN( .T. )

//----------------------------------------------------------------------------//
Function PonUnDialogo()

   Local cFile

   cFile := cGetFile( "*.prg", "Seleccione un archivo" )
    
Return Nil
 

Re: Problema con radiobutton

Posted: Wed Nov 21, 2018 1:30 pm
by horacio
Gracias Joao por tu respuesta, si bien funciona una vez que se ejecuta el diálogo el control radio se deshabilita y eso no me sirve. Evidentemente al volver a hacer foco en el control la acción se vuelve a ejecutar.

Saludos

Re: Problema con radiobutton

Posted: Wed Nov 21, 2018 2:12 pm
by karinha

Code: Select all

// Radio Buttons management sample

#include "FiveWin.ch"

STATIC lAccionRadio := .T.
STATIC lRetorno     := .T.  // Controla cGetFile Vacio.

//----------------------------------------------------------------------------//

function Main()

   local oDlg, oRadMenu, oBrush
   local nOption := 2

   SET _3DLOOK ON

   DEFINE DIALOG oDlg RESOURCE "Radios"

   // Horacio, mira se sirve asi:

   REDEFINE RADIO oRadMenu VAR nOption ID 110, 120, 130, 140, 150 OF oDlg ;
      ON CHANGE ( Cambia_Radio( oRadMenu, nOption ) ) // WHEN( lAccionRadio )

   //   ON CHANGE ( If( nOption == 2, PonUnDialogo(), ) )

   REDEFINE BUTTON ID 100 OF oDlg ACTION oRadMenu:GoNext() ;
      WHEN nOption == 3

   REDEFINE BUTTON ID 102 OF oDlg ACTION oRadMenu:GoPrev()

   // id cancel
   REDEFINE BUTTON ID 103 OF oDlg ACTION ( oDlg:End() ) CANCEL

   ACTIVATE DIALOG oDlg CENTERED ;
      ON INIT oRadMenu:aItems[ 1 ]:SetText( "Hello" )

   SET _3DLOOK OFF

return nil

FUNCTION Cambia_Radio( oRadMenu, nOption )

   IF nOption = 2

      lAccionRadio := .F.

      IF lRetorno

         nOption = 3

         lRetorno := .F.

         PonUnDialogo()

      ENDIF

   ELSE

      lAccionRadio := .T.

      lRetorno := .T.

      nOption = 3

      oRadMenu:Enable()
      oRadMenu:Refresh()

      RETURN( .F. )

   ENDIF

RETURN( .T. )

//----------------------------------------------------------------------------//
Function PonUnDialogo()

   Local cFile

   IF .NOT. lRetorno  // Horacio lRetorno := .T. accciona el cGetfile

      cFile := cGetFile( "*.prg", "Seleccione un archivo" )

      IF EMPTY( cFile )

         lRetorno := .F.

         RETURN( .F. )

      ELSE

         lRetorno := .T.

      ENDIF

   ENDIF
    
Return( .T. ) // Nil
 
Saludos.

Re: Problema con radiobutton

Posted: Wed Nov 21, 2018 2:41 pm
by horacio
Muchísimas gracias Joao por tu tiempo, funciona perfectamente.

Saludos

Re: Problema con radiobutton

Posted: Wed Nov 21, 2018 3:27 pm
by karinha
horacio wrote:Muchísimas gracias Joao por tu tiempo, funciona perfectamente.

Saludos
Bién!!

I LOVE FIVEWIN the best.

Fivewin, no me vence nunca. jajajajajajajajajajajajaja.

Saludos.

Re: Problema con radiobutton

Posted: Wed Nov 21, 2018 6:20 pm
by Antonio Linares
Muito obrigado ;-)