Ejecutar funciones creadas a traves de codigo

Ejecutar funciones creadas a traves de codigo

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

Postby Antonio Linares » 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):
Code: Select all  Expand view  RUN
FUNCTION MiFuncion(oWnd,cCbx)

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

   oSymbol:Exec( oWnd )

return nil
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42149
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby Mike Serra » Thu Jun 22, 2006 8: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.
Mike Serra
 
Posts: 297
Joined: Fri Apr 14, 2006 5:52 pm
Location: Córdoba (España)

Postby txon » Fri Jun 23, 2006 8: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
User avatar
txon
 
Posts: 38
Joined: Thu Oct 13, 2005 9:38 am
Location: Santurce / Vizcaya / España

Postby Antonio Linares » Fri Jun 23, 2006 9: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
User avatar
Antonio Linares
Site Admin
 
Posts: 42149
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Postby txon » Fri Jun 23, 2006 11:08 am

Funciona perfectamente, gracias, habia olvidado las nociones basicas de Clipper.
Un saludo
Alfonso Larrinaga
info@bsinformatica.net
User avatar
txon
 
Posts: 38
Joined: Thu Oct 13, 2005 9:38 am
Location: Santurce / Vizcaya / España


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 41 guests