Ejecutar funciones creadas a traves de codigo

Post Reply
User avatar
txon
Posts: 38
Joined: Thu Oct 13, 2005 9:38 am
Location: Santurce / Vizcaya / España
Contact:

Ejecutar funciones creadas a traves de codigo

Post by txon »

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
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Alfonso,

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

Code: Select all

FUNCTION MiFuncion(oWnd,cCbx) 

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

   oSymbol:Exec( oWnd )

return nil
regards, saludos

Antonio Linares
www.fivetechsoft.com
Mike Serra
Posts: 287
Joined: Fri Apr 14, 2006 5:52 pm
Location: Córdoba (España)

Post by Mike Serra »

Txon:

Si quieres prueba esto, a mi me funciona perfectamente:

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


function pruebas()
msginfo("Probando")
return

SALUDOS

Miguel A.
User avatar
txon
Posts: 38
Joined: Thu Oct 13, 2005 9:38 am
Location: Santurce / Vizcaya / España
Contact:

Post by txon »

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
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

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
User avatar
txon
Posts: 38
Joined: Thu Oct 13, 2005 9:38 am
Location: Santurce / Vizcaya / España
Contact:

Post by txon »

Funciona perfectamente, gracias, habia olvidado las nociones basicas de Clipper.
Un saludo
Alfonso Larrinaga
info@bsinformatica.net
Post Reply