Activar botón con oDlg:AEValWhen() (SOLUCIONADO)

User avatar
Armando
Posts: 2479
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México
Contact:

Activar botón con oDlg:AEValWhen() (SOLUCIONADO)

Post by Armando »

Hola Foreros:

Por aquí saludando y preguntando, tengo el siguiente pseudo código:

Code: Select all

    DEFINE WINDOW oWnd MDICHILD OF oWindow FROM 0,0 TO 10,10;
        TITLE "Bitacora de viajes" ICON oIcono
….
….
….
        ACTIVATE DIALOG oDlg NOWAIT ON INIT oDlg:MOVE(0,0) VALID ! GetASyncKey(VK_ESCAPE)
    ACTIVATE WINDOW oWnd ON RESIZE ( IF( oWnd<>NIL, oWnd:SETSIZE(oDlg:nWidth,oDlg:nHeight+29), ));
        ON INIT (LaBarra(oWnd,oDlg,oBrw),oBrw:SetFocus()) VALID Cierra()
RETURN(NIL)


STATIC FUNCTION LaBarra(oWnd,oDlg,oBrw)
    LOCAL oBar
    LOCAL oBtns     := ARRAY(07)

    DEFINE BUTTONBAR oBar SIZE 28,28 OF oDlg CURSOR oCursor 2007

        DEFINE BUTTON oBtns[01] OF oBar RESOURCE "BtnAdd";
            ACTION Editar(oBrw,(.T.));
            MESSAGE "Agregar un nuevo vale"
        DEFINE BUTTON oBtns[02] OF oBar RESOURCE "BtnCan";
            WHEN oRsVia:State() = adStateOpen .AND. oRsVia:RecordCount > 0;     <--- Condición
            ACTION Cancelar(oBrw);
            MESSAGE "Cancelar vale"
RETURN(.T.)
 
Como vemos, el botón oBtns[02] esta condicionado, en otra función abro la tabla oRsVia
y seguro estoy que tiene registros pero el botón no se activa, aún con oDlg:AEValWhen()
Algo que me haga falta?

Saludos
Last edited by Armando on Tue Jun 04, 2019 4:56 pm, edited 1 time in total.
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
armando.lagunas
Posts: 340
Joined: Mon Oct 05, 2009 3:35 pm
Location: Curico-Chile
Contact:

Re: Activar botón con oDlg:AEValWhen()

Post by armando.lagunas »

Armando:

yo también tengo miles de dolores de cabeza al tratar de activar un botón con una condición, sugiero lo siguiente:

paso 1 : ( al colocar {|| } me funcionan en mi caso )

Code: Select all

        DEFINE BUTTON oBtns[02] OF oBar RESOURCE "BtnCan";
            WHEN {|| ( oRsVia:State() = adStateOpen .AND. oRsVia:RecordCount > 0 ) }    ;     <--- Condición
            ACTION Cancelar(oBrw);
            MESSAGE "Cancelar vale"
paso 2 : trabajar el botón con Enable(), Disable() traspasando el control a una función independiente que te devuelva el valor deseado y activando o desactivando el control oBtns[2]
User avatar
Armando
Posts: 2479
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México
Contact:

Re: Activar botón con oDlg:AEValWhen()

Post by Armando »

Tocayo:

Te agradezco la disponibilidad de apoyar pero no, no funciona como
me sugeriste, a ver si hay alguna otra recomendación.

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
karinha
Posts: 4882
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Activar botón con oDlg:AEValWhen()

Post by karinha »

Intenta asi:

Code: Select all

      :bChange       := { || oDlg:AEvalWhen() }

      ó

      oDlg:oWnd:AEvalWhen()

      ó

      oBar:oWnd:AEvalWhen()
 
João Santos - São Paulo - Brasil
User avatar
Armando
Posts: 2479
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México
Contact:

Re: Activar botón con oDlg:AEValWhen()

Post by Armando »

Karinha:

Tampoco me funciona. :roll:

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
jvtecheto
Posts: 357
Joined: Mon Mar 04, 2013 4:32 pm
Location: Spain

Re: Activar botón con oDlg:AEValWhen()

Post by jvtecheto »

