Una funcion embebida en una variable??
Moderator: Rathinagiri
Una funcion embebida en una variable??
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
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
- Claudio Ricardo
- Posts: 367
- Joined: Tue Oct 27, 2020 3:38 am
- DBs Used: DBF, MySQL, MariaDB
- Location: Bs. As. - Argentina
Re: Una funcion embebida en una variable??
Hola... probastes con &nl
Corrige al sabio y lo harás más sabio, Corrige al necio y lo harás tu enemigo.
WhatsApp / Telegram: +54 911-63016162
WhatsApp / Telegram: +54 911-63016162
- AUGE_OHR
- Posts: 2117
- Joined: Sun Aug 25, 2019 3:12 pm
- DBs Used: DBF, PostgreSQL, MySQL, SQLite
- Location: Hamburg, Germany
Re: Una funcion embebida en una variable??
hi,
try use a Codeblock which you can "build" at Runtime
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
have fun
Jimmy
Jimmy
Re: Una funcion embebida en una variable??
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
- SALINETAS24
- Posts: 667
- Joined: Tue Feb 27, 2018 3:06 am
- DBs Used: DBF
- Contact:
Re: Una funcion embebida en una variable??
AUGE_OHR wrote: ↑Sun Apr 25, 2021 2:39 am hi,
try use a Codeblock which you can "build" at RuntimeCode: 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
Como dijo el gran pensador Hommer Simpson..., - En este mundo solo hay 3 tipos de personas, los que saben contar y los que no. 
- Claudio Ricardo
- Posts: 367
- Joined: Tue Oct 27, 2020 3:38 am
- DBs Used: DBF, MySQL, MariaDB
- Location: Bs. As. - Argentina
Re: Una funcion embebida en una variable??
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.
"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.
Corrige al sabio y lo harás más sabio, Corrige al necio y lo harás tu enemigo.
WhatsApp / Telegram: +54 911-63016162
WhatsApp / Telegram: +54 911-63016162
- SALINETAS24
- Posts: 667
- Joined: Tue Feb 27, 2018 3:06 am
- DBs Used: DBF
- Contact:
Re: Una funcion embebida en una variable??
Hola Claudio, gracias por contestar.
Tu solución no me funciona, tengo esto
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.
Sl2
Tu solución no me funciona, tengo esto
Code: Select all
PROC _EjecutaVirtual(cFuncion)
IF !EMPTY(cFuncion)
* EVAL({||&cFuncion})
&cFuncion
ENDIF
RETURN
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()
Como dijo el gran pensador Hommer Simpson..., - En este mundo solo hay 3 tipos de personas, los que saben contar y los que no. 
- luisvasquezcl
- Posts: 1263
- Joined: Thu Jul 31, 2008 3:23 am
- Location: Chile
- Contact:
Re: Una funcion embebida en una variable??
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.
Em9_Validar_Base('nI')", además que es de tipo numérico.
Espero te ayude, saludos.
- Claudio Ricardo
- Posts: 367
- Joined: Tue Oct 27, 2020 3:38 am
- DBs Used: DBF, MySQL, MariaDB
- Location: Bs. As. - Argentina
Re: Una funcion embebida en una variable??
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.
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.
Corrige al sabio y lo harás más sabio, Corrige al necio y lo harás tu enemigo.
WhatsApp / Telegram: +54 911-63016162
WhatsApp / Telegram: +54 911-63016162