Pasar una function como parametro a un TXBrowse

Pasar una function como parametro a un TXBrowse

Postby Compuin » Fri Dec 27, 2019 7:55 pm

Hola Foro,

Es posible parar una funcion como parametro a un browse

Code: Select all  Expand view  RUN
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 los campos de dicho registro en el Dialogo de la funcion modificar )

Code: Select all  Expand view  RUN

FUCTION BROWSE ()


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


RETURN NIL
 



Gracias de antemano
FWH 20.12
Hbmk2 32/64 Bits (Build 19.29.30133)
Microsoft Visual C 32 Bits
MySql 8.0.24 32/64 Bits
VS Code
Compuin
 
Posts: 1214
Joined: Tue Dec 28, 2010 1:29 pm
Location: Quebec, Canada

Re: Pasar una function como parametro a un TXBrowse

Postby FranciscoA » Fri Dec 27, 2019 9:42 pm

Hola, aqui tienes un ejemplo. Modificalo segun tus necesidades.
Code: Select all  Expand view  RUN
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.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2159
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Pasar una function como parametro a un TXBrowse

Postby Compuin » Fri Dec 27, 2019 10:19 pm

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
FWH 20.12
Hbmk2 32/64 Bits (Build 19.29.30133)
Microsoft Visual C 32 Bits
MySql 8.0.24 32/64 Bits
VS Code
Compuin
 
Posts: 1214
Joined: Tue Dec 28, 2010 1:29 pm
Location: Quebec, Canada

Re: Pasar una function como parametro a un TXBrowse

Postby FranciscoA » Sat Dec 28, 2019 2:34 am

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

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2159
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Pasar una function como parametro a un TXBrowse

Postby Compuin » Sat Dec 28, 2019 3:31 am

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 ?
FWH 20.12
Hbmk2 32/64 Bits (Build 19.29.30133)
Microsoft Visual C 32 Bits
MySql 8.0.24 32/64 Bits
VS Code
Compuin
 
Posts: 1214
Joined: Tue Dec 28, 2010 1:29 pm
Location: Quebec, Canada

Re: Pasar una function como parametro a un TXBrowse

Postby cnavarro » Sat Dec 28, 2019 10:28 am

A ver si te he entendido

Code: Select all  Expand view  RUN


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

 
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6549
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Pasar una function como parametro a un TXBrowse

Postby Compuin » Sat Dec 28, 2019 2:45 pm

cnavarro wrote:A ver si te he entendido

Code: Select all  Expand view  RUN


  @ 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 los campos del registro donde estoy posicionado

Creo qie me explique mejor ahora
FWH 20.12
Hbmk2 32/64 Bits (Build 19.29.30133)
Microsoft Visual C 32 Bits
MySql 8.0.24 32/64 Bits
VS Code
Compuin
 
Posts: 1214
Joined: Tue Dec 28, 2010 1:29 pm
Location: Quebec, Canada

Re: Pasar una function como parametro a un TXBrowse

Postby FranciscoA » Sat Dec 28, 2019 5:10 pm

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 los campos 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  Expand view  RUN
:bLDblClick       := {|| oBrw:EditSource() }
y
DEFINE BUTTON OF oBar PROMPT "Modificar" CENTER ACTION oBrw:EditSource()
 


por:
Code: Select all  Expand view  RUN
: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.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2159
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.

Re: Pasar una function como parametro a un TXBrowse

Postby Compuin » Sat Dec 28, 2019 11:52 pm

Ya lo probe pero siempre trae el primer registro de la tabla y no el registro donde estoy posicionado
FWH 20.12
Hbmk2 32/64 Bits (Build 19.29.30133)
Microsoft Visual C 32 Bits
MySql 8.0.24 32/64 Bits
VS Code
Compuin
 
Posts: 1214
Joined: Tue Dec 28, 2010 1:29 pm
Location: Quebec, Canada


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: karinha and 67 guests