Hola Armando.

Si te interesa puedes probar lo que yo hago.
a la funcion que llamo con el boton le paso como parametros, el objeto menu y el boton
que es los que tengo que desabilitar.
Ejemplo.

Code: Select all

FUNCTION EmpresBrw( oMenuEmp, oEmpres )

   
   oMenuEmp:Disable()
   oEmpres:Disable()
   // y luego cuando me salgo de la ventana
ACTIVATE WINDOW oWndEmp CENTERED VALID ( oMenuEmp:Enable(), oEmpres:Enable(), CierraEmp( cTrab ) ) .....

 
Supongo que no sera lo mas ortodoxo, pero pruebalo que funciona.

Saludos.

Jose.
Fwh 19.06 32 bits + Harbour 3.2dev(r2011030937)+ Borland 7.4 + FivEdit
User avatar
jvtecheto
Posts: 357
Joined: Mon Mar 04, 2013 4:32 pm
Location: Spain

Re: Activar botón con oDlg:AEValWhen()

Post by jvtecheto »

Perdona se me ha olvidado decirte que las variables
estan declaradas STATIC fuera de todo procedimiento , funcion.

Saludos.

Jose.
Fwh 19.06 32 bits + Harbour 3.2dev(r2011030937)+ Borland 7.4 + FivEdit
User avatar
Armando
Posts: 2479
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México
Contact:

Re: Activar botón con oDlg:AEValWhen()

Post by Armando »

brakaman:

Agradezco el interés, pero no es exactamente mi escenario.

Te cuento:

Tengo un dialogo dentro de una ventana MDICHILD, al activar la ventana, en el ON INIT voy
a la función que crea una barra de botones que me sirven para AGREGAR, MODIFICAR,
ELIMINAR, etc.

Cuando abro el dialogo por primera vez la tabla está vacía y por tanto los botones están
disable, excepto el botón AGREGAR

Al agregar el primer registro a la tabla, necesito que se activen todos los botones, hasta ahí
todo funciona muy bien.

En el dialogo tengo un control DATEPICKER para dar opción al usuario de elegir movimientos
de otro día, cuando cambian la fecha hago el filtro a la tabla y muestro los nuevos registros
en un browse, ahí todo bien, pero los botones no se activan cuando que ya hay registros en
la tabla.

Saludos y gracias
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
russimicro
Posts: 179
Joined: Sun Jan 31, 2010 3:30 pm
Location: Bucaramanga - Colombia

Re: Activar botón con oDlg:AEValWhen()

Post by russimicro »

Buena dia...

Ya evaluó directamente el resultado de la condición ? : "oRsVia:State() = adStateOpen .AND. oRsVia:RecordCount > 0 "

... Lo uso así acorde a mi necesidad.

Code: Select all


LOCAL lGenReg := .f.  ,oBotReg ,oPlaVeh  ,oPlaVeh


@ 15,110 GET oPlaVeh VAR oPlaVeh ;
         PICTURE "@!X" ;
         PIXEL SIZE 120*nAjuAnc,45 ;
         COLOR CLR_BLUE,CLR_YELLOW FONT M->oFonAc24 ;
         VALID ( defineRegistroClientePar(@lGenReg,oBotReg ) )


