Page 1 of 1
Diálogo NOMODAL y variable PRIVATE
Posted: Fri Oct 19, 2007 4:50 pm
by Manuel Aranda
En un diálogo MODAL tengo un BROWSE que se va filtrando según voy tecleando letras; para ello uso una variable PRIVATE y todo va perfectamente. Al convertir el dialogo a NOMODAL me salta el error de que la variable cKey no existe. ¿Por qué?
Code: Select all
PRIVATE cKey
cKey=""
//
DEFINE DIALOG oDlg RESOURCE "AGENDA" TITLE cTitulo FONT oFont1
oDlg:lHelpIcon:=.F.
REDEFINE LISTBOX oLbx ;
FIELDS IIF(EMPTY(AGENDA->Ubicado)," ",aLevel[ 5 ] ),;
+" "+AGENDA->Texto+" ";
FIELDSIZES 16,300;
HEADERS "A", " Texto";
ID 200;
OF oDlg
oLbx:bkeydown:={|nKey|DOKEYCHECK(nKey,oLbx,oDlg,oSay)}
Posted: Fri Oct 19, 2007 6:30 pm
by karinha
MEMVAR cKey
PRIVATE cKey
cKey := ""
Repita en las otras funciones, si usas la variable en las otras funciones.
Posted: Fri Oct 19, 2007 6:55 pm
by Manuel Aranda
Gracias karinha, pero persiste el error. La variable cKey se usa en la función DOKEYCHECK(nKey,oLbx,oDlg,oSay), y como ya dije, cuando el diálogo es MODAL no hay problema.
Un saludo,
Manuel
Posted: Fri Oct 19, 2007 7:12 pm
by karinha
#include "FiveWin.ch"
//----------------------------------------------------------------//
Code: Select all
function Main()
LOCAL oLbx, oDlg, oSay, nKey := VK_RETURN
MEMVAR cKey
PRIVATE cKey
cKey := "teste de cKey, Manuel Aranda"
? ckey
DEFINE DIALOG oDlg RESOURCE "AGENDA" TITLE cTitulo FONT oFont1
oDlg:lHelpIcon:=.F.
REDEFINE LISTBOX oLbx ;
FIELDS IIF(EMPTY(AGENDA->Ubicado)," ",aLevel[ 5 ] ),;
+" "+AGENDA->Texto+" ";
FIELDSIZES 16,300;
HEADERS "A", " Texto";
ID 200;
OF oDlg
oLbx:bkeydown:={|nKey|DOKEYCHECK(nKey,oLbx,oDlg,oSay)}
ACTIVATE DIALOG oDlg CENTERED
DOKEYCHECK(nKey,oLbx,oDlg,oSay)
RETURN NIL
STATIC FUNCTION DOKEYCHECK(nKey,oLbx,oDlg,oSay)
MEMVAR cKey
? cKey
RETURN( .T. )
Posted: Fri Oct 19, 2007 7:23 pm
by Manuel Aranda
Así si funciona, pero si haces el diálogo NOMODAL es cuando se produce el error
ACTIVATE DIALOG oDlg CENTERED NOMODAL
Posted: Fri Oct 19, 2007 7:35 pm
by karinha
ACTIVATE DIALOG oDlg CENTERED NOMODAL
SI USAS RECURSOS, DESHABILITE EN EL RECURSO DEL WORKSHOP.EXE LA CLAUSULA MODAL FRAME SOLAMENTE.
CREO, QUE SEA APENAS ESTO.
Regards, saludos.
QUE INTENTAS HACER???
Posted: Fri Oct 19, 2007 8:49 pm
by jacgsoft
pues declara como Publica y listo
Public cKey
Posted: Sat Oct 20, 2007 10:24 am
by Manuel Aranda
karinha, sigue el mismo error independientemente de que la ventana sea modal o no modal en el recurso.
jacgsoft, gracias. Haciendo pública la variable ya funciona correctamente.
Pero me intriga saber por qué no funciona como private si hago el diálogo NOMODAL. En fín, como tantas otras cosas. Correremos un tupido velo y aplicaremos la máxima "si funciona no lo toques".
Un saludo,
Manuel
Posted: Sat Oct 20, 2007 6:20 pm
by Francisco Horta
Miguel, prueba a pasarla como referencia a ver si funciona DOKEYCHECK(nKey,oLbx,oDlg,oSay,@cKey)
STATIC FUNCTION DOKEYCHECK(nKey,oLbx,oDlg,oSay,cKey)
salu2
Paco
Posted: Sat Oct 20, 2007 6:32 pm
by Manuel Aranda
Gracias Francisco, pero tampoco funciona así.
Un saludo,
Manuel
Francisco Horta wrote:Miguel, prueba a pasarla como referencia a ver si funciona DOKEYCHECK(nKey,oLbx,oDlg,oSay,@cKey)
STATIC FUNCTION DOKEYCHECK(nKey,oLbx,oDlg,oSay,cKey)
salu2
Paco
Posted: Sun Oct 21, 2007 1:08 am
by Francisco Horta
Migeul, probaste a declararla STATIC y probaste tambien como LOCAL ? preba pasandola como refer aver si funciona. sino lo mas facil es declararla PUBLIC
salu2
paco
Posted: Sun Oct 21, 2007 1:34 am
by wilsongamboa
Manuel
me parece que cuando es nomodal el dialogo, la funcion donde declaras private a la variable ya termino de ejecutarse y solo queda activado el dialogo, porque la ejecucion del programa no se detiene, y por eso ya no existe esa variable, mejor la trabajas como local, porque igual si la declaras public el contenido de la misma variaria si acceden al mismo dialogo varias veces
bueno espero te ayude
Saludos
Posted: Sun Oct 21, 2007 9:36 am
by Manuel Aranda
Gracias a todos, especialmente a Francisco Horta. Pasándola como referencia funciona si se define como LOCAL o STATIC pero no como PRIVATE que es como la tenía cuando el diálogo era MODAL. De todas formas prefiero esta solución a declararla PUBLICA.
Un saludo,
Manuel
Posted: Sun Oct 21, 2007 9:42 am
by Antonio Linares
Manuel,
Como te indica Wilson, la ejecución no se detiene y entonces sales del ámbito en donde la variable private fué creada y la maquina virtual de Harbour la destruye