Pasar una function como parametro a un TXBrowse

Post Reply
Compuin
Posts: 1017
Joined: Tue Dec 28, 2010 1:29 pm

Pasar una function como parametro a un TXBrowse

Post 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
User avatar
FranciscoA
Posts: 1964
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Pasar una function como parametro a un TXBrowse

Post 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
 
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh1204-MySql-TMySql
Compuin
Posts: 1017
Joined: Tue Dec 28, 2010 1:29 pm

Re: Pasar una function como parametro a un TXBrowse

Post 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
User avatar
FranciscoA
Posts: 1964
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Pasar una function como parametro a un TXBrowse

Post 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.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh1204-MySql-TMySql
Compuin
Posts: 1017
Joined: Tue Dec 28, 2010 1:29 pm

Re: Pasar una function como parametro a un TXBrowse

Post 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 ?
User avatar
cnavarro
Posts: 5792
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Pasar una function como parametro a un TXBrowse

Post by cnavarro »

A ver si te he entendido

Code: Select all


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

 
C. Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
Si alguien te dice que algo no se puede hacer, recuerda que esta hablando de sus limitaciones, no de las tuyas.
Compuin
Posts: 1017
Joined: Tue Dec 28, 2010 1:29 pm

Re: Pasar una function como parametro a un TXBrowse

Post 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
User avatar
FranciscoA
Posts: 1964
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Pasar una function como parametro a un TXBrowse

Post 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.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh1204-MySql-TMySql
Compuin
Posts: 1017
Joined: Tue Dec 28, 2010 1:29 pm

Re: Pasar una function como parametro a un TXBrowse

Post by Compuin »

Ya lo probe pero siempre trae el primer registro de la tabla y no el registro donde estoy posicionado
Post Reply