Page 1 of 1

Pasar una function como parametro a un TXBrowse

Posted: Fri Dec 27, 2019 7:55 pm
by Compuin
Hola Foro,

Es posible parar una funcion como parametro a un browse

Code: Select all

FUNCTION MODIFICAR()
...
...
RETURN NIL
En mi TxBrowse, agregar la funcion en esta linea y que se ejecute al hacer doble click en algun registro para modificarlo (Deberia Cargar _ de dicho registro en el Dialogo de la funcion modificar )

Code: Select all

FUCTION BROWSE ()


oBrw:blDblClick := ???????


RETURN NIL
 

Gracias de antemano

Re: Pasar una function como parametro a un TXBrowse

Posted: Fri Dec 27, 2019 9:42 pm
by FranciscoA
Hola, aqui tienes un ejemplo. Modificalo segun tus necesidades.

Code: Select all

Function Browse()
local oBrw
...
...
  oBrw:bLDblClick := {|| Modificar( oBrw ) }


Function Modificar(oBrw)
//----------------------------------------------------------------------------//
Function Modificar( oBrw )
   local oDlg, cAlias := oBrw:cAlias
   local nCodigo,cNombre
   local oCodigo,oNombre
   local lSave := .f.

   nCodigo   := (cAlias)->codigo
   cNombre   := (cAlias)->nombre

   DEFINE DIALOG oDlg RESOURCE "MODIFICAR" 

   REDEFINE GET oCodigo VAR  nCodigo ID 101 OF oDlg PICTURE "9999999999999999" 
   REDEFINE GET oNombre    VAR  cNombre    ID 103 OF oDlg PICTURE "@!"

   REDEFINE BTNBMP ID 312 OF oDlg ACTION ( lSave := .t. , oDlg:End() ) RESOURCE "ACEPTAR" LEFT NOBORDER
   REDEFINE BTNBMP ID 313 OF oDlg ACTION oDlg:End()   RESOURCE "CANCELAR" LEFT NOBORDER

   ACTIVATE DIALOG oDLG CENTERED 

   if lSave
      if (cAlias)->(Rlock())
         (cAlias)->Codigo := nCodigo
         (cAlias)->Nombre := cNombre
         dbcommit()
        (cAlias)->(dbUnlock())
     endif
  endif

      oBrw:Refresh()
     oBrw:SetFocus()
return nil
 

Re: Pasar una function como parametro a un TXBrowse

Posted: Fri Dec 27, 2019 10:19 pm
by Compuin
Muchas Gracias Francisco, esta es la forma que lo estoy haciendo

Lo que necesito es colocarlo en una clase, asi en lugar pasar la funcion modificar, pasar diferentes funciones Modificar de acuerdo a la gestion (modificar articulos, modificar clientes, modificar proveedores, etc)

Espero haberme hecho entender

Re: Pasar una function como parametro a un TXBrowse

Posted: Sat Dec 28, 2019 2:34 am
by FranciscoA
pasar diferentes funciones Modificar de acuerdo a la gestion (modificar articulos, modificar clientes, modificar proveedores, etc)
Puede ser que este ejemplo te sirva de guia:

Code: Select all

#include "fivewin.ch"
REQUEST DBFCDX
//---------------------------------------------------------//
function Main()   //xBrwEdit3()
local cAlias, aTablas := {"States","Customer"}
local bSelect := { |oBrw| cAlias := oBrw:aArrayData[oBrw:nArrayAt] }

   SET DELETED ON

   XBROWSE(aTablas,,,,,bSelect)

   DbUseArea(.t.,,cAlias,cAlias,.t.) 

   XBrwEdiTbl(cAlias)

   (cAlias)->(DbCloseArea())

Return nil

//---------------------------------------------------------//
function XBrwEdiTbl(cAlias)
   local oDlg, oBar, oBrw, oFont

   DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-14

   DEFINE DIALOG oDlg SIZE 400,500 PIXEL TRUEPIXEL FONT oFont TITLE "MODIFICANDO " + cAlias

   DEFINE BUTTONBAR oBar OF oDlg SIZE 80,32 2007

   @ 52,20 XBROWSE oBrw SIZE -20,-20 PIXEL OF oDlg ;
      DATASOURCE cAlias AUTOCOLS ;
      CELL FOOTERS NOBORDER 

   WITH OBJECT oBrw
      :nMarqueeStyle    := MARQSTYLE_HIGHLROW 
      :nRowDividerStyle := LINESTYLE_LIGHTGRAY
      :bLDblClick       := {|| oBrw:EditSource() }
      :CreateFromCode()
   END

   DEFINE BUTTON OF oBar PROMPT "Modificar" CENTER ACTION oBrw:EditSource()
   DEFINE BUTTON OF oBar PROMPT "Salir"     CENTER ACTION oDlg:End() 

   ACTIVATE DIALOG oDlg CENTERED

   RELEASE FONT oFont

return nil
 
Saludos.

Re: Pasar una function como parametro a un TXBrowse

Posted: Sat Dec 28, 2019 3:31 am
by Compuin
Gracias Francisco

Replanteo mi pregunta

Tengo un TXBrowse con 3 botones (Agregar, Modificar y Borrar ) como hago en el browse para seleccionar un registro y que este llame a la funcion Modificar de tu ejemplo, llamandola desde el boton ?

Re: Pasar una function como parametro a un TXBrowse

Posted: Sat Dec 28, 2019 10:28 am
by cnavarro
A ver si te he entendido

Code: Select all


  @ r, c BUTTON oBtn ......         ACTION Eval( oBrw:bLDblClick )

 

Re: Pasar una function como parametro a un TXBrowse

Posted: Sat Dec 28, 2019 2:45 pm
by Compuin
cnavarro wrote:A ver si te he entendido

Code: Select all


  @ r, c BUTTON oBtn ......         ACTION Eval( oBrw:bLDblClick )

 
Ok,

Si tengo un browse y le doy click a un registro y luego voy al boton MOdificar, que este me traiga el dialogo con todos _ del registro donde estoy posicionado

Creo qie me explique mejor ahora

Re: Pasar una function como parametro a un TXBrowse

Posted: Sat Dec 28, 2019 5:10 pm
by FranciscoA
Compuin wrote:
Ok,

Si tengo un browse y le doy click a un registro y luego voy al boton MOdificar, que este me traiga el dialogo con todos _ del registro donde estoy posicionado

Creo qie me explique mejor ahora
Compuin:
Compilaste y probaste el segundo ejemplo que posteé?
La function XBrwEdiTbl(cAlias) hace precisamente lo que expones, a travez de oBrw:EditSource(), que lo trae integrado la classe TXBrowse.
(te dá la opción del doble click sobre un registro, o click el boton modificar)

Si prefieres hacer tu propia function, solamente tienes que reemplazar:

Code: Select all

 :bLDblClick       := {|| oBrw:EditSource() }
y
DEFINE BUTTON OF oBar PROMPT "Modificar" CENTER ACTION oBrw:EditSource()
 
por:

Code: Select all

 :bLDblClick       := {|| TuFuncDeModificar(oBrw) }
y
DEFINE BUTTON OF oBar PROMPT "Modificar" CENTER ACTION Eval(oBrw:bLDblClick)  //  ó  TuFuncDeModificar(oBrw)
 
Saludos.

Re: Pasar una function como parametro a un TXBrowse

Posted: Sat Dec 28, 2019 11:52 pm
by Compuin
Ya lo probe pero siempre trae el primer registro de la tabla y no el registro donde estoy posicionado