@ 97, 110 BTNBMP oBotReg ;
          SIZE 155,25 PIXEL OF oDlgPar ;
          RESOURCE "ADICIONAR" ;
          WHEN lGenReg ;
          ACTION ( grabarRegistroPar()
           
FUNCTION defineRegistroClientePar(lGenReg,oBotReg )


IF lGenReg
   oBotReg :enable()
ELSE
   oBotReg :disable()
ENDIF


return .t.
 

Johnson Russi
Colombia
User avatar
Armando
Posts: 2479
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México
Contact:

Re: Activar botón con oDlg:AEValWhen() (SOLUCIONADO)

Post by Armando »

Amigos:

Problema solucionado usando DISABLE y ENABLE.

Muchas gracias y larga vida al foro
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
nageswaragunupudi
Posts: 8017
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Contact:

Re: Activar botón con oDlg:AEValWhen() (SOLUCIONADO)

Post by nageswaragunupudi »

It should work even without calling oDlg:AEvalWhen() or oBar:AEvalWhen() even on a dialog in mdichild.

This is my sample code working without calling any AEvalwhen() or disable or enable.

Code: Select all

#include "fivewin.ch"

static oCn

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

function Main()

   local oWnd, oBar

   DEFINE WINDOW oWnd MDI
   DEFINE BUTTONBAR oBar OF oWnd SIZE 100,32 2007
   DEFINE BUTTON OF oBar PROMPT "Browse" ACTION MdiDlg()
   DEFINE BUTTON OF oBar PROMPT "Close"  ACTION oWnd:End()

   ACTIVATE WINDOW oWnd

   if oCn != nil
      oCn:Close()
   end

return nil

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

static function MdiDlg()

   local oRs, oDlg, oBar, oBrw, oFont, oRad
   local nState   := 1
   local aStates  := { "  ", "NY", "WA" }

   DEFAULT oCn := FW_OpenAdoConnection( "xbrtest.mdb" )
   oRs         := FW_OpenRecordSet( oCn, "customer" )
   oRs:Filter  := "STATE=NULL"

   DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-12
   DEFINE DIALOG oDlg SIZE 650,400 PIXEL TRUEPIXEL FONT oFont
   RELEASE FONT oFont

   DEFINE BUTTONBAR oBar OF oDlg SIZE 80,48 2007
   DEFINE BUTTON OF oBar PROMPT "Add"    FILE "c:\fwh\bitmaps\new2.bmp" ;
      ACTION oBrw:EditSource( .t. )
   DEFINE BUTTON OF oBar PROMPT "Modify" FILE "c:\fwh\bitmaps\edit.bmp"  ;
      WHEN oRs:RecordCount() > 0 ACTION oBrw:EditSource()
   DEFINE BUTTON OF oBar PROMPT "Delete" FILE "c:\fwh\bitmaps\16x16\delete.bmp" ;
      WHEN oRs:RecordCount() > 0 ACTION oBrw:Delete()

   @ 48,0 XBROWSE oBrw SIZE 500,0 PIXEL OF oDlg ;
      DATASOURCE oRs COLUMNS "FIRST","CITY","STATE" ;
      CELL LINES NOBORDER

   WITH OBJECT oBrw
      :CreateFromCode()
   END

   @ 050,520 RADIO oRad VAR nState ITEMS "None", "NY", "WA" ;
      SIZE 80,20 PIXEL OF oDlg ON CHANGE ( ;
         oRs:Filter := If( nState == 1, "STATE=NULL", "STATE='" + aStates[ nState ] + "'" ), ;
         oBrw:Refresh() )

   ACTIVATE DIALOG oDlg AS MDICHILD ;
      SETUP ( oWnd:bPostEnd := { || oRs:Close() } )

return nil

//----------------------------------------------------------------------------//
 
Image
Regards

G. N. Rao.
Hyderabad, India
User avatar
Armando
Posts: 2479
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México
Contact:

Re: Activar botón con oDlg:AEValWhen() (SOLUCIONADO)

Post by Armando »

Mr. Rao:

Thanks so much, I will test your sample.

Regards
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
Armando
Posts: 2479
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México
Contact:

Re: Activar botón con oDlg:AEValWhen() (SOLUCIONADO)

Post by Armando »

Mr. Rao:

Please embed the dialogue in an MDI CHILD window

Regards
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
User avatar
nageswaragunupudi
Posts: 8017
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Contact:

Re: Activar botón con oDlg:AEValWhen() (SOLUCIONADO)

Post by nageswaragunupudi »

The command used

Code: Select all

ACTIVATE DIALOG oDlg AS MDICHILD ....
 
embeds the dialog into mdichild.
Simple and standard way to embed dialogs in mdichild from FWH1810.

Whatsnew.txt
ACTIVATE DIALOG oDlg AS MDICHILD.
In an MDI environment, converts the dialog as mdichild and activates.
On activation, the variable oDlg now refers to the new mdichild window
and all actions and codeblocks using oDlg variable now act on the
mdichild window.
fwh\samples\mdidlg.prg
http://forums.fivetechsupport.com/viewt ... =3&t=36244



May I know the version of FWH you are using? Let me try with the same version of FWH you are using.
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
Posts: 8017
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Contact:

Re: Activar botón con oDlg:AEValWhen() (SOLUCIONADO)

Post by nageswaragunupudi »

This is a working sample for FWH versions older than FWH1810. I have tested this sample with FWH1602 and is working well.
For the old versions I used

Code: Select all

oDlg:oBar:AEvalWhen()
 
after changing the filter of oRs.

This sample gives exactly the same results as shown in the above animated gif.

Code: Select all

#include "fivewin.ch"

// FOR FWH VERSIONS PRIOR TO FWH1806

static oCn

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

function Main()

   local oWnd, oBar

   DEFINE WINDOW oWnd MDI
   DEFINE BUTTONBAR oBar OF oWnd SIZE 100,32 2007
   DEFINE BUTTON OF oBar PROMPT "Browse" ACTION MdiDlg()
   DEFINE BUTTON OF oBar PROMPT "Close"  ACTION oWnd:End()

   ACTIVATE WINDOW oWnd

   if oCn != nil
      oCn:Close()
   end

return nil

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

static function MdiDlg()

   local oRs, oDlg, oWnd, oBrw, oFont, oRad
   local nState   := 1
   local aStates  := { "  ", "NY", "WA" }

   DEFAULT oCn := FW_OpenAdoConnection( "xbrtest.mdb" )
   oRs         := FW_OpenRecordSet( oCn, "customer" )
   oRs:Filter  := "STATE=NULL"

   DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-12
   DEFINE DIALOG oDlg SIZE 650,400 PIXEL TRUEPIXEL FONT oFont
   RELEASE FONT oFont

   @ 48,0 XBROWSE oBrw SIZE 500,0 PIXEL OF oDlg ;
      DATASOURCE oRs COLUMNS "FIRST","CITY","STATE" ;
      CELL LINES NOBORDER

   WITH OBJECT oBrw
      :CreateFromCode()
   END

   @ 050,520 RADIO oRad VAR nState ITEMS "None", "NY", "WA" ;
      SIZE 80,20 PIXEL OF oDlg ON CHANGE ( ;
         oRs:Filter := If( nState == 1, "STATE=NULL", "STATE='" + aStates[ nState ] + "'" ), ;
         oBrw:Refresh(), oDlg:oBar:AEvalWhen() )

   DEFINE WINDOW oWnd MDICHILD OF WndMain() TITLE "Dialog"
   ACTIVATE DIALOG oDlg NOWAIT ;
      ON INIT ( BuildBar( oDlg, oBrw ), ChangeParent( oDlg, oWnd ) )
   oDlg:End()
   ACTIVATE WINDOW oWnd

return nil

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

static function BuildBar( oDlg, oBrw )

   local oBar

   DEFINE BUTTONBAR oBar OF oDlg SIZE 80,48 2007
   DEFINE BUTTON OF oBar PROMPT "Add"    FILE "c:\fwh\bitmaps\new2.bmp" ;
      ACTION oBrw:EditSource( .t. )
   DEFINE BUTTON OF oBar PROMPT "Modify" FILE "c:\fwh\bitmaps\edit.bmp"  ;
      WHEN oBrw:oRs:RecordCount() > 0 ACTION oBrw:EditSource()
   DEFINE BUTTON OF oBar PROMPT "Delete" FILE "c:\fwh\bitmaps\16x16\delete.bmp" ;
      WHEN oBrw:oRs:RecordCount() > 0 ACTION oBrw:Delete()

return nil

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

static function ChangeParent( oDlg, oWnd )

   local oControl

   for each oControl in oDlg:aControls
      SetParent( oControl:hWnd, oWnd:hWnd )
      AAdd( oWnd:aControls, oControl )
      oControl:oWnd  := oWnd
   next

   oWnd:SetSize( oDlg:nWidth, oDlg:nHeight )
   oWnd:SetColor( oDlg:nClrText, oDlg:nClrPane, oDlg:oBrush )

return nil

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

 
Regards

G. N. Rao.
Hyderabad, India
Post Reply