Page 1 of 1
Una funcion embebida en una variable??
Posted: Sat Apr 24, 2021 10:13 pm
by jorge_riv
Temgo esto_
FUNTION MAIN
...
...
FOR nI:=1 TO 4
Em_Menu( cWnd, nF,20,aMn[nI],aMnI[nI][1],aMnI[nI][2], nI, ;
"Em9_Validar_Base('nI')",4 )
nF += 100
NEXT
..
*"Em9_Validar_Base(nI)" // nO FUNCIONA TAMPOCO ASI
---------------------------
FUNTION Em_Menu(cWnd,nF,nC,aImg,aIco1,aIco2,nI,fAct,nL)
@ nF,nC IMAGE &(aImg) OF &(cWnd) PICTURE aIco1+'.jpg';
WIDTH 70 HEIGHT 70 STRETCH ;
ON MOUSEHOVER (This.Icon := aIco2+'.jpg') ;
ON MOUSELEAVE (This.Icon := aIco1+'.jpg') ;
ACTION IF(nI<nL,&(fAct),ThisWindow.Release)
*
RETURN Nil
**********
Problema:
Me da Error de que la variable que envio embebida en la variable no existe (variable nI)
Consulta:
Alguien sabe una forma de ejecutar una funcion con una variable dentro de una variable????
Gracias
Re: Una funcion embebida en una variable??
Posted: Sun Apr 25, 2021 1:09 am
by Claudio Ricardo
Hola... probastes con &nl
Re: Una funcion embebida en una variable??
Posted: Sun Apr 25, 2021 2:39 am
by AUGE_OHR
hi,
try use a Codeblock which you can "build" at Runtime
Code: Select all
PROCEDURE MAIN
LOCAL MyFunc := "MyFunc2"
MyFunc1(MyFunc,123)
WAIT
RETURN
PROCEDURE MyFunc1(cFunc,nIn)
LOCAL cBlock := "{||" + cFunc + "(" + STR(nIn) +")}"
EVAL(&cBlock)
RETURN
PROCEDURE MyFunc2(cIn)
? cIn
RETURN
Re: Una funcion embebida en una variable??
Posted: Sun May 02, 2021 1:15 am
by jorge_riv
Hola AUGE_OHR, Alias Jimmy, muy bueno tu codigo, lo probe y funciona perfecto, gracias con tu ejemplo pude solucionar el tema, solo tengo un inconveniente cuando presiono el boton derecho del mousse, logro capturar el codigo (en un textbox) pero no encuentro la forma de eliminar la opciones que aparecen, o sea quiero anular la el boton derecho en los texboxs, u no encuentro ejemplo alguno, si tenes algo por alli, manda ejemplo. Muchas Gracias
Re: Una funcion embebida en una variable??
Posted: Tue Mar 01, 2022 5:23 pm
by SALINETAS24
AUGE_OHR wrote: ↑Sun Apr 25, 2021 2:39 am
hi,
try use a Codeblock which you can "build" at Runtime
Code: Select all
PROCEDURE MAIN
LOCAL MyFunc := "MyFunc2"
MyFunc1(MyFunc,123)
WAIT
RETURN
PROCEDURE MyFunc1(cFunc,nIn)
LOCAL cBlock := "{||" + cFunc + "(" + STR(nIn) +")}"
EVAL(&cBlock)
RETURN
* PROCEDURE MyFunc2(cIn)
* ? cIn
* RETURN
STATIC PROCEDURE MyFunc2(cIn)
? cIn
RETURN
Hola a todos, tengo una duda.
Yo uso un procedimiento parecido a este, llamo a una función que cargo previamente en una variable y funciona correctamente, siempre y cuando no use "STATIC PROCEDURE MyFunc2".
Si llamo a una STATIC FUNC o STATIC PROC me dice que el procedimiento no existe, aunque este lineas más abajo
¿Alguien sabe porque...?
Tambien he probado solo con &funcion y obtengo el mismo resultado
¿Como puedo llamar desde una variable a una FUNCION o PROCEDURE con la clausula STATIC..?
Muchas gracias
Re: Una funcion embebida en una variable??
Posted: Tue Mar 01, 2022 8:34 pm
by Claudio Ricardo
Hola Salinetas
"Si llamo a una STATIC FUNC o STATIC PROC me dice que el procedimiento no existe, aunque este lineas más abajo"
Me pasó lo mismo y lo solucioné cortando esa función y pegándola mas arriba en el .prg (antes de la función que la llama)
para que ya esté definida cuando la llame.
Re: Una funcion embebida en una variable??
Posted: Wed Mar 02, 2022 8:04 am
by SALINETAS24
Hola Claudio, gracias por contestar.
Tu solución no me funciona, tengo esto
Code: Select all
PROC _EjecutaVirtual(cFuncion)
IF !EMPTY(cFuncion)
* EVAL({||&cFuncion})
&cFuncion
ENDIF
RETURN
Y lo tengo en una libreria, a modo de las antiguas "lib" con diversos procedimientos standard que uso en mis PRG.
En la compilación, este fichero esta puesto el ultimo.., pero me sigue dando el error cuando lo ejecuto.
Lo he resuelto un poco chapucilla, pero me vale. Llamo al procedimiento que quiero, y este a su vez llama al procedimiento STATIC, donde tengo el desarrollo.
Code: Select all
PROC _PantallaDatosVirtual()
_PantallaDatosVirtual1()
RETURN
STATIC PROC _PantallaDatosVirtual1()
Sl2
Re: Una funcion embebida en una variable??
Posted: Wed Mar 02, 2022 5:09 pm
by luisvasquezcl
Hola, creo que el problema es que tienes entre comillas la variable nl
Em9_Validar_Base('nI')", además que es de tipo numérico.
Espero te ayude, saludos.
Re: Una funcion embebida en una variable??
Posted: Thu Mar 03, 2022 1:15 am
by Claudio Ricardo
Hola Salinetas, eso es porque al llamar a la función por su verdadero nombre obligas al compilador
a tenerla cargada previamente cosa que no sucede si la llamás por referencia con " & " (amperstand)...
Es como como si a una variable que no has definido le preguntas el valor... por ejemplo MsgDebug (cVarNoDefinida)
cuando el programa llegue a esa linea te dará el mismo error de que no existe la variable " cVarNoDefinida "
Eso se soluciona si compilas con /n ese parámetro "creo si no recuerdo mal" obliga a compilar las funciones y
procedures aunque no sean llamadas desde el resto del programa, entonces sí las podés llamar por referencia con &.
Tu puedes tener una librería con 1000 funciones pero si el programa llama a sólo 2, esas serán las que se compilarán.