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

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

Postby Armando » Sun Jun 02, 2019 5:31 pm

Hola Foreros:

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

Code: Select all  Expand view  RUN

    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
 
Posts: 3242
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

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

Postby armando.lagunas » Mon Jun 03, 2019 2:11 pm

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  Expand view  RUN
       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]
SkyPe: armando.lagunas@hotmail.com
Mail: armando.lagunas@gmail.com
User avatar
armando.lagunas
 
Posts: 346
Joined: Mon Oct 05, 2009 3:35 pm
Location: Curico-Chile

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

Postby Armando » Mon Jun 03, 2019 5:03 pm

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
Armando
 
Posts: 3242
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

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

Postby karinha » Mon Jun 03, 2019 5:48 pm

Intenta asi:

Code: Select all  Expand view  RUN

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

      ó

      oDlg:oWnd:AEvalWhen()

      ó

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

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

Postby Armando » Mon Jun 03, 2019 8:11 pm

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
Armando
 
Posts: 3242
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

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

Postby jvtecheto » Mon Jun 03, 2019 9:23 pm

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

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 24.07 64 bits + Harbour 64 bits 3.2dev(r2407221137) + MSVC64
User avatar
jvtecheto
 
Posts: 602
Joined: Mon Mar 04, 2013 4:32 pm
Location: Spain

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

Postby jvtecheto » Mon Jun 03, 2019 9:25 pm

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

Saludos.

Jose.
Fwh 24.07 64 bits + Harbour 64 bits 3.2dev(r2407221137) + MSVC64
User avatar
jvtecheto
 
Posts: 602
Joined: Mon Mar 04, 2013 4:32 pm
Location: Spain

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

Postby Armando » Mon Jun 03, 2019 10:59 pm

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
User avatar
Armando
 
Posts: 3242
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

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

Postby russimicro » Tue Jun 04, 2019 11:06 am

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


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
russimicro
 
Posts: 262
Joined: Sun Jan 31, 2010 3:30 pm
Location: Bucaramanga - Colombia

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

Postby Armando » Tue Jun 04, 2019 4:57 pm

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
Armando
 
Posts: 3242
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

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

Postby nageswaragunupudi » Thu Jun 06, 2019 5:10 am

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  Expand view  RUN
#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
nageswaragunupudi
 
Posts: 10690
Joined: Sun Nov 19, 2006 5:22 am
Location: India

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

Postby Armando » Thu Jun 06, 2019 2:21 pm

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: 3242
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

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

Postby Armando » Thu Jun 06, 2019 4:39 pm

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
Armando
 
Posts: 3242
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México

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

Postby nageswaragunupudi » Thu Jun 06, 2019 11:08 pm

The command used
Code: Select all  Expand view  RUN

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
viewtopic.php?f=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: 10690
Joined: Sun Nov 19, 2006 5:22 am
Location: India

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

Postby nageswaragunupudi » Fri Jun 07, 2019 12:21 am

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

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  Expand view  RUN
#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
User avatar
nageswaragunupudi
 
Posts: 10690
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 19 guests