FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Ejecutar funciones creadas a traves de codigo
Posts: 38
Joined: Thu Oct 13, 2005 09:38 AM
Ejecutar funciones creadas a traves de codigo
Posted: Thu Jun 22, 2006 07:26 AM
Saludos amigos:

Trato de crear una rutina que me permita ejecutar funciones creadas desde codigo, quizas con un ejemplo se entienda mejor.

DEFINE WINDOW oWnd TITLE "Pruebas" COLOR "W+/BG";
@ 8,10 COMBOBOX oCbx VAR cCbx {"Cliente","Proveedor","Articulo"} OF oWnd SIZE 50,40
@ 10, 10 BUTTON oBtn1 PROMPT "Funcion" OF oWnd SIZE 32,16 ACTION MiFuncion(oWnd,cCbx)
@ 14, 10 BUTTON oBtn2 PROMPT "Salir" OF oWnd SIZE 32,16 ACTION oWnd:End()
ACTIVATE WINDOW oWnd MAXIMIZED
//
FUNCTION MiFuncion(oWnd,cCbx)
[// Aqui deberia ir el codigo que en funcion del valor del Combobox, lanzara la funcion correspondiente, algo asi como:
&(cCbx+"(oWnd)") // Esto no funciona

RETURN nil
//
FUNCTION CLiente(oWnd)
MsgInfo("Archivo de clientes")
RETURN nil
//
FUNCTION Proveedor(oWnd)
MsgInfo("Archivo de proveedores")
RETURN nil
//
FUNCTION Articulo(oWnd)
MsgInfo("Archivo de articulos")
RETURN nil

Gracias de antemano por vuestra ayuda
Un saludo
Alfonso Larrinaga
info@bsinformatica.net
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Ejecutar funciones creadas a traves de codigo
Posted: Thu Jun 22, 2006 10:16 AM
Alfonso,

Puedes usar la clase Symbol de Harbour, que está basada en la clase Symbol de Class(y):
FUNCTION MiFuncion(oWnd,cCbx) 

   local oSymbol :=  Symbol():New( cCbx )

   oSymbol:Exec( oWnd )

return nil
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 297
Joined: Fri Apr 14, 2006 05:52 PM
Ejecutar funciones creadas a traves de codigo
Posted: Thu Jun 22, 2006 08:48 PM
Txon:

Si quieres prueba esto, a mi me funciona perfectamente:

function main()
....
..... ACTION eval( &( "{|| pruebas()}" ) )
....
return


function pruebas()
msginfo("Probando")
return

SALUDOS

Miguel A.
Posts: 38
Joined: Thu Oct 13, 2005 09:38 AM
Ejecutar funciones creadas a traves de codigo
Posted: Fri Jun 23, 2006 08:59 AM

Gracias a todos por responder, he probado, eval( &( "{|| pruebas()}" ) ) y funciona perfectamente, el problema es cuando queremos pasar parametros en la funcion, por ejemplo eval( &( "{|| pruebas(oGet,nCampo)}" ) ), en ese caso devuelve un error al tiempo de ejecucion "Variable oGet no encontrada", cuando realmente esta definida con anterioridad.

Un saludo
Alfonso Larrinaga
info@bsinformatica.net
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Ejecutar funciones creadas a traves de codigo
Posted: Fri Jun 23, 2006 09:02 AM

Alfonso,

Las macros (&) usan la tabla de símbolos pública y las variables locales no estan en dicha tabla, por eso falla.

Pruébalo así:
eval( &( "{| o | pruebas( o,nCampo)}" ), oGet )

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 38
Joined: Thu Oct 13, 2005 09:38 AM
Ejecutar funciones creadas a traves de codigo
Posted: Fri Jun 23, 2006 11:08 AM

Funciona perfectamente, gracias, habia olvidado las nociones basicas de Clipper.

Un saludo
Alfonso Larrinaga
info@bsinformatica.net

Continue the discussion