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
Ejecutar funciones creadas a traves de codigo
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Alfonso,
Puedes usar la clase Symbol de Harbour, que está basada en la clase Symbol de Class(y):
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
-
- Posts: 287
- Joined: Fri Apr 14, 2006 5:52 pm
- Location: Córdoba (España)
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.
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact: