FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Pasar una function como parametro a un TXBrowse
Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Pasar una function como parametro a un TXBrowse
Posted: Fri Dec 27, 2019 07:55 PM
Hola Foro,

Es posible parar una funcion como parametro a un browse

Code (fw): Select all Collapse
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 (fw): Select all Collapse
FUCTION BROWSE ()


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


RETURN NIL



Gracias de antemano

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Pasar una function como parametro a un TXBrowse
Posted: Fri Dec 27, 2019 09:42 PM
Hola, aqui tienes un ejemplo. Modificalo segun tus necesidades.
Code (fw): Select all Collapse
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
Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Re: Pasar una function como parametro a un TXBrowse
Posted: 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 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Pasar una function como parametro a un TXBrowse
Posted: Sat Dec 28, 2019 02: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 (fw): Select all Collapse
#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
Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Re: Pasar una function como parametro a un TXBrowse
Posted: Sat Dec 28, 2019 03: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 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: Pasar una function como parametro a un TXBrowse
Posted: Sat Dec 28, 2019 10:28 AM
A ver si te he entendido

Code (fw): Select all Collapse
  @ 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
Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Re: Pasar una function como parametro a un TXBrowse
Posted: Sat Dec 28, 2019 02:45 PM
cnavarro wrote:A ver si te he entendido

Code (fw): Select all Collapse
  @ 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 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 2170
Joined: Fri Jul 18, 2008 01:24 AM
Re: Pasar una function como parametro a un TXBrowse
Posted: Sat Dec 28, 2019 05: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 (fw): Select all Collapse
 :bLDblClick       := {|| oBrw:EditSource() }
y
DEFINE BUTTON OF oBar PROMPT "Modificar" CENTER ACTION oBrw:EditSource()


por:
Code (fw): Select all Collapse
 :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
Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Re: Pasar una function como parametro a un TXBrowse
Posted: 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 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Continue the discussion